Merge "Fixing typo on fragments page."
diff --git a/Android.mk b/Android.mk
index be8c25b..a38723a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -400,6 +400,10 @@
resources/samples/AccessibilityService "Accessibility Service" \
-samplecode $(sample_dir)/AccelerometerPlay \
resources/samples/AccelerometerPlay "Accelerometer Play" \
+ -samplecode $(sample_dir)/ActionBarCompat \
+ resources/samples/ActionBarCompat "Action Bar Compatibility" \
+ -samplecode $(sample_dir)/AndroidBeam \
+ resources/samples/AndroidBeam "Android Beam" \
-samplecode $(sample_dir)/ApiDemos \
resources/samples/ApiDemos "API Demos" \
-samplecode $(sample_dir)/Support4Demos \
@@ -414,12 +418,12 @@
resources/samples/BusinessCard "Business Card" \
-samplecode $(sample_dir)/ContactManager \
resources/samples/ContactManager "Contact Manager" \
- -samplecode $(sample_dir)/CubeLiveWallpaper \
- resources/samples/CubeLiveWallpaper "Cube Live Wallpaper" \
+ -samplecode $(sample_dir)/CubeLiveWallpaper \
+ resources/samples/CubeLiveWallpaper "Cube Live Wallpaper" \
-samplecode $(sample_dir)/Home \
resources/samples/Home "Home" \
- -samplecode $(sample_dir)/HoneycombGallery \
- resources/samples/HoneycombGallery "Honeycomb Gallery" \
+ -samplecode $(sample_dir)/HoneycombGallery \
+ resources/samples/HoneycombGallery "Honeycomb Gallery" \
-samplecode $(sample_dir)/JetBoy \
resources/samples/JetBoy "JetBoy" \
-samplecode $(sample_dir)/LunarLander \
@@ -430,6 +434,8 @@
resources/samples/NFCDemo "NFC Demo" \
-samplecode $(sample_dir)/NotePad \
resources/samples/NotePad "Note Pad" \
+ -samplecode $(sample_dir)/SampleSpellCheckerService \
+ resources/samples/SampleSpellCheckerService "Spell Checker" \
-samplecode $(sample_dir)/SampleSyncAdapter \
resources/samples/SampleSyncAdapter "Sample Sync Adapter" \
-samplecode $(sample_dir)/RandomMusicPlayer \
@@ -458,6 +464,8 @@
resources/samples/USB "USB" \
-samplecode $(sample_dir)/WeatherListWidget \
resources/samples/WeatherListWidget "Weather List Widget" \
+ -samplecode $(sample_dir)/WiFiDirectDemo \
+ resources/samples/WiFiDirectDemo "Wi-Fi Direct Demo" \
-samplecode $(sample_dir)/Wiktionary \
resources/samples/Wiktionary "Wiktionary" \
-samplecode $(sample_dir)/WiktionarySimple \
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 6ae887b..fb334fc 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -113,6 +113,10 @@
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/fonts/Lohit_Hindi.ttf)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/fonts/DroidSans*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/fonts/DroidSans*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/api/14.txt b/api/14.txt
index 9f2a6df..92969f6 100644
--- a/api/14.txt
+++ b/api/14.txt
@@ -11541,7 +11541,6 @@
public class ConnectivityManager {
method public android.net.NetworkInfo getActiveNetworkInfo();
- method public android.net.NetworkQuotaInfo getActiveNetworkQuotaInfo();
method public android.net.NetworkInfo[] getAllNetworkInfo();
method public deprecated boolean getBackgroundDataSetting();
method public android.net.NetworkInfo getNetworkInfo(int);
@@ -11701,16 +11700,6 @@
enum_constant public static final android.net.NetworkInfo.State UNKNOWN;
}
- public class NetworkQuotaInfo implements android.os.Parcelable {
- method public int describeContents();
- method public long getEstimatedBytes();
- method public long getHardLimitBytes();
- method public long getSoftLimitBytes();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- field public static final long NO_LIMIT = -1L; // 0xffffffffffffffffL
- }
-
public class ParseException extends java.lang.RuntimeException {
field public java.lang.String response;
}
@@ -16583,10 +16572,6 @@
field public static final java.lang.String PHOTO_FILE_ID = "data14";
}
- public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
- field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
- }
-
protected static abstract interface ContactsContract.ContactsColumns {
field public static final java.lang.String DISPLAY_NAME = "display_name";
field public static final java.lang.String HAS_PHONE_NUMBER = "has_phone_number";
@@ -16844,10 +16829,6 @@
field public static final java.lang.String DATA_ID = "data_id";
}
- public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
- field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
- }
-
protected static abstract interface ContactsContract.RawContactsColumns {
field public static final java.lang.String AGGREGATION_MODE = "aggregation_mode";
field public static final java.lang.String CONTACT_ID = "contact_id";
@@ -16911,56 +16892,6 @@
field public static final android.net.Uri PROFILE_CONTENT_URI;
}
- public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
- field public static final java.lang.String PHOTO = "photo";
- }
-
- protected static abstract interface ContactsContract.StreamItemPhotosColumns {
- field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id";
- field public static final java.lang.String PHOTO_URI = "photo_uri";
- field public static final java.lang.String SORT_INDEX = "sort_index";
- field public static final java.lang.String STREAM_ITEM_ID = "stream_item_id";
- field public static final java.lang.String SYNC1 = "stream_item_photo_sync1";
- field public static final java.lang.String SYNC2 = "stream_item_photo_sync2";
- field public static final java.lang.String SYNC3 = "stream_item_photo_sync3";
- field public static final java.lang.String SYNC4 = "stream_item_photo_sync4";
- }
-
- public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
- field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
- field public static final android.net.Uri CONTENT_LIMIT_URI;
- field public static final android.net.Uri CONTENT_PHOTO_URI;
- field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
- field public static final android.net.Uri CONTENT_URI;
- field public static final java.lang.String MAX_ITEMS = "max_items";
- }
-
- public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
- field public static final java.lang.String CONTENT_DIRECTORY = "photo";
- field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
- field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
- }
-
- protected static abstract interface ContactsContract.StreamItemsColumns {
- field public static final java.lang.String ACCOUNT_NAME = "account_name";
- field public static final java.lang.String ACCOUNT_TYPE = "account_type";
- field public static final java.lang.String COMMENTS = "comments";
- field public static final java.lang.String CONTACT_ID = "contact_id";
- field public static final java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup";
- field public static final java.lang.String DATA_SET = "data_set";
- field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id";
- field public static final java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
- field public static final java.lang.String RES_ICON = "icon";
- field public static final java.lang.String RES_LABEL = "label";
- field public static final java.lang.String RES_PACKAGE = "res_package";
- field public static final java.lang.String SYNC1 = "stream_item_sync1";
- field public static final java.lang.String SYNC2 = "stream_item_sync2";
- field public static final java.lang.String SYNC3 = "stream_item_sync3";
- field public static final java.lang.String SYNC4 = "stream_item_sync4";
- field public static final java.lang.String TEXT = "text";
- field public static final java.lang.String TIMESTAMP = "timestamp";
- }
-
protected static abstract interface ContactsContract.SyncColumns implements android.provider.ContactsContract.BaseSyncColumns {
field public static final java.lang.String ACCOUNT_NAME = "account_name";
field public static final java.lang.String ACCOUNT_TYPE = "account_type";
diff --git a/api/current.txt b/api/current.txt
index 9f2a6df..662ebcd 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -11541,7 +11541,6 @@
public class ConnectivityManager {
method public android.net.NetworkInfo getActiveNetworkInfo();
- method public android.net.NetworkQuotaInfo getActiveNetworkQuotaInfo();
method public android.net.NetworkInfo[] getAllNetworkInfo();
method public deprecated boolean getBackgroundDataSetting();
method public android.net.NetworkInfo getNetworkInfo(int);
@@ -11701,16 +11700,6 @@
enum_constant public static final android.net.NetworkInfo.State UNKNOWN;
}
- public class NetworkQuotaInfo implements android.os.Parcelable {
- method public int describeContents();
- method public long getEstimatedBytes();
- method public long getHardLimitBytes();
- method public long getSoftLimitBytes();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- field public static final long NO_LIMIT = -1L; // 0xffffffffffffffffL
- }
-
public class ParseException extends java.lang.RuntimeException {
field public java.lang.String response;
}
@@ -16583,10 +16572,6 @@
field public static final java.lang.String PHOTO_FILE_ID = "data14";
}
- public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
- field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
- }
-
protected static abstract interface ContactsContract.ContactsColumns {
field public static final java.lang.String DISPLAY_NAME = "display_name";
field public static final java.lang.String HAS_PHONE_NUMBER = "has_phone_number";
@@ -16844,10 +16829,6 @@
field public static final java.lang.String DATA_ID = "data_id";
}
- public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
- field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
- }
-
protected static abstract interface ContactsContract.RawContactsColumns {
field public static final java.lang.String AGGREGATION_MODE = "aggregation_mode";
field public static final java.lang.String CONTACT_ID = "contact_id";
@@ -16911,56 +16892,6 @@
field public static final android.net.Uri PROFILE_CONTENT_URI;
}
- public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
- field public static final java.lang.String PHOTO = "photo";
- }
-
- protected static abstract interface ContactsContract.StreamItemPhotosColumns {
- field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id";
- field public static final java.lang.String PHOTO_URI = "photo_uri";
- field public static final java.lang.String SORT_INDEX = "sort_index";
- field public static final java.lang.String STREAM_ITEM_ID = "stream_item_id";
- field public static final java.lang.String SYNC1 = "stream_item_photo_sync1";
- field public static final java.lang.String SYNC2 = "stream_item_photo_sync2";
- field public static final java.lang.String SYNC3 = "stream_item_photo_sync3";
- field public static final java.lang.String SYNC4 = "stream_item_photo_sync4";
- }
-
- public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
- field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
- field public static final android.net.Uri CONTENT_LIMIT_URI;
- field public static final android.net.Uri CONTENT_PHOTO_URI;
- field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
- field public static final android.net.Uri CONTENT_URI;
- field public static final java.lang.String MAX_ITEMS = "max_items";
- }
-
- public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
- field public static final java.lang.String CONTENT_DIRECTORY = "photo";
- field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
- field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
- }
-
- protected static abstract interface ContactsContract.StreamItemsColumns {
- field public static final java.lang.String ACCOUNT_NAME = "account_name";
- field public static final java.lang.String ACCOUNT_TYPE = "account_type";
- field public static final java.lang.String COMMENTS = "comments";
- field public static final java.lang.String CONTACT_ID = "contact_id";
- field public static final java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup";
- field public static final java.lang.String DATA_SET = "data_set";
- field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id";
- field public static final java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
- field public static final java.lang.String RES_ICON = "icon";
- field public static final java.lang.String RES_LABEL = "label";
- field public static final java.lang.String RES_PACKAGE = "res_package";
- field public static final java.lang.String SYNC1 = "stream_item_sync1";
- field public static final java.lang.String SYNC2 = "stream_item_sync2";
- field public static final java.lang.String SYNC3 = "stream_item_sync3";
- field public static final java.lang.String SYNC4 = "stream_item_sync4";
- field public static final java.lang.String TEXT = "text";
- field public static final java.lang.String TIMESTAMP = "timestamp";
- }
-
protected static abstract interface ContactsContract.SyncColumns implements android.provider.ContactsContract.BaseSyncColumns {
field public static final java.lang.String ACCOUNT_NAME = "account_name";
field public static final java.lang.String ACCOUNT_TYPE = "account_type";
@@ -24151,6 +24082,8 @@
method public int getCurrentItemIndex();
method public int getFromIndex();
method public int getItemCount();
+ method public int getMaxScrollX();
+ method public int getMaxScrollY();
method public android.os.Parcelable getParcelableData();
method public int getRemovedCount();
method public int getScrollX();
@@ -24177,6 +24110,8 @@
method public void setFromIndex(int);
method public void setFullScreen(boolean);
method public void setItemCount(int);
+ method public void setMaxScrollX(int);
+ method public void setMaxScrollY(int);
method public void setParcelableData(android.os.Parcelable);
method public void setPassword(boolean);
method public void setRemovedCount(int);
diff --git a/cmds/bu/src/com/android/commands/bu/Backup.java b/cmds/bu/src/com/android/commands/bu/Backup.java
index 4c4bf98..046ccca 100644
--- a/cmds/bu/src/com/android/commands/bu/Backup.java
+++ b/cmds/bu/src/com/android/commands/bu/Backup.java
@@ -66,6 +66,7 @@
boolean saveApks = false;
boolean saveShared = false;
boolean doEverything = false;
+ boolean allIncludesSystem = true;
String arg;
while ((arg = nextArg()) != null) {
@@ -78,6 +79,10 @@
saveShared = true;
} else if ("-noshared".equals(arg)) {
saveShared = false;
+ } else if ("-system".equals(arg)) {
+ allIncludesSystem = true;
+ } else if ("-nosystem".equals(arg)) {
+ allIncludesSystem = false;
} else if ("-all".equals(arg)) {
doEverything = true;
} else {
@@ -102,7 +107,7 @@
try {
ParcelFileDescriptor fd = ParcelFileDescriptor.adoptFd(socketFd);
String[] packArray = new String[packages.size()];
- mBackupManager.fullBackup(fd, saveApks, saveShared, doEverything,
+ mBackupManager.fullBackup(fd, saveApks, saveShared, doEverything, allIncludesSystem,
packages.toArray(packArray));
} catch (RemoteException e) {
Log.e(TAG, "Unable to invoke backup manager for backup");
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index 528d197..5005c13 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -1021,6 +1021,7 @@
syncInfoPresent = false;
} else {
extractor = MediaExtractor::Create(dataSource);
+
if (extractor == NULL) {
fprintf(stderr, "could not create extractor.\n");
return -1;
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 173da8d..1ba8eee 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -1033,8 +1033,12 @@
mContext.getString(R.string.permission_request_notification_with_subtitle,
account.name);
final int index = titleAndSubtitle.indexOf('\n');
- final String title = titleAndSubtitle.substring(0, index);
- final String subtitle = titleAndSubtitle.substring(index + 1);
+ String title = titleAndSubtitle;
+ String subtitle = "";
+ if (index > 0) {
+ title = titleAndSubtitle.substring(0, index);
+ subtitle = titleAndSubtitle.substring(index + 1);
+ }
n.setLatestEventInfo(mContext,
title, subtitle,
PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT));
@@ -1811,6 +1815,14 @@
}
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ fout.println("Permission Denial: can't dump AccountsManager from from pid="
+ + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
+ + " without permission " + android.Manifest.permission.DUMP);
+ return;
+ }
+
synchronized (mCacheLock) {
final SQLiteDatabase db = mOpenHelper.getReadableDatabase();
diff --git a/core/java/android/accounts/ChooseAccountTypeActivity.java b/core/java/android/accounts/ChooseAccountTypeActivity.java
index 448b2c0..acc8549 100644
--- a/core/java/android/accounts/ChooseAccountTypeActivity.java
+++ b/core/java/android/accounts/ChooseAccountTypeActivity.java
@@ -43,7 +43,7 @@
* @hide
*/
public class ChooseAccountTypeActivity extends Activity {
- private static final String TAG = "AccountManager";
+ private static final String TAG = "AccountChooser";
private HashMap<String, AuthInfo> mTypeToAuthenticatorInfo = new HashMap<String, AuthInfo>();
private ArrayList<AuthInfo> mAuthenticatorInfosToDisplay;
@@ -52,6 +52,11 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseAccountTypeActivity.onCreate(savedInstanceState="
+ + savedInstanceState + ")");
+ }
+
// Read the validAccountTypes, if present, and add them to the setOfAllowableAccountTypes
Set<String> setOfAllowableAccountTypes = null;
String[] validAccountTypes = getIntent().getStringArrayExtra(
@@ -111,8 +116,10 @@
Bundle bundle = new Bundle();
bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
- Log.d(TAG, "ChooseAccountTypeActivity.setResultAndFinish: "
- + "selected account type " + type);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseAccountTypeActivity.setResultAndFinish: "
+ + "selected account type " + type);
+ }
finish();
}
diff --git a/core/java/android/accounts/ChooseTypeAndAccountActivity.java b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
index 8cc2002..5f38eb4 100644
--- a/core/java/android/accounts/ChooseTypeAndAccountActivity.java
+++ b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
@@ -47,7 +47,7 @@
*/
public class ChooseTypeAndAccountActivity extends Activity
implements AccountManagerCallback<Bundle> {
- private static final String TAG = "AccountManager";
+ private static final String TAG = "AccountChooser";
/**
* A Parcelable ArrayList of Account objects that limits the choosable accounts to those
@@ -100,13 +100,39 @@
public static final String EXTRA_DESCRIPTION_TEXT_OVERRIDE =
"descriptionTextOverride";
+ public static final int REQUEST_NULL = 0;
+ public static final int REQUEST_CHOOSE_TYPE = 1;
+ public static final int REQUEST_ADD_ACCOUNT = 2;
+
+ private static final String KEY_INSTANCE_STATE_PENDING_REQUEST = "pendingRequest";
+ private static final String KEY_INSTANCE_STATE_EXISTING_ACCOUNTS = "existingAccounts";
+
private ArrayList<AccountInfo> mAccountInfos;
+ private int mPendingRequest = REQUEST_NULL;
+ private Parcelable[] mExistingAccounts = null;
+ private Parcelable[] mSavedAccounts = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseTypeAndAccountActivity.onCreate(savedInstanceState="
+ + savedInstanceState + ")");
+ }
+
setContentView(R.layout.choose_type_and_account);
+ if (savedInstanceState != null) {
+ mPendingRequest = savedInstanceState.getInt(KEY_INSTANCE_STATE_PENDING_REQUEST);
+ mSavedAccounts =
+ savedInstanceState.getParcelableArray(KEY_INSTANCE_STATE_EXISTING_ACCOUNTS);
+ mExistingAccounts = null;
+ } else {
+ mPendingRequest = REQUEST_NULL;
+ mSavedAccounts = null;
+ mExistingAccounts = null;
+ }
+
// save some items we use frequently
final AccountManager accountManager = AccountManager.get(this);
final Intent intent = getIntent();
@@ -171,20 +197,6 @@
account.equals(selectedAccount)));
}
- // If there are no allowable accounts go directly to add account
- if (mAccountInfos.isEmpty()) {
- startChooseAccountTypeActivity();
- return;
- }
-
- // if there is only one allowable account return it
- if (!intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false)
- && mAccountInfos.size() == 1) {
- Account account = mAccountInfos.get(0).account;
- setResultAndFinish(account.name, account.type);
- return;
- }
-
// there is more than one allowable account. initialize the list adapter to allow
// the user to select an account.
ListView list = (ListView) findViewById(android.R.id.list);
@@ -204,6 +216,37 @@
startChooseAccountTypeActivity();
}
});
+
+ if (mPendingRequest == REQUEST_NULL) {
+ // If there are no allowable accounts go directly to add account
+ if (mAccountInfos.isEmpty()) {
+ startChooseAccountTypeActivity();
+ return;
+ }
+
+ // if there is only one allowable account return it
+ if (!intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false)
+ && mAccountInfos.size() == 1) {
+ Account account = mAccountInfos.get(0).account;
+ setResultAndFinish(account.name, account.type);
+ return;
+ }
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseTypeAndAccountActivity.onDestroy()");
+ }
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onSaveInstanceState(final Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_INSTANCE_STATE_PENDING_REQUEST, mPendingRequest);
+ outState.putParcelableArray(KEY_INSTANCE_STATE_EXISTING_ACCOUNTS, mExistingAccounts);
}
// Called when the choose account type activity (for adding an account) returns.
@@ -212,20 +255,75 @@
@Override
protected void onActivityResult(final int requestCode, final int resultCode,
final Intent data) {
- if (resultCode == RESULT_OK && data != null) {
- String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
- if (accountType != null) {
- runAddAccountForAuthenticator(accountType);
- return;
- }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ if (data != null && data.getExtras() != null) data.getExtras().keySet();
+ Bundle extras = data != null ? data.getExtras() : null;
+ Log.v(TAG, "ChooseTypeAndAccountActivity.onActivityResult(reqCode=" + requestCode
+ + ", resCode=" + resultCode + ", extras=" + extras + ")");
}
- Log.d(TAG, "ChooseTypeAndAccountActivity.onActivityResult: canceled");
+
+ // we got our result, so clear the fact that we had a pending request
+ mPendingRequest = REQUEST_NULL;
+ mExistingAccounts = null;
+
+ if (resultCode == RESULT_CANCELED) {
+ return;
+ }
+
+ if (resultCode == RESULT_OK) {
+ if (requestCode == REQUEST_CHOOSE_TYPE) {
+ if (data != null) {
+ String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
+ if (accountType != null) {
+ runAddAccountForAuthenticator(accountType);
+ return;
+ }
+ }
+ Log.d(TAG, "ChooseTypeAndAccountActivity.onActivityResult: unable to find account "
+ + "type, pretending the request was canceled");
+ } else if (requestCode == REQUEST_ADD_ACCOUNT) {
+ String accountName = null;
+ String accountType = null;
+
+ if (data != null) {
+ accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
+ accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
+ }
+
+ if (accountName == null || accountType == null) {
+ Account[] currentAccounts = AccountManager.get(this).getAccounts();
+ Set<Account> preExistingAccounts = new HashSet<Account>();
+ for (Parcelable accountParcel : mSavedAccounts) {
+ preExistingAccounts.add((Account) accountParcel);
+ }
+ for (Account account : currentAccounts) {
+ if (!preExistingAccounts.contains(account)) {
+ accountName = account.name;
+ accountType = account.type;
+ break;
+ }
+ }
+ }
+
+ if (accountName != null || accountType != null) {
+ setResultAndFinish(accountName, accountType);
+ return;
+ }
+ }
+ Log.d(TAG, "ChooseTypeAndAccountActivity.onActivityResult: unable to find added "
+ + "account, pretending the request was canceled");
+ }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseTypeAndAccountActivity.onActivityResult: canceled");
+ }
setResult(Activity.RESULT_CANCELED);
finish();
}
protected void runAddAccountForAuthenticator(String type) {
- Log.d(TAG, "selected account type " + type);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "runAddAccountForAuthenticator: " + type);
+ }
final Bundle options = getIntent().getBundleExtra(
ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE);
final String[] requiredFeatures = getIntent().getStringArrayExtra(
@@ -233,20 +331,19 @@
final String authTokenType = getIntent().getStringExtra(
ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING);
AccountManager.get(this).addAccount(type, authTokenType, requiredFeatures,
- options, this, this, null /* Handler */);
+ options, null /* activity */, this /* callback */, null /* Handler */);
}
public void run(final AccountManagerFuture<Bundle> accountManagerFuture) {
try {
final Bundle accountManagerResult = accountManagerFuture.getResult();
- final String name = accountManagerResult.getString(AccountManager.KEY_ACCOUNT_NAME);
- final String type = accountManagerResult.getString(AccountManager.KEY_ACCOUNT_TYPE);
- if (name != null && type != null) {
- final Bundle bundle = new Bundle();
- bundle.putString(AccountManager.KEY_ACCOUNT_NAME, name);
- bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
- setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
- finish();
+ final Intent intent = (Intent)accountManagerResult.getParcelable(
+ AccountManager.KEY_INTENT);
+ if (intent != null) {
+ mPendingRequest = REQUEST_ADD_ACCOUNT;
+ mExistingAccounts = AccountManager.get(this).getAccounts();
+ intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivityForResult(intent, REQUEST_ADD_ACCOUNT);
return;
}
} catch (OperationCanceledException e) {
@@ -297,12 +394,17 @@
bundle.putString(AccountManager.KEY_ACCOUNT_NAME, accountName);
bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType);
setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
- Log.d(TAG, "ChooseTypeAndAccountActivity.setResultAndFinish: "
- + "selected account " + accountName + ", " + accountType);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseTypeAndAccountActivity.setResultAndFinish: "
+ + "selected account " + accountName + ", " + accountType);
+ }
finish();
}
private void startChooseAccountTypeActivity() {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "ChooseAccountTypeActivity.startChooseAccountTypeActivity()");
+ }
final Intent intent = new Intent(this, ChooseAccountTypeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.putExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY,
@@ -313,7 +415,8 @@
getIntent().getStringArrayExtra(EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY));
intent.putExtra(EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING,
getIntent().getStringExtra(EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING));
- startActivityForResult(intent, 0);
+ startActivityForResult(intent, REQUEST_CHOOSE_TYPE);
+ mPendingRequest = REQUEST_CHOOSE_TYPE;
}
private static class AccountInfo {
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java
index 355b1fc..f383af9 100644
--- a/core/java/android/animation/LayoutTransition.java
+++ b/core/java/android/animation/LayoutTransition.java
@@ -24,6 +24,7 @@
import android.view.animation.DecelerateInterpolator;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -615,10 +616,13 @@
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
parent.getViewTreeObserver().removeOnPreDrawListener(this);
- int numChildren = parent.getChildCount();
- for (int i = 0; i < numChildren; ++i) {
- final View child = parent.getChildAt(i);
- child.removeOnLayoutChangeListener(layoutChangeListenerMap.get(child));
+ int count = layoutChangeListenerMap.size();
+ if (count > 0) {
+ Collection<View> views = layoutChangeListenerMap.keySet();
+ for (View view : views) {
+ View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view);
+ view.removeOnLayoutChangeListener(listener);
+ }
}
layoutChangeListenerMap.clear();
return true;
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index 51c6f3a..24d3a6b 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -43,15 +43,18 @@
* modify various characteristics of the action bar or remove it completely.</p>
* <p>From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link
* android.app.Activity#getActionBar getActionBar()}.</p>
- * <p>For information about how to use the action bar, including how to add action items, navigation
- * modes and more, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
- * Bar</a> developer guide.</p>
* <p>In some cases, the action bar may be overlayed by another bar that enables contextual actions,
* using an {@link android.view.ActionMode}. For example, when the user selects one or more items in
* your activity, you can enable an action mode that offers actions specific to the selected
* items, with a UI that temporarily replaces the action bar. Although the UI may occupy the
* same space, the {@link android.view.ActionMode} APIs are distinct and independent from those for
* {@link ActionBar}.
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about how to use the action bar, including how to add action items, navigation
+ * modes and more, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
+ * Bar</a> developer guide.</p>
+ * </div>
*/
public abstract class ActionBar {
/**
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 034e3c7..8e8d37d 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -111,18 +111,6 @@
* {@link android.R.styleable#AndroidManifestActivity <activity>}
* declaration in their package's <code>AndroidManifest.xml</code>.</p>
*
- * <p>The Activity class is an important part of an application's overall lifecycle,
- * and the way activities are launched and put together is a fundamental
- * part of the platform's application model. For a detailed perspective on the structure of an
- * Android application and how activities behave, please read the
- * <a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a> and
- * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
- * documents.</p>
- *
- * <p>You can also find a detailed discussion about how to create activities in the
- * <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
- * document.</p>
- *
* <p>Topics covered here:
* <ol>
* <li><a href="#Fragments">Fragments</a>
@@ -133,7 +121,22 @@
* <li><a href="#Permissions">Permissions</a>
* <li><a href="#ProcessLifecycle">Process Lifecycle</a>
* </ol>
- *
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>The Activity class is an important part of an application's overall lifecycle,
+ * and the way activities are launched and put together is a fundamental
+ * part of the platform's application model. For a detailed perspective on the structure of an
+ * Android application and how activities behave, please read the
+ * <a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a> and
+ * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
+ * developer guides.</p>
+ *
+ * <p>You can also find a detailed discussion about how to create activities in the
+ * <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
+ * developer guide.</p>
+ * </div>
+ *
* <a name="Fragments"></a>
* <h3>Fragments</h3>
*
@@ -3246,6 +3249,7 @@
try {
String resolvedType = null;
if (fillInIntent != null) {
+ fillInIntent.setAllowFds(false);
resolvedType = fillInIntent.resolveTypeIfNeeded(getContentResolver());
}
int result = ActivityManagerNative.getDefault()
@@ -3370,6 +3374,7 @@
if (mParent == null) {
int result = IActivityManager.START_RETURN_INTENT_TO_CALLER;
try {
+ intent.setAllowFds(false);
result = ActivityManagerNative.getDefault()
.startActivity(mMainThread.getApplicationThread(),
intent, intent.resolveTypeIfNeeded(
@@ -3419,6 +3424,7 @@
public boolean startNextMatchingActivity(Intent intent) {
if (mParent == null) {
try {
+ intent.setAllowFds(false);
return ActivityManagerNative.getDefault()
.startNextMatchingActivity(mToken, intent);
} catch (RemoteException e) {
@@ -3692,6 +3698,9 @@
}
if (false) Log.v(TAG, "Finishing self: token=" + mToken);
try {
+ if (resultData != null) {
+ resultData.setAllowFds(false);
+ }
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
@@ -3812,6 +3821,7 @@
int flags) {
String packageName = getPackageName();
try {
+ data.setAllowFds(false);
IIntentSender target =
ActivityManagerNative.getDefault().getIntentSender(
IActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName,
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 0776e10..8afe9bf 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -490,6 +490,15 @@
// Formatting for checkin service - update version if row format changes
private static final int ACTIVITY_THREAD_CHECKIN_VERSION = 1;
+ private void updatePendingConfiguration(Configuration config) {
+ synchronized (mPackages) {
+ if (mPendingConfiguration == null ||
+ mPendingConfiguration.isOtherSeqNewer(config)) {
+ mPendingConfiguration = config;
+ }
+ }
+ }
+
public final void schedulePauseActivity(IBinder token, boolean finished,
boolean userLeaving, int configChanges) {
queueOrSendMessage(
@@ -530,8 +539,8 @@
// we use token to identify this activity without having to send the
// activity itself back to the activity manager. (matters more with ipc)
public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
- ActivityInfo info, CompatibilityInfo compatInfo, Bundle state,
- List<ResultInfo> pendingResults,
+ ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
+ Bundle state, List<ResultInfo> pendingResults,
List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
ActivityClientRecord r = new ActivityClientRecord();
@@ -553,6 +562,8 @@
r.profileFd = profileFd;
r.autoStopProfiler = autoStopProfiler;
+ updatePendingConfiguration(curConfig);
+
queueOrSendMessage(H.LAUNCH_ACTIVITY, r);
}
@@ -697,12 +708,7 @@
}
public void scheduleConfigurationChanged(Configuration config) {
- synchronized (mPackages) {
- if (mPendingConfiguration == null ||
- mPendingConfiguration.isOtherSeqNewer(config)) {
- mPendingConfiguration = config;
- }
- }
+ updatePendingConfiguration(config);
queueOrSendMessage(H.CONFIGURATION_CHANGED, config);
}
@@ -1478,7 +1484,7 @@
}
//Slog.i(TAG, "Resource: key=" + key + ", display metrics=" + metrics);
- DisplayMetrics metrics = getDisplayMetricsLocked(compInfo, false);
+ DisplayMetrics metrics = getDisplayMetricsLocked(null, false);
r = new Resources(assets, metrics, getConfiguration(), compInfo);
if (false) {
Slog.i(TAG, "Created app resources " + resDir + " " + r + ": "
@@ -1966,6 +1972,9 @@
mProfiler.autoStopProfiler = r.autoStopProfiler;
}
+ // Make sure we are running with the most recent config.
+ handleConfigurationChanged(null, null);
+
if (localLOGV) Slog.v(
TAG, "Handling launch of " + r);
Activity a = performLaunchActivity(r, customIntent);
@@ -2674,6 +2683,7 @@
// Next have the activity save its current state and managed dialogs...
if (!r.activity.mFinished && saveState) {
state = new Bundle();
+ state.setAllowFds(false);
mInstrumentation.callActivityOnSaveInstanceState(r.activity, state);
r.state = state;
}
@@ -2775,6 +2785,7 @@
if (!r.activity.mFinished && saveState) {
if (r.state == null) {
state = new Bundle();
+ state.setAllowFds(false);
mInstrumentation.callActivityOnSaveInstanceState(r.activity, state);
r.state = state;
} else {
@@ -3306,6 +3317,7 @@
}
if (r.state == null && !r.stopped && !r.isPreHoneycomb()) {
r.state = new Bundle();
+ r.state.setAllowFds(false);
mInstrumentation.callActivityOnSaveInstanceState(r.activity, r.state);
}
@@ -3473,7 +3485,7 @@
return false;
}
int changes = mResConfiguration.updateFrom(config);
- DisplayMetrics dm = getDisplayMetricsLocked(compat, true);
+ DisplayMetrics dm = getDisplayMetricsLocked(null, true);
if (compat != null && (mResCompatibilityInfo == null ||
!mResCompatibilityInfo.equals(compat))) {
@@ -3514,7 +3526,20 @@
return changes != 0;
}
-
+
+ final Configuration applyCompatConfiguration() {
+ Configuration config = mConfiguration;
+ if (mCompatConfiguration == null) {
+ mCompatConfiguration = new Configuration();
+ }
+ mCompatConfiguration.setTo(mConfiguration);
+ if (mResCompatibilityInfo != null && !mResCompatibilityInfo.supportsScreen()) {
+ mResCompatibilityInfo.applyToConfiguration(mCompatConfiguration);
+ config = mCompatConfiguration;
+ }
+ return config;
+ }
+
final void handleConfigurationChanged(Configuration config, CompatibilityInfo compat) {
ArrayList<ComponentCallbacks2> callbacks = null;
@@ -3543,14 +3568,7 @@
return;
}
mConfiguration.updateFrom(config);
- if (mCompatConfiguration == null) {
- mCompatConfiguration = new Configuration();
- }
- mCompatConfiguration.setTo(mConfiguration);
- if (mResCompatibilityInfo != null && !mResCompatibilityInfo.supportsScreen()) {
- mResCompatibilityInfo.applyToConfiguration(mCompatConfiguration);
- config = mCompatConfiguration;
- }
+ config = applyCompatConfiguration();
callbacks = collectComponentCallbacksLocked(false, config);
}
@@ -3749,6 +3767,7 @@
* in AppBindData can be safely assumed to be up to date
*/
applyConfigurationToResourcesLocked(data.config, data.compatInfo);
+ applyCompatConfiguration();
data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo);
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index cde06cd..c4a4fea 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -132,6 +132,7 @@
IBinder b = data.readStrongBinder();
int ident = data.readInt();
ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data);
+ Configuration curConfig = Configuration.CREATOR.createFromParcel(data);
CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
Bundle state = data.readBundle();
List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
@@ -142,7 +143,7 @@
ParcelFileDescriptor profileFd = data.readInt() != 0
? data.readFileDescriptor() : null;
boolean autoStopProfiler = data.readInt() != 0;
- scheduleLaunchActivity(intent, b, ident, info, compatInfo, state, ri, pi,
+ scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, state, ri, pi,
notResumed, isForward, profileName, profileFd, autoStopProfiler);
return true;
}
@@ -630,10 +631,10 @@
}
public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
- ActivityInfo info, CompatibilityInfo compatInfo, Bundle state,
- List<ResultInfo> pendingResults,
- List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
- String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
+ ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
+ Bundle state, List<ResultInfo> pendingResults,
+ List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
+ String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
@@ -641,6 +642,7 @@
data.writeStrongBinder(token);
data.writeInt(ident);
info.writeToParcel(data, 0);
+ curConfig.writeToParcel(data, 0);
compatInfo.writeToParcel(data, 0);
data.writeBundle(state);
data.writeTypedList(pendingResults);
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 2139704..2bf1fb7 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -874,6 +874,7 @@
try {
String resolvedType = null;
if (fillInIntent != null) {
+ fillInIntent.setAllowFds(false);
resolvedType = fillInIntent.resolveTypeIfNeeded(getContentResolver());
}
int result = ActivityManagerNative.getDefault()
@@ -892,6 +893,7 @@
public void sendBroadcast(Intent intent) {
String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().broadcastIntent(
mMainThread.getApplicationThread(), intent, resolvedType, null,
Activity.RESULT_OK, null, null, null, false, false);
@@ -903,6 +905,7 @@
public void sendBroadcast(Intent intent, String receiverPermission) {
String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().broadcastIntent(
mMainThread.getApplicationThread(), intent, resolvedType, null,
Activity.RESULT_OK, null, null, receiverPermission, false, false);
@@ -915,6 +918,7 @@
String receiverPermission) {
String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().broadcastIntent(
mMainThread.getApplicationThread(), intent, resolvedType, null,
Activity.RESULT_OK, null, null, receiverPermission, true, false);
@@ -946,6 +950,7 @@
}
String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().broadcastIntent(
mMainThread.getApplicationThread(), intent, resolvedType, rd,
initialCode, initialData, initialExtras, receiverPermission,
@@ -958,6 +963,7 @@
public void sendStickyBroadcast(Intent intent) {
String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().broadcastIntent(
mMainThread.getApplicationThread(), intent, resolvedType, null,
Activity.RESULT_OK, null, null, null, false, true);
@@ -989,6 +995,7 @@
}
String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().broadcastIntent(
mMainThread.getApplicationThread(), intent, resolvedType, rd,
initialCode, initialData, initialExtras, null,
@@ -1005,6 +1012,7 @@
intent.setDataAndType(intent.getData(), resolvedType);
}
try {
+ intent.setAllowFds(false);
ActivityManagerNative.getDefault().unbroadcastIntent(
mMainThread.getApplicationThread(), intent);
} catch (RemoteException e) {
@@ -1069,6 +1077,7 @@
@Override
public ComponentName startService(Intent service) {
try {
+ service.setAllowFds(false);
ComponentName cn = ActivityManagerNative.getDefault().startService(
mMainThread.getApplicationThread(), service,
service.resolveTypeIfNeeded(getContentResolver()));
@@ -1086,6 +1095,7 @@
@Override
public boolean stopService(Intent service) {
try {
+ service.setAllowFds(false);
int res = ActivityManagerNative.getDefault().stopService(
mMainThread.getApplicationThread(), service,
service.resolveTypeIfNeeded(getContentResolver()));
@@ -1116,6 +1126,7 @@
< android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
flags |= BIND_WAIVE_PRIORITY;
}
+ service.setAllowFds(false);
int res = ActivityManagerNative.getDefault().bindService(
mMainThread.getApplicationThread(), getActivityToken(),
service, service.resolveTypeIfNeeded(getContentResolver()),
@@ -1148,6 +1159,9 @@
public boolean startInstrumentation(ComponentName className,
String profileFile, Bundle arguments) {
try {
+ if (arguments != null) {
+ arguments.setAllowFds(false);
+ }
return ActivityManagerNative.getDefault().startInstrumentation(
className, profileFile, 0, arguments, null);
} catch (RemoteException e) {
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 3a08e6d..d423d98 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -162,9 +162,6 @@
* constructor to instantiate it. If the empty constructor is not available,
* a runtime exception will occur in some cases during state restore.
*
- * <p>For more documentation, also see the <a
- * href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
- *
* <p>Topics covered here:
* <ol>
* <li><a href="#OlderPlatforms">Older Platforms</a>
@@ -173,6 +170,12 @@
* <li><a href="#BackStack">Back Stack</a>
* </ol>
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using fragments, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+ * </div>
+ *
* <a name="OlderPlatforms"></a>
* <h3>Older Platforms</h3>
*
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 7a6759f..3da4f29 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -45,6 +45,12 @@
/**
* Interface for interacting with {@link Fragment} objects inside of an
* {@link Activity}
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using fragments, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+ * </div>
*/
public abstract class FragmentManager {
/**
diff --git a/core/java/android/app/FragmentTransaction.java b/core/java/android/app/FragmentTransaction.java
index c1f3cd6..6e99899 100644
--- a/core/java/android/app/FragmentTransaction.java
+++ b/core/java/android/app/FragmentTransaction.java
@@ -2,6 +2,12 @@
/**
* API for performing a set of Fragment operations.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using fragments, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+ * </div>
*/
public abstract class FragmentTransaction {
/**
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 5d200b4..1253fe7 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -53,10 +53,10 @@
void scheduleResumeActivity(IBinder token, boolean isForward) throws RemoteException;
void scheduleSendResult(IBinder token, List<ResultInfo> results) throws RemoteException;
void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
- ActivityInfo info, CompatibilityInfo compatInfo, Bundle state,
- List<ResultInfo> pendingResults,
- List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
- String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
+ ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
+ Bundle state, List<ResultInfo> pendingResults,
+ List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
+ String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
throws RemoteException;
void scheduleRelaunchActivity(IBinder token, List<ResultInfo> pendingResults,
List<Intent> pendingNewIntents, int configChanges,
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index f3bc495..d7f5c55 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1375,6 +1375,7 @@
}
}
try {
+ intent.setAllowFds(false);
int result = ActivityManagerNative.getDefault()
.startActivity(whoThread, intent,
intent.resolveTypeIfNeeded(who.getContentResolver()),
@@ -1415,6 +1416,7 @@
try {
String[] resolvedTypes = new String[intents.length];
for (int i=0; i<intents.length; i++) {
+ intents[i].setAllowFds(false);
resolvedTypes[i] = intents[i].resolveTypeIfNeeded(who.getContentResolver());
}
int result = ActivityManagerNative.getDefault()
@@ -1471,6 +1473,7 @@
}
}
try {
+ intent.setAllowFds(false);
int result = ActivityManagerNative.getDefault()
.startActivity(whoThread, intent,
intent.resolveTypeIfNeeded(who.getContentResolver()),
diff --git a/core/java/android/app/IntentService.java b/core/java/android/app/IntentService.java
index 57a2695..96767ae 100644
--- a/core/java/android/app/IntentService.java
+++ b/core/java/android/app/IntentService.java
@@ -41,6 +41,12 @@
* long as necessary (and will not block the application's main loop), but
* only one request will be processed at a time.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a detailed discussion about how to create services, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer guide.</p>
+ * </div>
+ *
* @see android.os.AsyncTask
*/
public abstract class IntentService extends Service {
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 2549c84..522f477 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -661,6 +661,9 @@
"Finishing broadcast to unregistered receiver");
IActivityManager mgr = ActivityManagerNative.getDefault();
try {
+ if (extras != null) {
+ extras.setAllowFds(false);
+ }
mgr.finishReceiver(this, resultCode, data, extras, false);
} catch (RemoteException e) {
Slog.w(ActivityThread.TAG, "Couldn't finish broadcast to unregistered receiver");
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index 46a008d..89e9ddd 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -47,6 +47,12 @@
*
* {@sample development/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.java
* fragment_cursor}
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using loaders, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</p>
+ * </div>
*/
public abstract class LoaderManager {
/**
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index b4827cb..b0637a7 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -192,6 +192,7 @@
String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
context.getContentResolver()) : null;
try {
+ intent.setAllowFds(false);
IIntentSender target =
ActivityManagerNative.getDefault().getIntentSender(
IActivityManager.INTENT_SENDER_ACTIVITY, packageName,
@@ -249,6 +250,7 @@
String packageName = context.getPackageName();
String[] resolvedTypes = new String[intents.length];
for (int i=0; i<intents.length; i++) {
+ intents[i].setAllowFds(false);
resolvedTypes[i] = intents[i].resolveTypeIfNeeded(context.getContentResolver());
}
try {
@@ -287,6 +289,7 @@
String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
context.getContentResolver()) : null;
try {
+ intent.setAllowFds(false);
IIntentSender target =
ActivityManagerNative.getDefault().getIntentSender(
IActivityManager.INTENT_SENDER_BROADCAST, packageName,
@@ -324,6 +327,7 @@
String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
context.getContentResolver()) : null;
try {
+ intent.setAllowFds(false);
IIntentSender target =
ActivityManagerNative.getDefault().getIntentSender(
IActivityManager.INTENT_SENDER_SERVICE, packageName,
diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java
index ebde6e0..35bd8c0 100644
--- a/core/java/android/app/Service.java
+++ b/core/java/android/app/Service.java
@@ -50,10 +50,6 @@
* Threads</a>. The {@link IntentService} class is available
* as a standard implementation of Service that has its own thread where it
* schedules its work to be done.</p>
- *
- * <p>You can find a detailed discussion about how to create services in the
- * <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>
- * document.</p>
*
* <p>Topics covered here:
* <ol>
@@ -64,7 +60,13 @@
* <li><a href="#LocalServiceSample">Local Service Sample</a>
* <li><a href="#RemoteMessengerServiceSample">Remote Messenger Service Sample</a>
* </ol>
- *
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a detailed discussion about how to create services, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer guide.</p>
+ * </div>
+ *
* <a name="WhatIsAService"></a>
* <h3>What is a Service?</h3>
*
diff --git a/core/java/android/app/SharedPreferencesImpl.java b/core/java/android/app/SharedPreferencesImpl.java
index 8aee65c..615e8ce 100644
--- a/core/java/android/app/SharedPreferencesImpl.java
+++ b/core/java/android/app/SharedPreferencesImpl.java
@@ -29,6 +29,7 @@
import org.xmlpull.v1.XmlPullParserException;
+import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -107,7 +108,8 @@
FileStatus stat = new FileStatus();
if (FileUtils.getFileStatus(mFile.getPath(), stat) && mFile.canRead()) {
try {
- FileInputStream str = new FileInputStream(mFile);
+ BufferedInputStream str = new BufferedInputStream(
+ new FileInputStream(mFile), 16*1024);
map = XmlUtils.readMapXml(str);
str.close();
} catch (XmlPullParserException e) {
diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
index c154296..acdd0b5 100644
--- a/core/java/android/app/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -157,11 +157,15 @@
* @param allApps If <code>true</code>, the resulting tar stream will include all
* installed applications' data, not just those named in the <code>packageNames</code>
* parameter.
+ * @param allIncludesSystem If {@code true}, then {@code allApps} will be interpreted
+ * as including packages pre-installed as part of the system. If {@code false},
+ * then setting {@code allApps} to {@code true} will mean only that all 3rd-party
+ * applications will be included in the dataset.
* @param packageNames The package names of the apps whose data (and optionally .apk files)
* are to be backed up. The <code>allApps</code> parameter supersedes this.
*/
void fullBackup(in ParcelFileDescriptor fd, boolean includeApks, boolean includeShared,
- boolean allApps, in String[] packageNames);
+ boolean allApps, boolean allIncludesSystem, in String[] packageNames);
/**
* Restore device content from the data stream passed through the given socket. The
diff --git a/core/java/android/app/backup/WallpaperBackupHelper.java b/core/java/android/app/backup/WallpaperBackupHelper.java
index 0c034cf..170171e 100644
--- a/core/java/android/app/backup/WallpaperBackupHelper.java
+++ b/core/java/android/app/backup/WallpaperBackupHelper.java
@@ -35,7 +35,7 @@
*/
public class WallpaperBackupHelper extends FileBackupHelperBase implements BackupHelper {
private static final String TAG = "WallpaperBackupHelper";
- private static final boolean DEBUG = true;
+ private static final boolean DEBUG = false;
// This path must match what the WallpaperManagerService uses
private static final String WALLPAPER_IMAGE = "/data/data/com.android.settings/files/wallpaper";
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index 960d7fb..761c7eb 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -16,13 +16,17 @@
package android.appwidget;
+import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
+import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
@@ -107,6 +111,54 @@
public void setAppWidget(int appWidgetId, AppWidgetProviderInfo info) {
mAppWidgetId = appWidgetId;
mInfo = info;
+
+ // Sometimes the AppWidgetManager returns a null AppWidgetProviderInfo object for
+ // a widget, eg. for some widgets in safe mode.
+ if (info != null) {
+ // We add padding to the AppWidgetHostView if necessary
+ Padding padding = getPaddingForWidget(info.provider);
+ setPadding(padding.left, padding.top, padding.right, padding.bottom);
+ }
+ }
+
+ private static class Padding {
+ int left = 0;
+ int right = 0;
+ int top = 0;
+ int bottom = 0;
+ }
+
+ /**
+ * As of ICE_CREAM_SANDWICH we are automatically adding padding to widgets targeting
+ * ICE_CREAM_SANDWICH and higher. The new widget design guidelines strongly recommend
+ * that widget developers do not add extra padding to their widgets. This will help
+ * achieve consistency among widgets.
+ */
+ private Padding getPaddingForWidget(ComponentName component) {
+ PackageManager packageManager = mContext.getPackageManager();
+ Padding p = new Padding();
+ ApplicationInfo appInfo;
+
+ try {
+ appInfo = packageManager.getApplicationInfo(component.getPackageName(), 0);
+ } catch (Exception e) {
+ // if we can't find the package, return 0 padding
+ return p;
+ }
+
+ if (appInfo.targetSdkVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+ Resources r = getResources();
+ p.left = r.getDimensionPixelSize(com.android.internal.
+ R.dimen.default_app_widget_padding_left);
+ p.right = r.getDimensionPixelSize(com.android.internal.
+ R.dimen.default_app_widget_padding_right);
+ p.top = r.getDimensionPixelSize(com.android.internal.
+ R.dimen.default_app_widget_padding_top);
+ p.bottom = r.getDimensionPixelSize(com.android.internal.
+ R.dimen.default_app_widget_padding_bottom);
+ }
+
+ return p;
}
public int getAppWidgetId() {
diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java
index 028149b..d71a8d6 100644
--- a/core/java/android/content/BroadcastReceiver.java
+++ b/core/java/android/content/BroadcastReceiver.java
@@ -90,7 +90,14 @@
* <li><a href="#Permissions">Permissions</a>
* <li><a href="#ProcessLifecycle">Process Lifecycle</a>
* </ol>
- *
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about how to use this class to receive and resolve intents, read the
+ * <a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+ * developer guide.</p>
+ * </div>
+ *
* <a name="ReceiverLifecycle"></a>
* <h3>Receiver Lifecycle</h3>
*
@@ -366,6 +373,9 @@
mFinished = true;
try {
+ if (mResultExtras != null) {
+ mResultExtras.setAllowFds(false);
+ }
if (mOrderedHint) {
am.finishReceiver(mToken, mResultCode, mResultData, mResultExtras,
mAbortBroadcast);
@@ -462,6 +472,7 @@
IActivityManager am = ActivityManagerNative.getDefault();
IBinder binder = null;
try {
+ service.setAllowFds(false);
binder = am.peekService(service, service.resolveTypeIfNeeded(
myContext.getContentResolver()));
} catch (RemoteException e) {
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 8057d4b..e452f1f 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -22,10 +22,6 @@
import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.database.Cursor;
-import android.database.CursorToBulkCursorAdaptor;
-import android.database.CursorWindow;
-import android.database.IBulkCursor;
-import android.database.IContentObserver;
import android.database.SQLException;
import android.net.Uri;
import android.os.AsyncTask;
@@ -168,22 +164,9 @@
return ContentProvider.this;
}
- /**
- * Remote version of a query, which returns an IBulkCursor. The bulk
- * cursor should be wrapped with BulkCursorToCursorAdaptor before use.
- */
- public IBulkCursor bulkQuery(Uri uri, String[] projection,
- String selection, String[] selectionArgs, String sortOrder,
- IContentObserver observer, CursorWindow window) {
- enforceReadPermission(uri);
- Cursor cursor = ContentProvider.this.query(uri, projection,
- selection, selectionArgs, sortOrder);
- if (cursor == null) {
- return null;
- }
- return new CursorToBulkCursorAdaptor(cursor, observer,
- ContentProvider.this.getClass().getName(),
- hasWritePermission(uri), window);
+ @Override
+ public String getProviderName() {
+ return getContentProvider().getClass().getName();
}
public Cursor query(Uri uri, String[] projection,
diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java
index abeeb74..b089bf2 100644
--- a/core/java/android/content/ContentProviderNative.java
+++ b/core/java/android/content/ContentProviderNative.java
@@ -20,6 +20,7 @@
import android.database.BulkCursorNative;
import android.database.BulkCursorToCursorAdaptor;
import android.database.Cursor;
+import android.database.CursorToBulkCursorAdaptor;
import android.database.CursorWindow;
import android.database.DatabaseUtils;
import android.database.IBulkCursor;
@@ -65,6 +66,13 @@
return new ContentProviderProxy(obj);
}
+ /**
+ * Gets the name of the content provider.
+ * Should probably be part of the {@link IContentProvider} interface.
+ * @return The content provider name.
+ */
+ public abstract String getProviderName();
+
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
throws RemoteException {
@@ -98,33 +106,24 @@
}
String sortOrder = data.readString();
- IContentObserver observer = IContentObserver.Stub.
- asInterface(data.readStrongBinder());
- CursorWindow window = CursorWindow.CREATOR.createFromParcel(data);
+ IContentObserver observer = IContentObserver.Stub.asInterface(
+ data.readStrongBinder());
- // Flag for whether caller wants the number of
- // rows in the cursor and the position of the
- // "_id" column index (or -1 if non-existent)
- // Only to be returned if binder != null.
- boolean wantsCursorMetadata = data.readInt() != 0;
+ Cursor cursor = query(url, projection, selection, selectionArgs, sortOrder);
+ if (cursor != null) {
+ CursorToBulkCursorAdaptor adaptor = new CursorToBulkCursorAdaptor(
+ cursor, observer, getProviderName());
+ final IBinder binder = adaptor.asBinder();
+ final int count = adaptor.count();
+ final int index = BulkCursorToCursorAdaptor.findRowIdColumnIndex(
+ adaptor.getColumnNames());
+ final boolean wantsAllOnMoveCalls = adaptor.getWantsAllOnMoveCalls();
- IBulkCursor bulkCursor = bulkQuery(url, projection, selection,
- selectionArgs, sortOrder, observer, window);
- if (bulkCursor != null) {
- final IBinder binder = bulkCursor.asBinder();
- if (wantsCursorMetadata) {
- final int count = bulkCursor.count();
- final int index = BulkCursorToCursorAdaptor.findRowIdColumnIndex(
- bulkCursor.getColumnNames());
-
- reply.writeNoException();
- reply.writeStrongBinder(binder);
- reply.writeInt(count);
- reply.writeInt(index);
- } else {
- reply.writeNoException();
- reply.writeStrongBinder(binder);
- }
+ reply.writeNoException();
+ reply.writeStrongBinder(binder);
+ reply.writeInt(count);
+ reply.writeInt(index);
+ reply.writeInt(wantsAllOnMoveCalls ? 1 : 0);
} else {
reply.writeNoException();
reply.writeStrongBinder(null);
@@ -324,332 +323,301 @@
return mRemote;
}
- // Like bulkQuery() but sets up provided 'adaptor' if not null.
- private IBulkCursor bulkQueryInternal(
- Uri url, String[] projection,
- String selection, String[] selectionArgs, String sortOrder,
- IContentObserver observer, CursorWindow window,
- BulkCursorToCursorAdaptor adaptor) throws RemoteException {
- Parcel data = Parcel.obtain();
- Parcel reply = Parcel.obtain();
-
- data.writeInterfaceToken(IContentProvider.descriptor);
-
- url.writeToParcel(data, 0);
- int length = 0;
- if (projection != null) {
- length = projection.length;
- }
- data.writeInt(length);
- for (int i = 0; i < length; i++) {
- data.writeString(projection[i]);
- }
- data.writeString(selection);
- if (selectionArgs != null) {
- length = selectionArgs.length;
- } else {
- length = 0;
- }
- data.writeInt(length);
- for (int i = 0; i < length; i++) {
- data.writeString(selectionArgs[i]);
- }
- data.writeString(sortOrder);
- data.writeStrongBinder(observer.asBinder());
- window.writeToParcel(data, 0);
-
- // Flag for whether or not we want the number of rows in the
- // cursor and the position of the "_id" column index (or -1 if
- // non-existent). Only to be returned if binder != null.
- final boolean wantsCursorMetadata = (adaptor != null);
- data.writeInt(wantsCursorMetadata ? 1 : 0);
-
- mRemote.transact(IContentProvider.QUERY_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- IBulkCursor bulkCursor = null;
- IBinder bulkCursorBinder = reply.readStrongBinder();
- if (bulkCursorBinder != null) {
- bulkCursor = BulkCursorNative.asInterface(bulkCursorBinder);
-
- if (wantsCursorMetadata) {
- int rowCount = reply.readInt();
- int idColumnPosition = reply.readInt();
- if (bulkCursor != null) {
- adaptor.set(bulkCursor, rowCount, idColumnPosition);
- }
- }
- }
-
- data.recycle();
- reply.recycle();
-
- return bulkCursor;
- }
-
- public IBulkCursor bulkQuery(Uri url, String[] projection,
- String selection, String[] selectionArgs, String sortOrder, IContentObserver observer,
- CursorWindow window) throws RemoteException {
- return bulkQueryInternal(
- url, projection, selection, selectionArgs, sortOrder,
- observer, window,
- null /* BulkCursorToCursorAdaptor */);
- }
-
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sortOrder) throws RemoteException {
- //TODO make a pool of windows so we can reuse memory dealers
- CursorWindow window = new CursorWindow(false /* window will be used remotely */);
BulkCursorToCursorAdaptor adaptor = new BulkCursorToCursorAdaptor();
- IBulkCursor bulkCursor = bulkQueryInternal(
- url, projection, selection, selectionArgs, sortOrder,
- adaptor.getObserver(), window,
- adaptor);
- if (bulkCursor == null) {
- return null;
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
+
+ url.writeToParcel(data, 0);
+ int length = 0;
+ if (projection != null) {
+ length = projection.length;
+ }
+ data.writeInt(length);
+ for (int i = 0; i < length; i++) {
+ data.writeString(projection[i]);
+ }
+ data.writeString(selection);
+ if (selectionArgs != null) {
+ length = selectionArgs.length;
+ } else {
+ length = 0;
+ }
+ data.writeInt(length);
+ for (int i = 0; i < length; i++) {
+ data.writeString(selectionArgs[i]);
+ }
+ data.writeString(sortOrder);
+ data.writeStrongBinder(adaptor.getObserver().asBinder());
+
+ mRemote.transact(IContentProvider.QUERY_TRANSACTION, data, reply, 0);
+
+ DatabaseUtils.readExceptionFromParcel(reply);
+
+ IBulkCursor bulkCursor = BulkCursorNative.asInterface(reply.readStrongBinder());
+ if (bulkCursor != null) {
+ int rowCount = reply.readInt();
+ int idColumnPosition = reply.readInt();
+ boolean wantsAllOnMoveCalls = reply.readInt() != 0;
+ adaptor.initialize(bulkCursor, rowCount, idColumnPosition, wantsAllOnMoveCalls);
+ } else {
+ adaptor.close();
+ adaptor = null;
+ }
+ return adaptor;
+ } catch (RemoteException ex) {
+ adaptor.close();
+ throw ex;
+ } catch (RuntimeException ex) {
+ adaptor.close();
+ throw ex;
+ } finally {
+ data.recycle();
+ reply.recycle();
}
- return adaptor;
}
public String getType(Uri url) throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
- url.writeToParcel(data, 0);
+ mRemote.transact(IContentProvider.GET_TYPE_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.GET_TYPE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- String out = reply.readString();
-
- data.recycle();
- reply.recycle();
-
- return out;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ String out = reply.readString();
+ return out;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public Uri insert(Uri url, ContentValues values) throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ values.writeToParcel(data, 0);
- url.writeToParcel(data, 0);
- values.writeToParcel(data, 0);
+ mRemote.transact(IContentProvider.INSERT_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.INSERT_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- Uri out = Uri.CREATOR.createFromParcel(reply);
-
- data.recycle();
- reply.recycle();
-
- return out;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ Uri out = Uri.CREATOR.createFromParcel(reply);
+ return out;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public int bulkInsert(Uri url, ContentValues[] values) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ data.writeTypedArray(values, 0);
- url.writeToParcel(data, 0);
- data.writeTypedArray(values, 0);
+ mRemote.transact(IContentProvider.BULK_INSERT_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.BULK_INSERT_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- int count = reply.readInt();
-
- data.recycle();
- reply.recycle();
-
- return count;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ int count = reply.readInt();
+ return count;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
throws RemoteException, OperationApplicationException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
+ data.writeInt(operations.size());
+ for (ContentProviderOperation operation : operations) {
+ operation.writeToParcel(data, 0);
+ }
+ mRemote.transact(IContentProvider.APPLY_BATCH_TRANSACTION, data, reply, 0);
- data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInt(operations.size());
- for (ContentProviderOperation operation : operations) {
- operation.writeToParcel(data, 0);
+ DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel(reply);
+ final ContentProviderResult[] results =
+ reply.createTypedArray(ContentProviderResult.CREATOR);
+ return results;
+ } finally {
+ data.recycle();
+ reply.recycle();
}
- mRemote.transact(IContentProvider.APPLY_BATCH_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel(reply);
- final ContentProviderResult[] results =
- reply.createTypedArray(ContentProviderResult.CREATOR);
-
- data.recycle();
- reply.recycle();
-
- return results;
}
public int delete(Uri url, String selection, String[] selectionArgs)
throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ data.writeString(selection);
+ data.writeStringArray(selectionArgs);
- url.writeToParcel(data, 0);
- data.writeString(selection);
- data.writeStringArray(selectionArgs);
+ mRemote.transact(IContentProvider.DELETE_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.DELETE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- int count = reply.readInt();
-
- data.recycle();
- reply.recycle();
-
- return count;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ int count = reply.readInt();
+ return count;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public int update(Uri url, ContentValues values, String selection,
String[] selectionArgs) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ values.writeToParcel(data, 0);
+ data.writeString(selection);
+ data.writeStringArray(selectionArgs);
- url.writeToParcel(data, 0);
- values.writeToParcel(data, 0);
- data.writeString(selection);
- data.writeStringArray(selectionArgs);
+ mRemote.transact(IContentProvider.UPDATE_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.UPDATE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- int count = reply.readInt();
-
- data.recycle();
- reply.recycle();
-
- return count;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ int count = reply.readInt();
+ return count;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public ParcelFileDescriptor openFile(Uri url, String mode)
throws RemoteException, FileNotFoundException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ data.writeString(mode);
- url.writeToParcel(data, 0);
- data.writeString(mode);
+ mRemote.transact(IContentProvider.OPEN_FILE_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.OPEN_FILE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
- int has = reply.readInt();
- ParcelFileDescriptor fd = has != 0 ? reply.readFileDescriptor() : null;
-
- data.recycle();
- reply.recycle();
-
- return fd;
+ DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
+ int has = reply.readInt();
+ ParcelFileDescriptor fd = has != 0 ? reply.readFileDescriptor() : null;
+ return fd;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public AssetFileDescriptor openAssetFile(Uri url, String mode)
throws RemoteException, FileNotFoundException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ data.writeString(mode);
- url.writeToParcel(data, 0);
- data.writeString(mode);
+ mRemote.transact(IContentProvider.OPEN_ASSET_FILE_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.OPEN_ASSET_FILE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
- int has = reply.readInt();
- AssetFileDescriptor fd = has != 0
- ? AssetFileDescriptor.CREATOR.createFromParcel(reply) : null;
-
- data.recycle();
- reply.recycle();
-
- return fd;
+ DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
+ int has = reply.readInt();
+ AssetFileDescriptor fd = has != 0
+ ? AssetFileDescriptor.CREATOR.createFromParcel(reply) : null;
+ return fd;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public Bundle call(String method, String request, Bundle args)
throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ data.writeString(method);
+ data.writeString(request);
+ data.writeBundle(args);
- data.writeString(method);
- data.writeString(request);
- data.writeBundle(args);
+ mRemote.transact(IContentProvider.CALL_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.CALL_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- Bundle bundle = reply.readBundle();
-
- data.recycle();
- reply.recycle();
-
- return bundle;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ Bundle bundle = reply.readBundle();
+ return bundle;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public String[] getStreamTypes(Uri url, String mimeTypeFilter) throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ data.writeString(mimeTypeFilter);
- url.writeToParcel(data, 0);
- data.writeString(mimeTypeFilter);
+ mRemote.transact(IContentProvider.GET_STREAM_TYPES_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.GET_STREAM_TYPES_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
- String[] out = reply.createStringArray();
-
- data.recycle();
- reply.recycle();
-
- return out;
+ DatabaseUtils.readExceptionFromParcel(reply);
+ String[] out = reply.createStringArray();
+ return out;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, Bundle opts)
throws RemoteException, FileNotFoundException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
- data.writeInterfaceToken(IContentProvider.descriptor);
+ url.writeToParcel(data, 0);
+ data.writeString(mimeType);
+ data.writeBundle(opts);
- url.writeToParcel(data, 0);
- data.writeString(mimeType);
- data.writeBundle(opts);
+ mRemote.transact(IContentProvider.OPEN_TYPED_ASSET_FILE_TRANSACTION, data, reply, 0);
- mRemote.transact(IContentProvider.OPEN_TYPED_ASSET_FILE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
- int has = reply.readInt();
- AssetFileDescriptor fd = has != 0
- ? AssetFileDescriptor.CREATOR.createFromParcel(reply) : null;
-
- data.recycle();
- reply.recycle();
-
- return fd;
+ DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
+ int has = reply.readInt();
+ AssetFileDescriptor fd = has != 0
+ ? AssetFileDescriptor.CREATOR.createFromParcel(reply) : null;
+ return fd;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
private IBinder mRemote;
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 1e72092..0d25926 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -16,6 +16,8 @@
package android.content;
+import dalvik.system.CloseGuard;
+
import android.accounts.Account;
import android.app.ActivityManagerNative;
import android.app.ActivityThread;
@@ -33,6 +35,7 @@
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.StrictMode;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.EventLog;
@@ -1562,27 +1565,39 @@
private final class CursorWrapperInner extends CursorWrapper {
private final IContentProvider mContentProvider;
public static final String TAG="CursorWrapperInner";
- private boolean mCloseFlag = false;
+
+ private final CloseGuard mCloseGuard = CloseGuard.get();
+ private boolean mProviderReleased;
CursorWrapperInner(Cursor cursor, IContentProvider icp) {
super(cursor);
mContentProvider = icp;
+ mCloseGuard.open("close");
}
@Override
public void close() {
super.close();
ContentResolver.this.releaseProvider(mContentProvider);
- mCloseFlag = true;
+ mProviderReleased = true;
+
+ if (mCloseGuard != null) {
+ mCloseGuard.close();
+ }
}
@Override
protected void finalize() throws Throwable {
- // TODO: integrate CloseGuard support.
try {
- if(!mCloseFlag) {
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
+ if (!mProviderReleased && mContentProvider != null) {
+ // Even though we are using CloseGuard, log this anyway so that
+ // application developers always see the message in the log.
Log.w(TAG, "Cursor finalized without prior close()");
- close();
+ ContentResolver.this.releaseProvider(mContentProvider);
}
} finally {
super.finalize();
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 6228bd0..7af535b 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -19,6 +19,7 @@
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
+import android.os.AsyncTask;
import java.io.FileDescriptor;
import java.io.PrintWriter;
diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java
index 72bc9c2..2a67ff8 100644
--- a/core/java/android/content/IContentProvider.java
+++ b/core/java/android/content/IContentProvider.java
@@ -18,9 +18,6 @@
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
-import android.database.CursorWindow;
-import android.database.IBulkCursor;
-import android.database.IContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
@@ -36,13 +33,6 @@
* @hide
*/
public interface IContentProvider extends IInterface {
- /**
- * @hide - hide this because return type IBulkCursor and parameter
- * IContentObserver are system private classes.
- */
- public IBulkCursor bulkQuery(Uri url, String[] projection,
- String selection, String[] selectionArgs, String sortOrder, IContentObserver observer,
- CursorWindow window) throws RemoteException;
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sortOrder) throws RemoteException;
public String getType(Uri url) throws RemoteException;
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index f44d038..45a42e4 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -55,13 +55,21 @@
* {@link android.content.Context#bindService} to communicate with a
* background {@link android.app.Service}.
*
- * <p>An Intent provides a facility for performing late runtime binding between
- * the code in different applications. Its most significant use is in the
- * launching of activities, where it can be thought of as the glue between
- * activities. It is
- * basically a passive data structure holding an abstract description of an
- * action to be performed. The primary pieces of information in an intent
- * are:</p>
+ * <p>An Intent provides a facility for performing late runtime binding between the code in
+ * different applications. Its most significant use is in the launching of activities, where it
+ * can be thought of as the glue between activities. It is basically a passive data structure
+ * holding an abstract description of an action to be performed.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about how to create and resolve intents, read the
+ * <a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+ * developer guide.</p>
+ * </div>
+ *
+ * <a name="IntentStructure"></a>
+ * <h3>Intent Structure</h3>
+ * <p>The primary pieces of information in an intent are:</p>
*
* <ul>
* <li> <p><b>action</b> -- The general action to be performed, such as
@@ -2558,7 +2566,7 @@
*/
public static final String EXTRA_LOCAL_ONLY =
"android.intent.extra.LOCAL_ONLY";
-
+
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Intent flags (see mFlags variable).
@@ -3568,6 +3576,13 @@
return mExtras != null && mExtras.hasFileDescriptors();
}
+ /** @hide */
+ public void setAllowFds(boolean allowFds) {
+ if (mExtras != null) {
+ mExtras.setAllowFds(allowFds);
+ }
+ }
+
/**
* Retrieve extended data from the intent.
*
@@ -5276,7 +5291,7 @@
if (r != null) {
mSourceBounds = new Rect(r);
} else {
- r = null;
+ mSourceBounds = null;
}
}
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index f9b3fd5..3b0d846 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -71,6 +71,14 @@
* To specify a path, you also must specify both one or more authorities and
* one or more schemes it is associated with.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about how to create and resolve intents, read the
+ * <a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+ * developer guide.</p>
+ * </div>
+ *
+ * <h3>Filter Rules</h3>
* <p>A match is based on the following rules. Note that
* for an IntentFilter to match an Intent, three conditions must hold:
* the <strong>action</strong> and <strong>category</strong> must match, and
diff --git a/core/java/android/content/Loader.java b/core/java/android/content/Loader.java
index 368c33e..b962800 100644
--- a/core/java/android/content/Loader.java
+++ b/core/java/android/content/Loader.java
@@ -40,8 +40,12 @@
*
* <p>Most implementations should not derive directly from this class, but
* instead inherit from {@link AsyncTaskLoader}.</p>
- * <p>For more information, see the <a
- * href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using loaders, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</p>
+ * </div>
*
* @param <D> The result returned when the load is complete
*/
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 127efa2..4225393 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -1301,7 +1301,7 @@
elapsedTime = authoritySyncStats.elapsedTime;
times = authoritySyncStats.times;
- timeStr = String.format("%d/%d%%",
+ timeStr = String.format("%ds/%d%%",
elapsedTime / 1000,
elapsedTime * 100 / totalElapsedTime);
timesStr = String.format("%d/%d%%",
@@ -1309,32 +1309,30 @@
times * 100 / totalTimes);
pw.printf(authorityFormat, name, timesStr, timeStr);
- if (authoritySyncStats.accountMap.size() > 1) {
- final List<AccountSyncStats> sortedAccounts =
- new ArrayList<AccountSyncStats>(
- authoritySyncStats.accountMap.values());
- Collections.sort(sortedAccounts, new Comparator<AccountSyncStats>() {
- @Override
- public int compare(AccountSyncStats lhs, AccountSyncStats rhs) {
- // reverse order
- int compare = Integer.compare(rhs.times, lhs.times);
- if (compare == 0) {
- compare = Long.compare(rhs.elapsedTime, lhs.elapsedTime);
- }
- return compare;
+ final List<AccountSyncStats> sortedAccounts =
+ new ArrayList<AccountSyncStats>(
+ authoritySyncStats.accountMap.values());
+ Collections.sort(sortedAccounts, new Comparator<AccountSyncStats>() {
+ @Override
+ public int compare(AccountSyncStats lhs, AccountSyncStats rhs) {
+ // reverse order
+ int compare = Integer.compare(rhs.times, lhs.times);
+ if (compare == 0) {
+ compare = Long.compare(rhs.elapsedTime, lhs.elapsedTime);
}
- });
- for (AccountSyncStats stats: sortedAccounts) {
- elapsedTime = stats.elapsedTime;
- times = stats.times;
- timeStr = String.format("%d/%d%%",
- elapsedTime / 1000,
- elapsedTime * 100 / totalElapsedTime);
- timesStr = String.format("%d/%d%%",
- times,
- times * 100 / totalTimes);
- pw.printf(accountFormat, stats.name, timesStr, timeStr);
+ return compare;
}
+ });
+ for (AccountSyncStats stats: sortedAccounts) {
+ elapsedTime = stats.elapsedTime;
+ times = stats.times;
+ timeStr = String.format("%ds/%d%%",
+ elapsedTime / 1000,
+ elapsedTime * 100 / totalElapsedTime);
+ timesStr = String.format("%d/%d%%",
+ times,
+ times * 100 / totalTimes);
+ pw.printf(accountFormat, stats.name, timesStr, timeStr);
}
pw.println(separator);
}
@@ -1342,9 +1340,8 @@
pw.println();
pw.println("Recent Sync History");
final String format = " %-" + maxAccount + "s %s\n";
- String lastAuthorityName = null;
- String lastAccountKey = null;
- long lastEventTime = 0;
+ final Map<String, Long> lastTimeMap = Maps.newHashMap();
+
for (int i = 0; i < N; i++) {
SyncStorageEngine.SyncHistoryItem item = items.get(i);
SyncStorageEngine.AuthorityInfo authority
@@ -1363,21 +1360,32 @@
final long eventTime = item.eventTime;
time.set(eventTime);
- pw.printf(" #%-3d: %s %8s %5.1fs",
+ final String key = authorityName + "/" + accountKey;
+ final Long lastEventTime = lastTimeMap.get(key);
+ final String diffString;
+ if (lastEventTime == null) {
+ diffString = "";
+ } else {
+ final long diff = (lastEventTime - eventTime) / 1000;
+ if (diff < 60) {
+ diffString = String.valueOf(diff);
+ } else if (diff < 3600) {
+ diffString = String.format("%02d:%02d", diff / 60, diff % 60);
+ } else {
+ final long sec = diff % 3600;
+ diffString = String.format("%02d:%02d:%02d",
+ diff / 3600, sec / 60, sec % 60);
+ }
+ }
+ lastTimeMap.put(key, eventTime);
+
+ pw.printf(" #%-3d: %s %8s %5.1fs %8s",
i + 1,
formatTime(eventTime),
SyncStorageEngine.SOURCES[item.source],
- ((float) elapsedTime) / 1000);
- if (authorityName.equals(lastAuthorityName) && accountKey.equals(lastAccountKey)) {
- final long span = (lastEventTime - eventTime) / 1000;
- pw.printf(" %02d:%02d\n", span / 60, span % 60);
- } else {
- pw.printf(format, accountKey, authorityName);
- }
-
- lastAuthorityName = authorityName;
- lastAccountKey = accountKey;
- lastEventTime = eventTime;
+ ((float) elapsedTime) / 1000,
+ diffString);
+ pw.printf(format, accountKey, authorityName);
if (item.event != SyncStorageEngine.EVENT_STOP
|| item.upstreamActivity != 0
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index a3bcc28..decb974 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -362,4 +362,6 @@
void verifyPendingInstall(int id, int verificationCode);
VerifierDeviceIdentity getVerifierDeviceIdentity();
+
+ boolean isFirstBoot();
}
diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java
index 5fe42db..ee6aec6 100644
--- a/core/java/android/database/AbstractCursor.java
+++ b/core/java/android/database/AbstractCursor.java
@@ -64,7 +64,10 @@
/* Methods that may optionally be implemented by subclasses */
/**
- * returns a pre-filled window, return NULL if no such window
+ * If the cursor is backed by a {@link CursorWindow}, returns a pre-filled
+ * window with the contents of the cursor, otherwise null.
+ *
+ * @return The pre-filled window that backs this cursor, or null if none.
*/
public CursorWindow getWindow() {
return null;
@@ -75,13 +78,11 @@
}
public void deactivate() {
- deactivateInternal();
+ onDeactivateOrClose();
}
- /**
- * @hide
- */
- public void deactivateInternal() {
+ /** @hide */
+ protected void onDeactivateOrClose() {
if (mSelfObserver != null) {
mContentResolver.unregisterContentObserver(mSelfObserver);
mSelfObserverRegistered = false;
@@ -105,7 +106,7 @@
public void close() {
mClosed = true;
mContentObservable.unregisterAll();
- deactivateInternal();
+ onDeactivateOrClose();
}
/**
diff --git a/core/java/android/database/AbstractWindowedCursor.java b/core/java/android/database/AbstractWindowedCursor.java
index 3d95769..d0aedd2 100644
--- a/core/java/android/database/AbstractWindowedCursor.java
+++ b/core/java/android/database/AbstractWindowedCursor.java
@@ -18,8 +18,27 @@
/**
* A base class for Cursors that store their data in {@link CursorWindow}s.
+ * <p>
+ * The cursor owns the cursor window it uses. When the cursor is closed,
+ * its window is also closed. Likewise, when the window used by the cursor is
+ * changed, its old window is closed. This policy of strict ownership ensures
+ * that cursor windows are not leaked.
+ * </p><p>
+ * Subclasses are responsible for filling the cursor window with data during
+ * {@link #onMove(int, int)}, allocating a new cursor window if necessary.
+ * During {@link #requery()}, the existing cursor window should be cleared and
+ * filled with new data.
+ * </p><p>
+ * If the contents of the cursor change or become invalid, the old window must be closed
+ * (because it is owned by the cursor) and set to null.
+ * </p>
*/
public abstract class AbstractWindowedCursor extends AbstractCursor {
+ /**
+ * The cursor window owned by this cursor.
+ */
+ protected CursorWindow mWindow;
+
@Override
public byte[] getBlob(int columnIndex) {
checkPosition();
@@ -126,25 +145,67 @@
public CursorWindow getWindow() {
return mWindow;
}
-
+
/**
- * Set a new cursor window to cursor, usually set a remote cursor window
- * @param window cursor window
+ * Sets a new cursor window for the cursor to use.
+ * <p>
+ * The cursor takes ownership of the provided cursor window; the cursor window
+ * will be closed when the cursor is closed or when the cursor adopts a new
+ * cursor window.
+ * </p><p>
+ * If the cursor previously had a cursor window, then it is closed when the
+ * new cursor window is assigned.
+ * </p>
+ *
+ * @param window The new cursor window, typically a remote cursor window.
*/
public void setWindow(CursorWindow window) {
- if (mWindow != null) {
- mWindow.close();
+ if (window != mWindow) {
+ closeWindow();
+ mWindow = window;
}
- mWindow = window;
}
-
+
+ /**
+ * Returns true if the cursor has an associated cursor window.
+ *
+ * @return True if the cursor has an associated cursor window.
+ */
public boolean hasWindow() {
return mWindow != null;
}
/**
- * This needs be updated in {@link #onMove} by subclasses, and
- * needs to be set to NULL when the contents of the cursor change.
+ * Closes the cursor window and sets {@link #mWindow} to null.
+ * @hide
*/
- protected CursorWindow mWindow;
+ protected void closeWindow() {
+ if (mWindow != null) {
+ mWindow.close();
+ mWindow = null;
+ }
+ }
+
+ /**
+ * If there is a window, clear it.
+ * Otherwise, creates a local window.
+ *
+ * @param name The window name.
+ * @hide
+ */
+ protected void clearOrCreateLocalWindow(String name) {
+ if (mWindow == null) {
+ // If there isn't a window set already it will only be accessed locally
+ mWindow = new CursorWindow(name, true /* the window is local only */);
+ } else {
+ mWindow.clear();
+ }
+ }
+
+ /** @hide */
+ @Override
+ protected void onDeactivateOrClose() {
+ super.onDeactivateOrClose();
+ closeWindow();
+ }
}
diff --git a/core/java/android/database/BulkCursorNative.java b/core/java/android/database/BulkCursorNative.java
index fa62d69..20a9c67 100644
--- a/core/java/android/database/BulkCursorNative.java
+++ b/core/java/android/database/BulkCursorNative.java
@@ -20,12 +20,13 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
+import android.os.Parcelable;
import android.os.RemoteException;
/**
* Native implementation of the bulk cursor. This is only for use in implementing
* IPC, application code should use the Cursor interface.
- *
+ *
* {@hide}
*/
public abstract class BulkCursorNative extends Binder implements IBulkCursor
@@ -61,13 +62,13 @@
data.enforceInterface(IBulkCursor.descriptor);
int startPos = data.readInt();
CursorWindow window = getWindow(startPos);
+ reply.writeNoException();
if (window == null) {
reply.writeInt(0);
- return true;
+ } else {
+ reply.writeInt(1);
+ window.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
}
- reply.writeNoException();
- reply.writeInt(1);
- window.writeToParcel(reply, 0);
return true;
}
@@ -108,9 +109,8 @@
case REQUERY_TRANSACTION: {
data.enforceInterface(IBulkCursor.descriptor);
IContentObserver observer =
- IContentObserver.Stub.asInterface(data.readStrongBinder());
- CursorWindow window = CursorWindow.CREATOR.createFromParcel(data);
- int count = requery(observer, window);
+ IContentObserver.Stub.asInterface(data.readStrongBinder());
+ int count = requery(observer);
reply.writeNoException();
reply.writeInt(count);
reply.writeBundle(getExtras());
@@ -184,172 +184,171 @@
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
+ data.writeInt(startPos);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ mRemote.transact(GET_CURSOR_WINDOW_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- data.writeInt(startPos);
-
- mRemote.transact(GET_CURSOR_WINDOW_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- CursorWindow window = null;
- if (reply.readInt() == 1) {
- window = CursorWindow.newFromParcel(reply);
+ CursorWindow window = null;
+ if (reply.readInt() == 1) {
+ window = CursorWindow.newFromParcel(reply);
+ }
+ return window;
+ } finally {
+ data.recycle();
+ reply.recycle();
}
-
- data.recycle();
- reply.recycle();
-
- return window;
}
public void onMove(int position) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
+ data.writeInt(position);
- data.writeInterfaceToken(IBulkCursor.descriptor);
-
- data.writeInt(position);
-
- mRemote.transact(ON_MOVE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- data.recycle();
- reply.recycle();
+ mRemote.transact(ON_MOVE_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public int count() throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ boolean result = mRemote.transact(COUNT_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- boolean result = mRemote.transact(COUNT_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- int count;
- if (result == false) {
- count = -1;
- } else {
- count = reply.readInt();
+ int count;
+ if (result == false) {
+ count = -1;
+ } else {
+ count = reply.readInt();
+ }
+ return count;
+ } finally {
+ data.recycle();
+ reply.recycle();
}
- data.recycle();
- reply.recycle();
- return count;
}
public String[] getColumnNames() throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ mRemote.transact(GET_COLUMN_NAMES_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- mRemote.transact(GET_COLUMN_NAMES_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- String[] columnNames = null;
- int numColumns = reply.readInt();
- columnNames = new String[numColumns];
- for (int i = 0; i < numColumns; i++) {
- columnNames[i] = reply.readString();
+ String[] columnNames = null;
+ int numColumns = reply.readInt();
+ columnNames = new String[numColumns];
+ for (int i = 0; i < numColumns; i++) {
+ columnNames[i] = reply.readString();
+ }
+ return columnNames;
+ } finally {
+ data.recycle();
+ reply.recycle();
}
-
- data.recycle();
- reply.recycle();
- return columnNames;
}
public void deactivate() throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
- data.writeInterfaceToken(IBulkCursor.descriptor);
-
- mRemote.transact(DEACTIVATE_TRANSACTION, data, reply, 0);
- DatabaseUtils.readExceptionFromParcel(reply);
-
- data.recycle();
- reply.recycle();
+ mRemote.transact(DEACTIVATE_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public void close() throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
- data.writeInterfaceToken(IBulkCursor.descriptor);
-
- mRemote.transact(CLOSE_TRANSACTION, data, reply, 0);
- DatabaseUtils.readExceptionFromParcel(reply);
-
- data.recycle();
- reply.recycle();
+ mRemote.transact(CLOSE_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
- public int requery(IContentObserver observer, CursorWindow window) throws RemoteException {
+ public int requery(IContentObserver observer) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
+ data.writeStrongInterface(observer);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ boolean result = mRemote.transact(REQUERY_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- data.writeStrongInterface(observer);
- window.writeToParcel(data, 0);
-
- boolean result = mRemote.transact(REQUERY_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- int count;
- if (!result) {
- count = -1;
- } else {
- count = reply.readInt();
- mExtras = reply.readBundle();
+ int count;
+ if (!result) {
+ count = -1;
+ } else {
+ count = reply.readInt();
+ mExtras = reply.readBundle();
+ }
+ return count;
+ } finally {
+ data.recycle();
+ reply.recycle();
}
-
- data.recycle();
- reply.recycle();
-
- return count;
}
public boolean getWantsAllOnMoveCalls() throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ mRemote.transact(WANTS_ON_MOVE_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- mRemote.transact(WANTS_ON_MOVE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- int result = reply.readInt();
- data.recycle();
- reply.recycle();
- return result != 0;
+ int result = reply.readInt();
+ return result != 0;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
public Bundle getExtras() throws RemoteException {
if (mExtras == null) {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ mRemote.transact(GET_EXTRAS_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- mRemote.transact(GET_EXTRAS_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- mExtras = reply.readBundle();
- data.recycle();
- reply.recycle();
+ mExtras = reply.readBundle();
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
return mExtras;
}
@@ -357,19 +356,19 @@
public Bundle respond(Bundle extras) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IBulkCursor.descriptor);
+ data.writeBundle(extras);
- data.writeInterfaceToken(IBulkCursor.descriptor);
+ mRemote.transact(RESPOND_TRANSACTION, data, reply, 0);
+ DatabaseUtils.readExceptionFromParcel(reply);
- data.writeBundle(extras);
-
- mRemote.transact(RESPOND_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionFromParcel(reply);
-
- Bundle returnExtras = reply.readBundle();
- data.recycle();
- reply.recycle();
- return returnExtras;
+ Bundle returnExtras = reply.readBundle();
+ return returnExtras;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
}
}
diff --git a/core/java/android/database/BulkCursorToCursorAdaptor.java b/core/java/android/database/BulkCursorToCursorAdaptor.java
index 16becf5..885046b 100644
--- a/core/java/android/database/BulkCursorToCursorAdaptor.java
+++ b/core/java/android/database/BulkCursorToCursorAdaptor.java
@@ -21,44 +21,30 @@
import android.util.Log;
/**
- * Adapts an {@link IBulkCursor} to a {@link Cursor} for use in the local
- * process.
+ * Adapts an {@link IBulkCursor} to a {@link Cursor} for use in the local process.
*
* {@hide}
*/
public final class BulkCursorToCursorAdaptor extends AbstractWindowedCursor {
private static final String TAG = "BulkCursor";
- private SelfContentObserver mObserverBridge;
+ private SelfContentObserver mObserverBridge = new SelfContentObserver(this);
private IBulkCursor mBulkCursor;
private int mCount;
private String[] mColumns;
private boolean mWantsAllOnMoveCalls;
- public void set(IBulkCursor bulkCursor) {
- mBulkCursor = bulkCursor;
-
- try {
- mCount = mBulkCursor.count();
- mWantsAllOnMoveCalls = mBulkCursor.getWantsAllOnMoveCalls();
-
- // Search for the rowID column index and set it for our parent
- mColumns = mBulkCursor.getColumnNames();
- mRowIdColumnIndex = findRowIdColumnIndex(mColumns);
- } catch (RemoteException ex) {
- Log.e(TAG, "Setup failed because the remote process is dead");
- }
- }
-
/**
- * Version of set() that does fewer Binder calls if the caller
- * already knows BulkCursorToCursorAdaptor's properties.
+ * Initializes the adaptor.
+ * Must be called before first use.
*/
- public void set(IBulkCursor bulkCursor, int count, int idIndex) {
+ public void initialize(IBulkCursor bulkCursor, int count, int idIndex,
+ boolean wantsAllOnMoveCalls) {
mBulkCursor = bulkCursor;
mColumns = null; // lazily retrieved
mCount = count;
mRowIdColumnIndex = idIndex;
+ mWantsAllOnMoveCalls = wantsAllOnMoveCalls;
}
/**
@@ -80,31 +66,34 @@
*
* @return A SelfContentObserver hooked up to this Cursor
*/
- public synchronized IContentObserver getObserver() {
- if (mObserverBridge == null) {
- mObserverBridge = new SelfContentObserver(this);
- }
+ public IContentObserver getObserver() {
return mObserverBridge.getContentObserver();
}
+ private void throwIfCursorIsClosed() {
+ if (mBulkCursor == null) {
+ throw new StaleDataException("Attempted to access a cursor after it has been closed.");
+ }
+ }
+
@Override
public int getCount() {
+ throwIfCursorIsClosed();
return mCount;
}
@Override
public boolean onMove(int oldPosition, int newPosition) {
+ throwIfCursorIsClosed();
+
try {
// Make sure we have the proper window
- if (mWindow != null) {
- if (newPosition < mWindow.getStartPosition() ||
- newPosition >= (mWindow.getStartPosition() + mWindow.getNumRows())) {
- mWindow = mBulkCursor.getWindow(newPosition);
- } else if (mWantsAllOnMoveCalls) {
- mBulkCursor.onMove(newPosition);
- }
- } else {
- mWindow = mBulkCursor.getWindow(newPosition);
+ if (mWindow == null
+ || newPosition < mWindow.getStartPosition()
+ || newPosition >= mWindow.getStartPosition() + mWindow.getNumRows()) {
+ setWindow(mBulkCursor.getWindow(newPosition));
+ } else if (mWantsAllOnMoveCalls) {
+ mBulkCursor.onMove(newPosition);
}
} catch (RemoteException ex) {
// We tried to get a window and failed
@@ -126,38 +115,39 @@
// which is what actually makes the data set invalid.
super.deactivate();
- try {
- mBulkCursor.deactivate();
- } catch (RemoteException ex) {
- Log.w(TAG, "Remote process exception when deactivating");
+ if (mBulkCursor != null) {
+ try {
+ mBulkCursor.deactivate();
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Remote process exception when deactivating");
+ }
}
- mWindow = null;
}
@Override
public void close() {
super.close();
- try {
- mBulkCursor.close();
- } catch (RemoteException ex) {
- Log.w(TAG, "Remote process exception when closing");
+
+ if (mBulkCursor != null) {
+ try {
+ mBulkCursor.close();
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Remote process exception when closing");
+ } finally {
+ mBulkCursor = null;
+ }
}
- mWindow = null;
}
@Override
public boolean requery() {
+ throwIfCursorIsClosed();
+
try {
- int oldCount = mCount;
- //TODO get the window from a pool somewhere to avoid creating the memory dealer
- mCount = mBulkCursor.requery(getObserver(), new CursorWindow(
- false /* the window will be accessed across processes */));
+ mCount = mBulkCursor.requery(getObserver());
if (mCount != -1) {
mPos = -1;
- if (mWindow != null) {
- mWindow.close();
- mWindow = null;
- }
+ closeWindow();
// super.requery() will call onChanged. Do it here instead of relying on the
// observer from the far side so that observers can see a correct value for mCount
@@ -177,6 +167,8 @@
@Override
public String[] getColumnNames() {
+ throwIfCursorIsClosed();
+
if (mColumns == null) {
try {
mColumns = mBulkCursor.getColumnNames();
@@ -190,6 +182,8 @@
@Override
public Bundle getExtras() {
+ throwIfCursorIsClosed();
+
try {
return mBulkCursor.getExtras();
} catch (RemoteException e) {
@@ -201,6 +195,8 @@
@Override
public Bundle respond(Bundle extras) {
+ throwIfCursorIsClosed();
+
try {
return mBulkCursor.respond(extras);
} catch (RemoteException e) {
diff --git a/core/java/android/database/CrossProcessCursor.java b/core/java/android/database/CrossProcessCursor.java
index 77ba3a5..8e6a5aa 100644
--- a/core/java/android/database/CrossProcessCursor.java
+++ b/core/java/android/database/CrossProcessCursor.java
@@ -16,7 +16,7 @@
package android.database;
-public interface CrossProcessCursor extends Cursor{
+public interface CrossProcessCursor extends Cursor {
/**
* returns a pre-filled window, return NULL if no such window
*/
diff --git a/core/java/android/database/CursorToBulkCursorAdaptor.java b/core/java/android/database/CursorToBulkCursorAdaptor.java
index 8fa4d3b..dd2c9b7 100644
--- a/core/java/android/database/CursorToBulkCursorAdaptor.java
+++ b/core/java/android/database/CursorToBulkCursorAdaptor.java
@@ -24,19 +24,38 @@
/**
* Wraps a BulkCursor around an existing Cursor making it remotable.
+ * <p>
+ * If the wrapped cursor is a {@link AbstractWindowedCursor} then it owns
+ * the cursor window. Otherwise, the adaptor takes ownership of the
+ * cursor itself and ensures it gets closed as needed during deactivation
+ * and requeries.
+ * </p>
*
* {@hide}
*/
public final class CursorToBulkCursorAdaptor extends BulkCursorNative
implements IBinder.DeathRecipient {
private static final String TAG = "Cursor";
- private final CrossProcessCursor mCursor;
- private CursorWindow mWindow;
+
+ private final Object mLock = new Object();
private final String mProviderName;
private ContentObserverProxy mObserver;
- private static final class ContentObserverProxy extends ContentObserver
- {
+ /**
+ * The cursor that is being adapted.
+ * This field is set to null when the cursor is closed.
+ */
+ private CrossProcessCursor mCursor;
+
+ /**
+ * The cursor window used by the cross process cursor.
+ * This field is always null for abstract windowed cursors since they are responsible
+ * for managing the lifetime of their window.
+ */
+ private CursorWindow mWindowForNonWindowedCursor;
+ private boolean mWindowForNonWindowedCursorWasFilled;
+
+ private static final class ContentObserverProxy extends ContentObserver {
protected IContentObserver mRemote;
public ContentObserverProxy(IContentObserver remoteObserver, DeathRecipient recipient) {
@@ -69,102 +88,171 @@
}
}
- public CursorToBulkCursorAdaptor(Cursor cursor, IContentObserver observer, String providerName,
- boolean allowWrite, CursorWindow window) {
+ public CursorToBulkCursorAdaptor(Cursor cursor, IContentObserver observer,
+ String providerName) {
try {
mCursor = (CrossProcessCursor) cursor;
- if (mCursor instanceof AbstractWindowedCursor) {
- AbstractWindowedCursor windowedCursor = (AbstractWindowedCursor) cursor;
- if (windowedCursor.hasWindow()) {
- if (Log.isLoggable(TAG, Log.VERBOSE) || false) {
- Log.v(TAG, "Cross process cursor has a local window before setWindow in "
- + providerName, new RuntimeException());
- }
- }
- windowedCursor.setWindow(window);
- } else {
- mWindow = window;
- mCursor.fillWindow(0, window);
- }
} catch (ClassCastException e) {
- // TODO Implement this case.
throw new UnsupportedOperationException(
"Only CrossProcessCursor cursors are supported across process for now", e);
}
mProviderName = providerName;
- createAndRegisterObserverProxy(observer);
+ synchronized (mLock) {
+ createAndRegisterObserverProxyLocked(observer);
+ }
}
-
+
+ private void closeWindowForNonWindowedCursorLocked() {
+ if (mWindowForNonWindowedCursor != null) {
+ mWindowForNonWindowedCursor.close();
+ mWindowForNonWindowedCursor = null;
+ mWindowForNonWindowedCursorWasFilled = false;
+ }
+ }
+
+ private void disposeLocked() {
+ if (mCursor != null) {
+ unregisterObserverProxyLocked();
+ mCursor.close();
+ mCursor = null;
+ }
+
+ closeWindowForNonWindowedCursorLocked();
+ }
+
+ private void throwIfCursorIsClosed() {
+ if (mCursor == null) {
+ throw new StaleDataException("Attempted to access a cursor after it has been closed.");
+ }
+ }
+
+ @Override
public void binderDied() {
- mCursor.close();
- if (mWindow != null) {
- mWindow.close();
+ synchronized (mLock) {
+ disposeLocked();
}
}
-
+
+ @Override
public CursorWindow getWindow(int startPos) {
- mCursor.moveToPosition(startPos);
-
- if (mWindow != null) {
- if (startPos < mWindow.getStartPosition() ||
- startPos >= (mWindow.getStartPosition() + mWindow.getNumRows())) {
- mCursor.fillWindow(startPos, mWindow);
- }
- return mWindow;
- } else {
- return ((AbstractWindowedCursor)mCursor).getWindow();
- }
- }
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
- public void onMove(int position) {
- mCursor.onMove(mCursor.getPosition(), position);
- }
+ CursorWindow window;
+ if (mCursor instanceof AbstractWindowedCursor) {
+ AbstractWindowedCursor windowedCursor = (AbstractWindowedCursor)mCursor;
+ window = windowedCursor.getWindow();
+ if (window == null) {
+ window = new CursorWindow(mProviderName, false /*localOnly*/);
+ windowedCursor.setWindow(window);
+ }
- public int count() {
- return mCursor.getCount();
- }
+ mCursor.moveToPosition(startPos);
+ } else {
+ window = mWindowForNonWindowedCursor;
+ if (window == null) {
+ window = new CursorWindow(mProviderName, false /*localOnly*/);
+ mWindowForNonWindowedCursor = window;
+ }
- public String[] getColumnNames() {
- return mCursor.getColumnNames();
- }
+ mCursor.moveToPosition(startPos);
- public void deactivate() {
- maybeUnregisterObserverProxy();
- mCursor.deactivate();
- }
-
- public void close() {
- maybeUnregisterObserverProxy();
- mCursor.close();
- }
-
- public int requery(IContentObserver observer, CursorWindow window) {
- if (mWindow == null) {
- ((AbstractWindowedCursor)mCursor).setWindow(window);
- }
- try {
- if (!mCursor.requery()) {
- return -1;
+ if (!mWindowForNonWindowedCursorWasFilled
+ || startPos < window.getStartPosition()
+ || startPos >= window.getStartPosition() + window.getNumRows()) {
+ mCursor.fillWindow(startPos, window);
+ mWindowForNonWindowedCursorWasFilled = true;
+ }
}
- } catch (IllegalStateException e) {
- IllegalStateException leakProgram = new IllegalStateException(
- mProviderName + " Requery misuse db, mCursor isClosed:" +
- mCursor.isClosed(), e);
- throw leakProgram;
+
+ // Acquire a reference before returning from this RPC.
+ // The Binder proxy will decrement the reference count again as part of writing
+ // the CursorWindow to the reply parcel as a return value.
+ if (window != null) {
+ window.acquireReference();
+ }
+ return window;
}
-
- if (mWindow != null) {
- mCursor.fillWindow(0, window);
- mWindow = window;
- }
- maybeUnregisterObserverProxy();
- createAndRegisterObserverProxy(observer);
- return mCursor.getCount();
}
+ @Override
+ public void onMove(int position) {
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ mCursor.onMove(mCursor.getPosition(), position);
+ }
+ }
+
+ @Override
+ public int count() {
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ return mCursor.getCount();
+ }
+ }
+
+ @Override
+ public String[] getColumnNames() {
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ return mCursor.getColumnNames();
+ }
+ }
+
+ @Override
+ public void deactivate() {
+ synchronized (mLock) {
+ if (mCursor != null) {
+ unregisterObserverProxyLocked();
+ mCursor.deactivate();
+ }
+
+ closeWindowForNonWindowedCursorLocked();
+ }
+ }
+
+ @Override
+ public void close() {
+ synchronized (mLock) {
+ disposeLocked();
+ }
+ }
+
+ @Override
+ public int requery(IContentObserver observer) {
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ closeWindowForNonWindowedCursorLocked();
+
+ try {
+ if (!mCursor.requery()) {
+ return -1;
+ }
+ } catch (IllegalStateException e) {
+ IllegalStateException leakProgram = new IllegalStateException(
+ mProviderName + " Requery misuse db, mCursor isClosed:" +
+ mCursor.isClosed(), e);
+ throw leakProgram;
+ }
+
+ unregisterObserverProxyLocked();
+ createAndRegisterObserverProxyLocked(observer);
+ return mCursor.getCount();
+ }
+ }
+
+ @Override
public boolean getWantsAllOnMoveCalls() {
- return mCursor.getWantsAllOnMoveCalls();
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ return mCursor.getWantsAllOnMoveCalls();
+ }
}
/**
@@ -173,7 +261,7 @@
* @param observer the IContentObserver that wants to monitor the cursor
* @throws IllegalStateException if an observer is already registered
*/
- private void createAndRegisterObserverProxy(IContentObserver observer) {
+ private void createAndRegisterObserverProxyLocked(IContentObserver observer) {
if (mObserver != null) {
throw new IllegalStateException("an observer is already registered");
}
@@ -182,7 +270,7 @@
}
/** Unregister the observer if it is already registered. */
- private void maybeUnregisterObserverProxy() {
+ private void unregisterObserverProxyLocked() {
if (mObserver != null) {
mCursor.unregisterContentObserver(mObserver);
mObserver.unlinkToDeath(this);
@@ -190,11 +278,21 @@
}
}
+ @Override
public Bundle getExtras() {
- return mCursor.getExtras();
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ return mCursor.getExtras();
+ }
}
+ @Override
public Bundle respond(Bundle extras) {
- return mCursor.respond(extras);
+ synchronized (mLock) {
+ throwIfCursorIsClosed();
+
+ return mCursor.respond(extras);
+ }
}
}
diff --git a/core/java/android/database/CursorWindow.java b/core/java/android/database/CursorWindow.java
index f7cbf7a..a18a721 100644
--- a/core/java/android/database/CursorWindow.java
+++ b/core/java/android/database/CursorWindow.java
@@ -16,10 +16,12 @@
package android.database;
+import dalvik.system.CloseGuard;
+
import android.content.res.Resources;
import android.database.sqlite.SQLiteClosable;
+import android.database.sqlite.SQLiteException;
import android.os.Binder;
-import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Process;
@@ -28,6 +30,13 @@
/**
* A buffer containing multiple cursor rows.
+ * <p>
+ * A {@link CursorWindow} is read-write when created and used locally. When sent
+ * to a remote process (by writing it to a {@link Parcel}), the remote process
+ * receives a read-only view of the cursor window. Typically the cursor window
+ * will be allocated by the producer, filled with data, and then sent to the
+ * consumer for reading.
+ * </p>
*/
public class CursorWindow extends SQLiteClosable implements Parcelable {
private static final String STATS_TAG = "CursorWindowStats";
@@ -39,538 +48,648 @@
Resources.getSystem().getInteger(
com.android.internal.R.integer.config_cursorWindowSize) * 1024;
- /** The pointer to the native window class. set by the native methods in
- * android_database_CursorWindow.cpp
+ /**
+ * The native CursorWindow object pointer. (FOR INTERNAL USE ONLY)
+ * @hide
*/
- private int nWindow;
+ public int mWindowPtr;
private int mStartPos;
+ private final CloseGuard mCloseGuard = CloseGuard.get();
+
+ private static native int nativeCreate(String name,
+ int cursorWindowSize, boolean localOnly);
+ private static native int nativeCreateFromParcel(Parcel parcel);
+ private static native void nativeDispose(int windowPtr);
+ private static native void nativeWriteToParcel(int windowPtr, Parcel parcel);
+
+ private static native void nativeClear(int windowPtr);
+
+ private static native int nativeGetNumRows(int windowPtr);
+ private static native boolean nativeSetNumColumns(int windowPtr, int columnNum);
+ private static native boolean nativeAllocRow(int windowPtr);
+ private static native void nativeFreeLastRow(int windowPtr);
+
+ private static native int nativeGetType(int windowPtr, int row, int column);
+ private static native byte[] nativeGetBlob(int windowPtr, int row, int column);
+ private static native String nativeGetString(int windowPtr, int row, int column);
+ private static native long nativeGetLong(int windowPtr, int row, int column);
+ private static native double nativeGetDouble(int windowPtr, int row, int column);
+ private static native void nativeCopyStringToBuffer(int windowPtr, int row, int column,
+ CharArrayBuffer buffer);
+
+ private static native boolean nativePutBlob(int windowPtr, byte[] value, int row, int column);
+ private static native boolean nativePutString(int windowPtr, String value, int row, int column);
+ private static native boolean nativePutLong(int windowPtr, long value, int row, int column);
+ private static native boolean nativePutDouble(int windowPtr, double value, int row, int column);
+ private static native boolean nativePutNull(int windowPtr, int row, int column);
+
/**
- * Creates a new empty window.
+ * Creates a new empty cursor window and gives it a name.
+ * <p>
+ * The cursor initially has no rows or columns. Call {@link #setNumColumns(int)} to
+ * set the number of columns before adding any rows to the cursor.
+ * </p>
*
- * @param localWindow true if this window will be used in this process only
+ * @param name The name of the cursor window, or null if none.
+ * @param localWindow True if this window will be used in this process only,
+ * false if it might be sent to another processes.
+ *
+ * @hide
*/
- public CursorWindow(boolean localWindow) {
+ public CursorWindow(String name, boolean localWindow) {
mStartPos = 0;
- int rslt = native_init(sCursorWindowSize, localWindow);
- printDebugMsgIfError(rslt);
- recordNewWindow(Binder.getCallingPid(), nWindow);
+ mWindowPtr = nativeCreate(name, sCursorWindowSize, localWindow);
+ if (mWindowPtr == 0) {
+ throw new CursorWindowAllocationException("Cursor window allocation of " +
+ (sCursorWindowSize / 1024) + " kb failed. " + printStats());
+ }
+ mCloseGuard.open("close");
+ recordNewWindow(Binder.getCallingPid(), mWindowPtr);
}
- private void printDebugMsgIfError(int rslt) {
- if (rslt > 0) {
- // cursor window allocation failed. either low memory or too many cursors being open.
- // print info to help in debugging this.
- throw new CursorWindowAllocationException("Cursor Window allocation of " +
- sCursorWindowSize/1024 + " kb failed. " + printStats());
+ /**
+ * Creates a new empty cursor window.
+ * <p>
+ * The cursor initially has no rows or columns. Call {@link #setNumColumns(int)} to
+ * set the number of columns before adding any rows to the cursor.
+ * </p>
+ *
+ * @param localWindow True if this window will be used in this process only,
+ * false if it might be sent to another processes.
+ */
+ public CursorWindow(boolean localWindow) {
+ this(null, localWindow);
+ }
+
+ private CursorWindow(Parcel source) {
+ mStartPos = source.readInt();
+ mWindowPtr = nativeCreateFromParcel(source);
+ if (mWindowPtr == 0) {
+ throw new CursorWindowAllocationException("Cursor window could not be "
+ + "created from binder.");
+ }
+ mCloseGuard.open("close");
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ try {
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+ dispose();
+ } finally {
+ super.finalize();
+ }
+ }
+
+ private void dispose() {
+ if (mCloseGuard != null) {
+ mCloseGuard.close();
+ }
+ if (mWindowPtr != 0) {
+ recordClosingOfWindow(mWindowPtr);
+ nativeDispose(mWindowPtr);
+ mWindowPtr = 0;
}
}
/**
- * Returns the starting position of this window within the entire
- * Cursor's result set.
+ * Closes the cursor window and frees its underlying resources when all other
+ * remaining references have been released.
+ */
+ public void close() {
+ releaseReference();
+ }
+
+ /**
+ * Clears out the existing contents of the window, making it safe to reuse
+ * for new data.
+ * <p>
+ * The start position ({@link #getStartPosition()}), number of rows ({@link #getNumRows()}),
+ * and number of columns in the cursor are all reset to zero.
+ * </p>
+ */
+ public void clear() {
+ acquireReference();
+ try {
+ mStartPos = 0;
+ nativeClear(mWindowPtr);
+ } finally {
+ releaseReference();
+ }
+ }
+
+ /**
+ * Gets the start position of this cursor window.
+ * <p>
+ * The start position is the zero-based index of the first row that this window contains
+ * relative to the entire result set of the {@link Cursor}.
+ * </p>
*
- * @return the starting position of this window within the entire
- * Cursor's result set.
+ * @return The zero-based start position.
*/
public int getStartPosition() {
return mStartPos;
}
/**
- * Set the start position of cursor window
- * @param pos
+ * Sets the start position of this cursor window.
+ * <p>
+ * The start position is the zero-based index of the first row that this window contains
+ * relative to the entire result set of the {@link Cursor}.
+ * </p>
+ *
+ * @param pos The new zero-based start position.
*/
public void setStartPosition(int pos) {
mStartPos = pos;
- }
-
+ }
+
/**
- * Returns the number of rows in this window.
- *
- * @return the number of rows in this window.
+ * Gets the number of rows in this window.
+ *
+ * @return The number of rows in this cursor window.
*/
public int getNumRows() {
acquireReference();
try {
- return getNumRows_native();
+ return nativeGetNumRows(mWindowPtr);
} finally {
releaseReference();
}
}
-
- private native int getNumRows_native();
+
/**
- * Set number of Columns
- * @param columnNum
- * @return true if success
+ * Sets the number of columns in this window.
+ * <p>
+ * This method must be called before any rows are added to the window, otherwise
+ * it will fail to set the number of columns if it differs from the current number
+ * of columns.
+ * </p>
+ *
+ * @param columnNum The new number of columns.
+ * @return True if successful.
*/
public boolean setNumColumns(int columnNum) {
acquireReference();
try {
- return setNumColumns_native(columnNum);
+ return nativeSetNumColumns(mWindowPtr, columnNum);
} finally {
releaseReference();
}
}
-
- private native boolean setNumColumns_native(int columnNum);
-
+
/**
- * Allocate a row in cursor window
- * @return false if cursor window is out of memory
+ * Allocates a new row at the end of this cursor window.
+ *
+ * @return True if successful, false if the cursor window is out of memory.
*/
public boolean allocRow(){
acquireReference();
try {
- return allocRow_native();
+ return nativeAllocRow(mWindowPtr);
} finally {
releaseReference();
}
}
-
- private native boolean allocRow_native();
-
+
/**
- * Free the last row
+ * Frees the last row in this cursor window.
*/
public void freeLastRow(){
acquireReference();
try {
- freeLastRow_native();
+ nativeFreeLastRow(mWindowPtr);
} finally {
releaseReference();
}
}
-
- private native void freeLastRow_native();
/**
- * copy byte array to cursor window
- * @param value
- * @param row
- * @param col
- * @return false if fail to copy
- */
- public boolean putBlob(byte[] value, int row, int col) {
- acquireReference();
- try {
- return putBlob_native(value, row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- private native boolean putBlob_native(byte[] value, int row, int col);
-
- /**
- * Copy String to cursor window
- * @param value
- * @param row
- * @param col
- * @return false if fail to copy
- */
- public boolean putString(String value, int row, int col) {
- acquireReference();
- try {
- return putString_native(value, row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- private native boolean putString_native(String value, int row, int col);
-
- /**
- * Copy integer to cursor window
- * @param value
- * @param row
- * @param col
- * @return false if fail to copy
- */
- public boolean putLong(long value, int row, int col) {
- acquireReference();
- try {
- return putLong_native(value, row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- private native boolean putLong_native(long value, int row, int col);
-
-
- /**
- * Copy double to cursor window
- * @param value
- * @param row
- * @param col
- * @return false if fail to copy
- */
- public boolean putDouble(double value, int row, int col) {
- acquireReference();
- try {
- return putDouble_native(value, row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- private native boolean putDouble_native(double value, int row, int col);
-
- /**
- * Set the [row, col] value to NULL
- * @param row
- * @param col
- * @return false if fail to copy
- */
- public boolean putNull(int row, int col) {
- acquireReference();
- try {
- return putNull_native(row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- private native boolean putNull_native(int row, int col);
-
-
- /**
- * Returns {@code true} if given field is {@code NULL}.
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return {@code true} if given field is {@code NULL}
- * @deprecated use {@link #getType(int, int)} instead
+ * Returns true if the field at the specified row and column index
+ * has type {@link Cursor#FIELD_TYPE_NULL}.
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if the field has type {@link Cursor#FIELD_TYPE_NULL}.
+ * @deprecated Use {@link #getType(int, int)} instead.
*/
@Deprecated
- public boolean isNull(int row, int col) {
- return getType(row, col) == Cursor.FIELD_TYPE_NULL;
- }
-
- /**
- * Returns a byte array for the given field.
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return a String value for the given field
- */
- public byte[] getBlob(int row, int col) {
- acquireReference();
- try {
- return getBlob_native(row - mStartPos, col);
- } finally {
- releaseReference();
- }
+ public boolean isNull(int row, int column) {
+ return getType(row, column) == Cursor.FIELD_TYPE_NULL;
}
/**
- * Returns the value at (<code>row</code>, <code>col</code>) as a <code>byte</code> array.
+ * Returns true if the field at the specified row and column index
+ * has type {@link Cursor#FIELD_TYPE_BLOB} or {@link Cursor#FIELD_TYPE_NULL}.
*
- * <p>If the value is null, then <code>null</code> is returned. If the
- * type of column <code>col</code> is a string type, then the result
- * is the array of bytes that make up the internal representation of the
- * string value. If the type of column <code>col</code> is integral or floating-point,
- * then an {@link SQLiteException} is thrown.
- */
- private native byte[] getBlob_native(int row, int col);
-
- /**
- * Returns data type of the given column's value.
- *<p>
- * Returned column types are
- * <ul>
- * <li>{@link Cursor#FIELD_TYPE_NULL}</li>
- * <li>{@link Cursor#FIELD_TYPE_INTEGER}</li>
- * <li>{@link Cursor#FIELD_TYPE_FLOAT}</li>
- * <li>{@link Cursor#FIELD_TYPE_STRING}</li>
- * <li>{@link Cursor#FIELD_TYPE_BLOB}</li>
- *</ul>
- *</p>
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return the value type
- */
- public int getType(int row, int col) {
- acquireReference();
- try {
- return getType_native(row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- /**
- * Checks if a field contains either a blob or is null.
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return {@code true} if given field is {@code NULL} or a blob
- * @deprecated use {@link #getType(int, int)} instead
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if the field has type {@link Cursor#FIELD_TYPE_BLOB} or
+ * {@link Cursor#FIELD_TYPE_NULL}.
+ * @deprecated Use {@link #getType(int, int)} instead.
*/
@Deprecated
- public boolean isBlob(int row, int col) {
- int type = getType(row, col);
+ public boolean isBlob(int row, int column) {
+ int type = getType(row, column);
return type == Cursor.FIELD_TYPE_BLOB || type == Cursor.FIELD_TYPE_NULL;
}
/**
- * Checks if a field contains a long
+ * Returns true if the field at the specified row and column index
+ * has type {@link Cursor#FIELD_TYPE_INTEGER}.
*
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return {@code true} if given field is a long
- * @deprecated use {@link #getType(int, int)} instead
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if the field has type {@link Cursor#FIELD_TYPE_INTEGER}.
+ * @deprecated Use {@link #getType(int, int)} instead.
*/
@Deprecated
- public boolean isLong(int row, int col) {
- return getType(row, col) == Cursor.FIELD_TYPE_INTEGER;
+ public boolean isLong(int row, int column) {
+ return getType(row, column) == Cursor.FIELD_TYPE_INTEGER;
}
/**
- * Checks if a field contains a float.
+ * Returns true if the field at the specified row and column index
+ * has type {@link Cursor#FIELD_TYPE_FLOAT}.
*
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return {@code true} if given field is a float
- * @deprecated use {@link #getType(int, int)} instead
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if the field has type {@link Cursor#FIELD_TYPE_FLOAT}.
+ * @deprecated Use {@link #getType(int, int)} instead.
*/
@Deprecated
- public boolean isFloat(int row, int col) {
- return getType(row, col) == Cursor.FIELD_TYPE_FLOAT;
+ public boolean isFloat(int row, int column) {
+ return getType(row, column) == Cursor.FIELD_TYPE_FLOAT;
}
/**
- * Checks if a field contains either a String or is null.
+ * Returns true if the field at the specified row and column index
+ * has type {@link Cursor#FIELD_TYPE_STRING} or {@link Cursor#FIELD_TYPE_NULL}.
*
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return {@code true} if given field is {@code NULL} or a String
- * @deprecated use {@link #getType(int, int)} instead
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if the field has type {@link Cursor#FIELD_TYPE_STRING}
+ * or {@link Cursor#FIELD_TYPE_NULL}.
+ * @deprecated Use {@link #getType(int, int)} instead.
*/
@Deprecated
- public boolean isString(int row, int col) {
- int type = getType(row, col);
+ public boolean isString(int row, int column) {
+ int type = getType(row, column);
return type == Cursor.FIELD_TYPE_STRING || type == Cursor.FIELD_TYPE_NULL;
}
- private native int getType_native(int row, int col);
-
/**
- * Returns a String for the given field.
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return a String value for the given field
+ * Returns the type of the field at the specified row and column index.
+ * <p>
+ * The returned field types are:
+ * <ul>
+ * <li>{@link Cursor#FIELD_TYPE_NULL}</li>
+ * <li>{@link Cursor#FIELD_TYPE_INTEGER}</li>
+ * <li>{@link Cursor#FIELD_TYPE_FLOAT}</li>
+ * <li>{@link Cursor#FIELD_TYPE_STRING}</li>
+ * <li>{@link Cursor#FIELD_TYPE_BLOB}</li>
+ * </ul>
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The field type.
*/
- public String getString(int row, int col) {
+ public int getType(int row, int column) {
acquireReference();
try {
- return getString_native(row - mStartPos, col);
+ return nativeGetType(mWindowPtr, row - mStartPos, column);
} finally {
releaseReference();
}
}
-
- /**
- * Returns the value at (<code>row</code>, <code>col</code>) as a <code>String</code>.
- *
- * <p>If the value is null, then <code>null</code> is returned. If the
- * type of column <code>col</code> is integral, then the result is the string
- * that is obtained by formatting the integer value with the <code>printf</code>
- * family of functions using format specifier <code>%lld</code>. If the
- * type of column <code>col</code> is floating-point, then the result is the string
- * that is obtained by formatting the floating-point value with the
- * <code>printf</code> family of functions using format specifier <code>%g</code>.
- * If the type of column <code>col</code> is a blob type, then an
- * {@link SQLiteException} is thrown.
- */
- private native String getString_native(int row, int col);
/**
- * copy the text for the given field in the provided char array.
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @param buffer the CharArrayBuffer to copy the text into,
- * If the requested string is larger than the buffer
- * a new char buffer will be created to hold the string. and assigne to
- * CharArrayBuffer.data
+ * Gets the value of the field at the specified row and column index as a byte array.
+ * <p>
+ * The result is determined as follows:
+ * <ul>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the result
+ * is <code>null</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then the result
+ * is the blob value.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the result
+ * is the array of bytes that make up the internal representation of the
+ * string value.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER} or
+ * {@link Cursor#FIELD_TYPE_FLOAT}, then a {@link SQLiteException} is thrown.</li>
+ * </ul>
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as a byte array.
+ */
+ public byte[] getBlob(int row, int column) {
+ acquireReference();
+ try {
+ return nativeGetBlob(mWindowPtr, row - mStartPos, column);
+ } finally {
+ releaseReference();
+ }
+ }
+
+ /**
+ * Gets the value of the field at the specified row and column index as a string.
+ * <p>
+ * The result is determined as follows:
+ * <ul>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the result
+ * is <code>null</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the result
+ * is the string value.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER}, then the result
+ * is a string representation of the integer in decimal, obtained by formatting the
+ * value with the <code>printf</code> family of functions using
+ * format specifier <code>%lld</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_FLOAT}, then the result
+ * is a string representation of the floating-point value in decimal, obtained by
+ * formatting the value with the <code>printf</code> family of functions using
+ * format specifier <code>%g</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then a
+ * {@link SQLiteException} is thrown.</li>
+ * </ul>
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as a string.
+ */
+ public String getString(int row, int column) {
+ acquireReference();
+ try {
+ return nativeGetString(mWindowPtr, row - mStartPos, column);
+ } finally {
+ releaseReference();
+ }
+ }
+
+ /**
+ * Copies the text of the field at the specified row and column index into
+ * a {@link CharArrayBuffer}.
+ * <p>
+ * The buffer is populated as follows:
+ * <ul>
+ * <li>If the buffer is too small for the value to be copied, then it is
+ * automatically resized.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the buffer
+ * is set to an empty string.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the buffer
+ * is set to the contents of the string.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER}, then the buffer
+ * is set to a string representation of the integer in decimal, obtained by formatting the
+ * value with the <code>printf</code> family of functions using
+ * format specifier <code>%lld</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_FLOAT}, then the buffer is
+ * set to a string representation of the floating-point value in decimal, obtained by
+ * formatting the value with the <code>printf</code> family of functions using
+ * format specifier <code>%g</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then a
+ * {@link SQLiteException} is thrown.</li>
+ * </ul>
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @param buffer The {@link CharArrayBuffer} to hold the string. It is automatically
+ * resized if the requested string is larger than the buffer's current capacity.
*/
- public void copyStringToBuffer(int row, int col, CharArrayBuffer buffer) {
+ public void copyStringToBuffer(int row, int column, CharArrayBuffer buffer) {
if (buffer == null) {
throw new IllegalArgumentException("CharArrayBuffer should not be null");
}
- if (buffer.data == null) {
- buffer.data = new char[64];
- }
acquireReference();
try {
- char[] newbuf = copyStringToBuffer_native(
- row - mStartPos, col, buffer.data.length, buffer);
- if (newbuf != null) {
- buffer.data = newbuf;
- }
+ nativeCopyStringToBuffer(mWindowPtr, row, column, buffer);
} finally {
releaseReference();
}
}
-
- private native char[] copyStringToBuffer_native(
- int row, int col, int bufferSize, CharArrayBuffer buffer);
-
+
/**
- * Returns a long for the given field.
- * row is 0 based
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return a long value for the given field
- */
- public long getLong(int row, int col) {
- acquireReference();
- try {
- return getLong_native(row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- /**
- * Returns the value at (<code>row</code>, <code>col</code>) as a <code>long</code>.
+ * Gets the value of the field at the specified row and column index as a <code>long</code>.
+ * <p>
+ * The result is determined as follows:
+ * <ul>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the result
+ * is <code>0L</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the result
+ * is the value obtained by parsing the string value with <code>strtoll</code>.
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER}, then the result
+ * is the <code>long</code> value.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_FLOAT}, then the result
+ * is the floating-point value converted to a <code>long</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then a
+ * {@link SQLiteException} is thrown.</li>
+ * </ul>
+ * </p>
*
- * <p>If the value is null, then <code>0L</code> is returned. If the
- * type of column <code>col</code> is a string type, then the result
- * is the <code>long</code> that is obtained by parsing the string value with
- * <code>strtoll</code>. If the type of column <code>col</code> is
- * floating-point, then the result is the floating-point value casted to a <code>long</code>.
- * If the type of column <code>col</code> is a blob type, then an
- * {@link SQLiteException} is thrown.
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as a <code>long</code>.
*/
- private native long getLong_native(int row, int col);
-
- /**
- * Returns a double for the given field.
- * row is 0 based
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return a double value for the given field
- */
- public double getDouble(int row, int col) {
+ public long getLong(int row, int column) {
acquireReference();
try {
- return getDouble_native(row - mStartPos, col);
+ return nativeGetLong(mWindowPtr, row - mStartPos, column);
} finally {
releaseReference();
}
}
-
+
/**
- * Returns the value at (<code>row</code>, <code>col</code>) as a <code>double</code>.
+ * Gets the value of the field at the specified row and column index as a
+ * <code>double</code>.
+ * <p>
+ * The result is determined as follows:
+ * <ul>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the result
+ * is <code>0.0</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the result
+ * is the value obtained by parsing the string value with <code>strtod</code>.
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER}, then the result
+ * is the integer value converted to a <code>double</code>.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_FLOAT}, then the result
+ * is the <code>double</code> value.</li>
+ * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then a
+ * {@link SQLiteException} is thrown.</li>
+ * </ul>
+ * </p>
*
- * <p>If the value is null, then <code>0.0</code> is returned. If the
- * type of column <code>col</code> is a string type, then the result
- * is the <code>double</code> that is obtained by parsing the string value with
- * <code>strtod</code>. If the type of column <code>col</code> is
- * integral, then the result is the integer value casted to a <code>double</code>.
- * If the type of column <code>col</code> is a blob type, then an
- * {@link SQLiteException} is thrown.
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as a <code>double</code>.
*/
- private native double getDouble_native(int row, int col);
-
- /**
- * Returns a short for the given field.
- * row is 0 based
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return a short value for the given field
- */
- public short getShort(int row, int col) {
+ public double getDouble(int row, int column) {
acquireReference();
try {
- return (short) getLong_native(row - mStartPos, col);
+ return nativeGetDouble(mWindowPtr, row - mStartPos, column);
} finally {
releaseReference();
}
}
/**
- * Returns an int for the given field.
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return an int value for the given field
+ * Gets the value of the field at the specified row and column index as a
+ * <code>short</code>.
+ * <p>
+ * The result is determined by invoking {@link #getLong} and converting the
+ * result to <code>short</code>.
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as a <code>short</code>.
*/
- public int getInt(int row, int col) {
- acquireReference();
- try {
- return (int) getLong_native(row - mStartPos, col);
- } finally {
- releaseReference();
- }
+ public short getShort(int row, int column) {
+ return (short) getLong(row, column);
}
-
+
/**
- * Returns a float for the given field.
- * row is 0 based
- *
- * @param row the row to read from, row - getStartPosition() being the actual row in the window
- * @param col the column to read from
- * @return a float value for the given field
+ * Gets the value of the field at the specified row and column index as an
+ * <code>int</code>.
+ * <p>
+ * The result is determined by invoking {@link #getLong} and converting the
+ * result to <code>int</code>.
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as an <code>int</code>.
*/
- public float getFloat(int row, int col) {
+ public int getInt(int row, int column) {
+ return (int) getLong(row, column);
+ }
+
+ /**
+ * Gets the value of the field at the specified row and column index as a
+ * <code>float</code>.
+ * <p>
+ * The result is determined by invoking {@link #getDouble} and converting the
+ * result to <code>float</code>.
+ * </p>
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return The value of the field as an <code>float</code>.
+ */
+ public float getFloat(int row, int column) {
+ return (float) getDouble(row, column);
+ }
+
+ /**
+ * Copies a byte array into the field at the specified row and column index.
+ *
+ * @param value The value to store.
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if successful.
+ */
+ public boolean putBlob(byte[] value, int row, int column) {
acquireReference();
try {
- return (float) getDouble_native(row - mStartPos, col);
- } finally {
- releaseReference();
- }
- }
-
- /**
- * Clears out the existing contents of the window, making it safe to reuse
- * for new data. Note that the number of columns in the window may NOT
- * change across a call to clear().
- */
- public void clear() {
- acquireReference();
- try {
- mStartPos = 0;
- native_clear();
+ return nativePutBlob(mWindowPtr, value, row - mStartPos, column);
} finally {
releaseReference();
}
}
- /** Clears out the native side of things */
- private native void native_clear();
+ /**
+ * Copies a string into the field at the specified row and column index.
+ *
+ * @param value The value to store.
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if successful.
+ */
+ public boolean putString(String value, int row, int column) {
+ acquireReference();
+ try {
+ return nativePutString(mWindowPtr, value, row - mStartPos, column);
+ } finally {
+ releaseReference();
+ }
+ }
/**
- * Cleans up the native resources associated with the window.
+ * Puts a long integer into the field at the specified row and column index.
+ *
+ * @param value The value to store.
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if successful.
*/
- public void close() {
- releaseReference();
- }
-
- private native void close_native();
-
- @Override
- protected void finalize() {
- if (nWindow == 0) {
- return;
+ public boolean putLong(long value, int row, int column) {
+ acquireReference();
+ try {
+ return nativePutLong(mWindowPtr, value, row - mStartPos, column);
+ } finally {
+ releaseReference();
}
- // due to bugs 3329504, 3502276, cursorwindow sometimes is closed in fialize()
- // don't print any warning saying "don't release cursor in finzlize"
- // because it is a bug in framework code - NOT an app bug.
- recordClosingOfWindow(nWindow);
- close_native();
}
-
+
+ /**
+ * Puts a double-precision floating point value into the field at the
+ * specified row and column index.
+ *
+ * @param value The value to store.
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if successful.
+ */
+ public boolean putDouble(double value, int row, int column) {
+ acquireReference();
+ try {
+ return nativePutDouble(mWindowPtr, value, row - mStartPos, column);
+ } finally {
+ releaseReference();
+ }
+ }
+
+ /**
+ * Puts a null value into the field at the specified row and column index.
+ *
+ * @param row The zero-based row index, relative to the cursor window's
+ * start position ({@link #getStartPosition()}).
+ * @param column The zero-based column index.
+ * @return True if successful.
+ */
+ public boolean putNull(int row, int column) {
+ acquireReference();
+ try {
+ return nativePutNull(mWindowPtr, row - mStartPos, column);
+ } finally {
+ releaseReference();
+ }
+ }
+
public static final Parcelable.Creator<CursorWindow> CREATOR
= new Parcelable.Creator<CursorWindow>() {
public CursorWindow createFromParcel(Parcel source) {
@@ -591,30 +710,17 @@
}
public void writeToParcel(Parcel dest, int flags) {
- dest.writeStrongBinder(native_getBinder());
dest.writeInt(mStartPos);
+ nativeWriteToParcel(mWindowPtr, dest);
+
+ if ((flags & Parcelable.PARCELABLE_WRITE_RETURN_VALUE) != 0) {
+ releaseReference();
+ }
}
- private CursorWindow(Parcel source) {
- IBinder nativeBinder = source.readStrongBinder();
- mStartPos = source.readInt();
- int rslt = native_init(nativeBinder);
- printDebugMsgIfError(rslt);
- }
-
- /** Get the binder for the native side of the window */
- private native IBinder native_getBinder();
-
- /** Does the native side initialization for an empty window */
- private native int native_init(int cursorWindowSize, boolean localOnly);
-
- /** Does the native side initialization with an existing binder from another process */
- private native int native_init(IBinder nativeBinder);
-
@Override
protected void onAllReferencesReleased() {
- recordClosingOfWindow(nWindow);
- close_native();
+ dispose();
}
private static final SparseIntArray sWindowToPidMap = new SparseIntArray();
@@ -637,6 +743,7 @@
sWindowToPidMap.delete(window);
}
}
+
private String printStats() {
StringBuilder buff = new StringBuilder();
int myPid = Process.myPid();
diff --git a/core/java/android/database/CursorWindowAllocationException.java b/core/java/android/database/CursorWindowAllocationException.java
index ba7df68..2e3227d 100644
--- a/core/java/android/database/CursorWindowAllocationException.java
+++ b/core/java/android/database/CursorWindowAllocationException.java
@@ -18,17 +18,12 @@
/**
* This exception is thrown when a CursorWindow couldn't be allocated,
- * most probably due to memory not being available
+ * most probably due to memory not being available.
+ *
+ * @hide
*/
-class CursorWindowAllocationException extends java.lang.RuntimeException
-{
- public CursorWindowAllocationException()
- {
- super();
- }
-
- public CursorWindowAllocationException(String description)
- {
+public class CursorWindowAllocationException extends RuntimeException {
+ public CursorWindowAllocationException(String description) {
super(description);
}
}
diff --git a/core/java/android/database/CursorWrapper.java b/core/java/android/database/CursorWrapper.java
index 3c3bd43..320733e 100644
--- a/core/java/android/database/CursorWrapper.java
+++ b/core/java/android/database/CursorWrapper.java
@@ -33,7 +33,9 @@
}
/**
- * @return the wrapped cursor
+ * Gets the underlying cursor that is wrapped by this instance.
+ *
+ * @return The wrapped cursor.
*/
public Cursor getWrappedCursor() {
return mCursor;
diff --git a/core/java/android/database/IBulkCursor.java b/core/java/android/database/IBulkCursor.java
index 244c88f..7c96797 100644
--- a/core/java/android/database/IBulkCursor.java
+++ b/core/java/android/database/IBulkCursor.java
@@ -56,7 +56,7 @@
public void close() throws RemoteException;
- public int requery(IContentObserver observer, CursorWindow window) throws RemoteException;
+ public int requery(IContentObserver observer) throws RemoteException;
boolean getWantsAllOnMoveCalls() throws RemoteException;
diff --git a/core/java/android/database/sqlite/SQLiteCursor.java b/core/java/android/database/sqlite/SQLiteCursor.java
index ea9346d..a1c36e2 100644
--- a/core/java/android/database/sqlite/SQLiteCursor.java
+++ b/core/java/android/database/sqlite/SQLiteCursor.java
@@ -18,16 +18,11 @@
import android.database.AbstractWindowedCursor;
import android.database.CursorWindow;
-import android.database.DataSetObserver;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Process;
import android.os.StrictMode;
import android.util.Log;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.locks.ReentrantLock;
/**
* A Cursor implementation that exposes results from a query on a
@@ -60,140 +55,8 @@
/** Used to find out where a cursor was allocated in case it never got released. */
private final Throwable mStackTrace;
-
- /**
- * mMaxRead is the max items that each cursor window reads
- * default to a very high value
- */
- private int mMaxRead = Integer.MAX_VALUE;
- private int mInitialRead = Integer.MAX_VALUE;
- private int mCursorState = 0;
- private ReentrantLock mLock = null;
- private boolean mPendingData = false;
/**
- * support for a cursor variant that doesn't always read all results
- * initialRead is the initial number of items that cursor window reads
- * if query contains more than this number of items, a thread will be
- * created and handle the left over items so that caller can show
- * results as soon as possible
- * @param initialRead initial number of items that cursor read
- * @param maxRead leftover items read at maxRead items per time
- * @hide
- */
- public void setLoadStyle(int initialRead, int maxRead) {
- mMaxRead = maxRead;
- mInitialRead = initialRead;
- mLock = new ReentrantLock(true);
- }
-
- private void queryThreadLock() {
- if (mLock != null) {
- mLock.lock();
- }
- }
-
- private void queryThreadUnlock() {
- if (mLock != null) {
- mLock.unlock();
- }
- }
-
-
- /**
- * @hide
- */
- final private class QueryThread implements Runnable {
- private final int mThreadState;
- QueryThread(int version) {
- mThreadState = version;
- }
- private void sendMessage() {
- if (mNotificationHandler != null) {
- mNotificationHandler.sendEmptyMessage(1);
- mPendingData = false;
- } else {
- mPendingData = true;
- }
-
- }
- public void run() {
- // use cached mWindow, to avoid get null mWindow
- CursorWindow cw = mWindow;
- Process.setThreadPriority(Process.myTid(), Process.THREAD_PRIORITY_BACKGROUND);
- // the cursor's state doesn't change
- while (true) {
- mLock.lock();
- try {
- if (mCursorState != mThreadState) {
- break;
- }
-
- int count = getQuery().fillWindow(cw, mMaxRead, mCount);
- // return -1 means there is still more data to be retrieved from the resultset
- if (count != 0) {
- if (count == NO_COUNT){
- mCount += mMaxRead;
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "received -1 from native_fill_window. read " +
- mCount + " rows so far");
- }
- sendMessage();
- } else {
- mCount += count;
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "received all data from native_fill_window. read " +
- mCount + " rows.");
- }
- sendMessage();
- break;
- }
- } else {
- break;
- }
- } catch (Exception e) {
- // end the tread when the cursor is close
- break;
- } finally {
- mLock.unlock();
- }
- }
- }
- }
-
- /**
- * @hide
- */
- protected class MainThreadNotificationHandler extends Handler {
- public void handleMessage(Message msg) {
- notifyDataSetChange();
- }
- }
-
- /**
- * @hide
- */
- protected MainThreadNotificationHandler mNotificationHandler;
-
- public void registerDataSetObserver(DataSetObserver observer) {
- super.registerDataSetObserver(observer);
- if ((Integer.MAX_VALUE != mMaxRead || Integer.MAX_VALUE != mInitialRead) &&
- mNotificationHandler == null) {
- queryThreadLock();
- try {
- mNotificationHandler = new MainThreadNotificationHandler();
- if (mPendingData) {
- notifyDataSetChange();
- mPendingData = false;
- }
- } finally {
- queryThreadUnlock();
- }
- }
-
- }
-
- /**
* Execute a query and provide access to its result set through a Cursor
* interface. For a query such as: {@code SELECT name, birth, phone FROM
* myTable WHERE ... LIMIT 1,20 ORDER BY...} the column names (name, birth,
@@ -226,8 +89,6 @@
* @param query the {@link SQLiteQuery} object associated with this cursor object.
*/
public SQLiteCursor(SQLiteCursorDriver driver, String editTable, SQLiteQuery query) {
- // The AbstractCursor constructor needs to do some setup.
- super();
if (query == null) {
throw new IllegalArgumentException("query object cannot be null");
}
@@ -293,36 +154,18 @@
return mCount;
}
- private void fillWindow (int startPos) {
- if (mWindow == null) {
- // If there isn't a window set already it will only be accessed locally
- mWindow = new CursorWindow(true /* the window is local only */);
- } else {
- mCursorState++;
- queryThreadLock();
- try {
- mWindow.clear();
- } finally {
- queryThreadUnlock();
- }
- }
+ private void fillWindow(int startPos) {
+ clearOrCreateLocalWindow(getDatabase().getPath());
mWindow.setStartPosition(startPos);
- int count = getQuery().fillWindow(mWindow, mInitialRead, 0);
- // return -1 means there is still more data to be retrieved from the resultset
- if (count == NO_COUNT){
- mCount = startPos + mInitialRead;
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "received -1 from native_fill_window. read " + mCount + " rows so far");
- }
- Thread t = new Thread(new QueryThread(mCursorState), "query thread");
- t.start();
- } else if (startPos == 0) { // native_fill_window returns count(*) only for startPos = 0
+ int count = getQuery().fillWindow(mWindow);
+ if (startPos == 0) { // fillWindow returns count(*) only for startPos = 0
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "received count(*) from native_fill_window: " + count);
}
mCount = count;
} else if (mCount <= 0) {
- throw new IllegalStateException("count should never be non-zero negative number");
+ throw new IllegalStateException("Row count should never be zero or negative "
+ + "when the start position is non-zero");
}
}
@@ -364,20 +207,9 @@
return mColumns;
}
- private void deactivateCommon() {
- if (false) Log.v(TAG, "<<< Releasing cursor " + this);
- mCursorState = 0;
- if (mWindow != null) {
- mWindow.close();
- mWindow = null;
- }
- if (false) Log.v("DatabaseWindow", "closing window in release()");
- }
-
@Override
public void deactivate() {
super.deactivate();
- deactivateCommon();
mDriver.cursorDeactivated();
}
@@ -385,7 +217,6 @@
public void close() {
super.close();
synchronized (this) {
- deactivateCommon();
mQuery.close();
mDriver.cursorClosed();
}
@@ -439,16 +270,12 @@
// This one will recreate the temp table, and get its count
mDriver.cursorRequeried(this);
mCount = NO_COUNT;
- mCursorState++;
- queryThreadLock();
try {
mQuery.requery();
} catch (IllegalStateException e) {
// for backwards compatibility, just return false
Log.w(TAG, "requery() failed " + e.getMessage(), e);
return false;
- } finally {
- queryThreadUnlock();
}
}
@@ -472,18 +299,9 @@
}
@Override
- public void setWindow(CursorWindow window) {
- if (mWindow != null) {
- mCursorState++;
- queryThreadLock();
- try {
- mWindow.close();
- } finally {
- queryThreadUnlock();
- }
- mCount = NO_COUNT;
- }
- mWindow = window;
+ public void setWindow(CursorWindow window) {
+ super.setWindow(window);
+ mCount = NO_COUNT;
}
/**
@@ -521,11 +339,4 @@
super.finalize();
}
}
-
- /**
- * this is only for testing purposes.
- */
- /* package */ int getMCount() {
- return mCount;
- }
}
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 93a6ad3..00d7ce8 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -66,6 +66,7 @@
*/
public class SQLiteDatabase extends SQLiteClosable {
private static final String TAG = "SQLiteDatabase";
+ private static final boolean ENABLE_DB_SAMPLE = false; // true to enable stats in event log
private static final int EVENT_DB_OPERATION = 52000;
private static final int EVENT_DB_CORRUPT = 75004;
@@ -440,7 +441,9 @@
}
}
if (sql != null) {
- logTimeStat(sql, timeStart, GET_LOCK_LOG_PREFIX);
+ if (ENABLE_DB_SAMPLE) {
+ logTimeStat(sql, timeStart, GET_LOCK_LOG_PREFIX);
+ }
}
}
private static class DatabaseReentrantLock extends ReentrantLock {
@@ -726,7 +729,9 @@
}
}
// log the transaction time to the Eventlog.
- logTimeStat(getLastSqlStatement(), mTransStartTime, COMMIT_SQL);
+ if (ENABLE_DB_SAMPLE) {
+ logTimeStat(getLastSqlStatement(), mTransStartTime, COMMIT_SQL);
+ }
} else {
try {
execSQL("ROLLBACK;");
@@ -1593,32 +1598,6 @@
}
/**
- * Runs the provided SQL and returns a cursor over the result set.
- * The cursor will read an initial set of rows and the return to the caller.
- * It will continue to read in batches and send data changed notifications
- * when the later batches are ready.
- * @param sql the SQL query. The SQL string must not be ; terminated
- * @param selectionArgs You may include ?s in where clause in the query,
- * which will be replaced by the values from selectionArgs. The
- * values will be bound as Strings.
- * @param initialRead set the initial count of items to read from the cursor
- * @param maxRead set the count of items to read on each iteration after the first
- * @return A {@link Cursor} object, which is positioned before the first entry. Note that
- * {@link Cursor}s are not synchronized, see the documentation for more details.
- *
- * This work is incomplete and not fully tested or reviewed, so currently
- * hidden.
- * @hide
- */
- public Cursor rawQuery(String sql, String[] selectionArgs,
- int initialRead, int maxRead) {
- SQLiteCursor c = (SQLiteCursor)rawQueryWithFactory(
- null, sql, selectionArgs, null);
- c.setLoadStyle(initialRead, maxRead);
- return c;
- }
-
- /**
* Convenience method for inserting a row into the database.
*
* @param table the table to insert the row into
@@ -2036,7 +2015,9 @@
}
/* package */ void logTimeStat(String sql, long beginMillis) {
- logTimeStat(sql, beginMillis, null);
+ if (ENABLE_DB_SAMPLE) {
+ logTimeStat(sql, beginMillis, null);
+ }
}
private void logTimeStat(String sql, long beginMillis, String prefix) {
diff --git a/core/java/android/database/sqlite/SQLiteQuery.java b/core/java/android/database/sqlite/SQLiteQuery.java
index dc882d9..7db0914 100644
--- a/core/java/android/database/sqlite/SQLiteQuery.java
+++ b/core/java/android/database/sqlite/SQLiteQuery.java
@@ -30,6 +30,11 @@
public class SQLiteQuery extends SQLiteProgram {
private static final String TAG = "SQLiteQuery";
+ private static native int nativeFillWindow(int databasePtr, int statementPtr, int windowPtr,
+ int startPos, int offsetParam);
+ private static native int nativeColumnCount(int statementPtr);
+ private static native String nativeColumnName(int statementPtr, int columnIndex);
+
/** The index of the unbound OFFSET parameter */
private int mOffsetIndex = 0;
@@ -68,19 +73,15 @@
* @param window The window to fill into
* @return number of total rows in the query
*/
- /* package */ int fillWindow(CursorWindow window,
- int maxRead, int lastPos) {
+ /* package */ int fillWindow(CursorWindow window) {
mDatabase.lock(mSql);
long timeStart = SystemClock.uptimeMillis();
try {
acquireReference();
try {
window.acquireReference();
- // if the start pos is not equal to 0, then most likely window is
- // too small for the data set, loading by another thread
- // is not safe in this situation. the native code will ignore maxRead
- int numRows = native_fill_window(window, window.getStartPosition(),
- mOffsetIndex, maxRead, lastPos);
+ int numRows = nativeFillWindow(nHandle, nStatement, window.mWindowPtr,
+ window.getStartPosition(), mOffsetIndex);
mDatabase.logTimeStat(mSql, timeStart);
return numRows;
} catch (IllegalStateException e){
@@ -111,7 +112,7 @@
/* package */ int columnCountLocked() {
acquireReference();
try {
- return native_column_count();
+ return nativeColumnCount(nStatement);
} finally {
releaseReference();
}
@@ -127,17 +128,17 @@
/* package */ String columnNameLocked(int columnIndex) {
acquireReference();
try {
- return native_column_name(columnIndex);
+ return nativeColumnName(nStatement, columnIndex);
} finally {
releaseReference();
}
}
-
+
@Override
public String toString() {
return "SQLiteQuery: " + mSql;
}
-
+
@Override
public void close() {
super.close();
@@ -153,11 +154,4 @@
}
compileAndbindAllArgs();
}
-
- private final native int native_fill_window(CursorWindow window,
- int startPos, int offsetParam, int maxRead, int lastPos);
-
- private final native int native_column_count();
-
- private final native String native_column_name(int columnIndex);
}
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index e40de26..d338764 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -201,7 +201,7 @@
public static final int CAMERA_FACING_FRONT = 1;
/**
- * The direction that the camera faces to. It should be
+ * The direction that the camera faces. It should be
* CAMERA_FACING_BACK or CAMERA_FACING_FRONT.
*/
public int facing;
@@ -337,7 +337,7 @@
* Camera objects are locked by default unless {@link #unlock()} is
* called. Normally {@link #reconnect()} is used instead.
*
- * <p>Since API level 13, camera is automatically locked for applications in
+ * <p>Since API level 14, camera is automatically locked for applications in
* {@link android.media.MediaRecorder#start()}. Applications can use the
* camera (ex: zoom) after recording starts. There is no need to call this
* after recording starts or stops.
@@ -356,7 +356,7 @@
* which will re-acquire the lock and allow you to continue using the
* camera.
*
- * <p>Since API level 13, camera is automatically locked for applications in
+ * <p>Since API level 14, camera is automatically locked for applications in
* {@link android.media.MediaRecorder#start()}. Applications can use the
* camera (ex: zoom) after recording starts. There is no need to call this
* after recording starts or stops.
@@ -781,7 +781,7 @@
* @see android.hardware.Camera.Parameters#setAutoWhiteBalanceLock(boolean)
*/
void onAutoFocus(boolean success, Camera camera);
- };
+ }
/**
* Starts camera auto-focus and registers a callback function to run when
@@ -804,11 +804,17 @@
* {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}, flash may be
* fired during auto-focus, depending on the driver and camera hardware.<p>
*
- * Auto-exposure lock {@link android.hardware.Camera.Parameters#getAutoExposureLock()}
+ * <p>Auto-exposure lock {@link android.hardware.Camera.Parameters#getAutoExposureLock()}
* and auto-white balance locks {@link android.hardware.Camera.Parameters#getAutoWhiteBalanceLock()}
* do not change during and after autofocus. But auto-focus routine may stop
* auto-exposure and auto-white balance transiently during focusing.
*
+ * <p>Stopping preview with {@link #stopPreview()}, or triggering still
+ * image capture with {@link #takePicture(Camera.ShutterCallback,
+ * Camera.PictureCallback, Camera.PictureCallback)}, will not change the
+ * the focus position. Applications must call cancelAutoFocus to reset the
+ * focus.</p>
+ *
* @param cb the callback to run
* @see #cancelAutoFocus()
* @see android.hardware.Camera.Parameters#setAutoExposureLock(boolean)
@@ -1007,6 +1013,10 @@
* camera.setDisplayOrientation(result);
* }
* </pre>
+ *
+ * <p>Starting from API level 14, this method can be called when preview is
+ * active.
+ *
* @param degrees the angle that the picture will be rotated clockwise.
* Valid values are 0, 90, 180, and 270. The starting
* position is 0 (landscape).
@@ -1055,9 +1065,8 @@
/**
* Notify the listener of the detected faces in the preview frame.
*
- * @param faces the detected faces. The list is sorted by the score.
- * The highest score is the first element.
- * @param camera the Camera service object
+ * @param faces The detected faces in a list
+ * @param camera The {@link Camera} service object
*/
void onFaceDetection(Face[] faces, Camera camera);
}
@@ -1105,7 +1114,7 @@
/**
* Stops the face detection.
*
- * @see #startFaceDetection(int)
+ * @see #startFaceDetection()
*/
public final void stopFaceDetection() {
_stopFaceDetection();
@@ -1116,8 +1125,12 @@
private native final void _stopFaceDetection();
/**
- * The information of a face from camera face detection.
+ * Information about a face identified through camera face detection.
*
+ * <p>When face detection is used with a camera, the {@link FaceDetectionListener} returns a
+ * list of face objects for use in focusing and metering.</p>
+ *
+ * @see FaceDetectionListener
*/
public static class Face {
/**
@@ -1132,21 +1145,23 @@
* the field of view. For example, suppose the size of the viewfinder UI
* is 800x480. The rect passed from the driver is (-1000, -1000, 0, 0).
* The corresponding viewfinder rect should be (0, 0, 400, 240). The
- * width and height of the rect will not be 0 or negative.
+ * width and height of the rect will not be 0 or negative. The
+ * coordinates can be smaller than -1000 or bigger than 1000. But at
+ * least one vertex will be within (-1000, -1000) and (1000, 1000).
*
* <p>The direction is relative to the sensor orientation, that is, what
* the sensor sees. The direction is not affected by the rotation or
* mirroring of {@link #setDisplayOrientation(int)}.</p>
*
- * @see #startFaceDetection(int)
+ * @see #startFaceDetection()
*/
public Rect rect;
/**
- * The confidence level of the face. The range is 1 to 100. 100 is the
+ * The confidence level for the detection of the face. The range is 1 to 100. 100 is the
* highest confidence.
*
- * @see #startFaceDetection(int)
+ * @see #startFaceDetection()
*/
public int score;
@@ -1456,6 +1471,8 @@
private static final String KEY_MAX_NUM_DETECTED_FACES_SW = "max-num-detected-faces-sw";
private static final String KEY_RECORDING_HINT = "recording-hint";
private static final String KEY_VIDEO_SNAPSHOT_SUPPORTED = "video-snapshot-supported";
+ private static final String KEY_VIDEO_STABILIZATION = "video-stabilization";
+ private static final String KEY_VIDEO_STABILIZATION_SUPPORTED = "video-stabilization-supported";
// Parameter key suffix for supported values.
private static final String SUPPORTED_VALUES_SUFFIX = "-values";
@@ -1643,9 +1660,18 @@
* call {@link #takePicture(Camera.ShutterCallback,
* Camera.PictureCallback, Camera.PictureCallback)} in this mode but the
* subject may not be in focus. Auto focus starts when the parameter is
- * set. Applications should not call {@link
- * #autoFocus(AutoFocusCallback)} in this mode. To stop continuous
- * focus, applications should change the focus mode to other modes.
+ * set.
+ *
+ * <p>Since API level 14, applications can call {@link
+ * #autoFocus(AutoFocusCallback)} in this mode. The focus callback will
+ * immediately return with a boolean that indicates whether the focus is
+ * sharp or not. The focus position is locked after autoFocus call. If
+ * applications want to resume the continuous focus, cancelAutoFocus
+ * must be called. Restarting the preview will not resume the continuous
+ * autofocus. To stop continuous focus, applications should change the
+ * focus mode to other modes.
+ *
+ * @see #FOCUS_MODE_CONTINUOUS_PICTURE
*/
public static final String FOCUS_MODE_CONTINUOUS_VIDEO = "continuous-video";
@@ -1653,13 +1679,17 @@
* Continuous auto focus mode intended for taking pictures. The camera
* continuously tries to focus. The speed of focus change is more
* aggressive than {@link #FOCUS_MODE_CONTINUOUS_VIDEO}. Auto focus
- * starts when the parameter is set. If applications call {@link
- * #autoFocus(AutoFocusCallback)} in this mode, the focus callback will
- * immediately return with a boolean that indicates whether the focus is
- * sharp or not. The apps can then decide if they want to take a picture
- * immediately or to change the focus mode to auto, and run a full
- * autofocus cycle. To stop continuous focus, applications should change
- * the focus mode to other modes.
+ * starts when the parameter is set.
+ *
+ * <p>If applications call {@link #autoFocus(AutoFocusCallback)} in this
+ * mode, the focus callback will immediately return with a boolean that
+ * indicates whether the focus is sharp or not. The apps can then decide
+ * if they want to take a picture immediately or to change the focus
+ * mode to auto, and run a full autofocus cycle. The focus position is
+ * locked after autoFocus call. If applications want to resume the
+ * continuous focus, cancelAutoFocus must be called. Restarting the
+ * preview will not resume the continuous autofocus. To stop continuous
+ * focus, applications should change the focus mode to other modes.
*
* @see #FOCUS_MODE_CONTINUOUS_VIDEO
*/
@@ -2435,7 +2465,7 @@
*
* @param value new white balance.
* @see #getWhiteBalance()
- * @see #setAutoWhiteBalanceLock()
+ * @see #setAutoWhiteBalanceLock(boolean)
*/
public void setWhiteBalance(String value) {
set(KEY_WHITE_BALANCE, value);
@@ -3051,8 +3081,9 @@
* when using zoom.</p>
*
* <p>Focus area only has effect if the current focus mode is
- * {@link #FOCUS_MODE_AUTO}, {@link #FOCUS_MODE_MACRO}, or
- * {@link #FOCUS_MODE_CONTINUOUS_VIDEO}.</p>
+ * {@link #FOCUS_MODE_AUTO}, {@link #FOCUS_MODE_MACRO},
+ * {@link #FOCUS_MODE_CONTINUOUS_VIDEO}, or
+ * {@link #FOCUS_MODE_CONTINUOUS_PICTURE}.</p>
*
* @return a list of current focus areas
*/
@@ -3144,7 +3175,7 @@
* supported.
*
* @return the maximum number of detected face supported by the camera.
- * @see #startFaceDetection(int)
+ * @see #startFaceDetection()
*/
public int getMaxNumDetectedFaces() {
return getInt(KEY_MAX_NUM_DETECTED_FACES_HW, 0);
@@ -3200,6 +3231,59 @@
return TRUE.equals(str);
}
+ /**
+ * <p>Enables and disables video stabilization. Use
+ * {@link #isVideoStabilizationSupported} to determine if calling this
+ * method is valid.</p>
+ *
+ * <p>Video stabilization reduces the shaking due to the motion of the
+ * camera in both the preview stream and in recorded videos, including
+ * data received from the preview callback. It does not reduce motion
+ * blur in images captured with
+ * {@link Camera#takePicture takePicture}.</p>
+ *
+ * <p>Video stabilization can be enabled and disabled while preview or
+ * recording is active, but toggling it may cause a jump in the video
+ * stream that may be undesirable in a recorded video.</p>
+ *
+ * @param toggle Set to true to enable video stabilization, and false to
+ * disable video stabilization.
+ * @see #isVideoStabilizationSupported()
+ * @see #getVideoStabilization()
+ * @hide
+ */
+ public void setVideoStabilization(boolean toggle) {
+ set(KEY_VIDEO_STABILIZATION, toggle ? TRUE : FALSE);
+ }
+
+ /**
+ * Get the current state of video stabilization. See
+ * {@link #setVideoStabilization} for details of video stabilization.
+ *
+ * @return true if video stabilization is enabled
+ * @see #isVideoStabilizationSupported()
+ * @see #setVideoStabilization(boolean)
+ * @hide
+ */
+ public boolean getVideoStabilization() {
+ String str = get(KEY_VIDEO_STABILIZATION);
+ return TRUE.equals(str);
+ }
+
+ /**
+ * Returns true if video stabilization is supported. See
+ * {@link #setVideoStabilization} for details of video stabilization.
+ *
+ * @return true if video stabilization is supported
+ * @see #setVideoStabilization(boolean)
+ * @see #getVideoStabilization()
+ * @hide
+ */
+ public boolean isVideoStabilizationSupported() {
+ String str = get(KEY_VIDEO_STABILIZATION_SUPPORTED);
+ return TRUE.equals(str);
+ }
+
// Splits a comma delimited string to an ArrayList of String.
// Return null if the passing string is null or the size is 0.
private ArrayList<String> split(String str) {
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 1119c1e..5343e2a 100644
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -248,6 +248,8 @@
private AccessibilityManager mAccessibilityManager;
/** The audio manager for accessibility support */
private AudioManager mAudioManager;
+ /** Whether the requirement of a headset to hear passwords if accessibility is enabled is announced. */
+ private boolean mHeadsetRequiredToHearPasswordsAnnounced;
Handler mHandler = new Handler() {
@Override
@@ -852,13 +854,15 @@
Key oldKey = keys[oldKeyIndex];
oldKey.onReleased(mCurrentKeyIndex == NOT_A_KEY);
invalidateKey(oldKeyIndex);
- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT, oldKey.codes[0]);
+ sendAccessibilityEventForUnicodeCharacter(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT,
+ oldKey.codes[0]);
}
if (mCurrentKeyIndex != NOT_A_KEY && keys.length > mCurrentKeyIndex) {
Key newKey = keys[mCurrentKeyIndex];
newKey.onPressed();
invalidateKey(mCurrentKeyIndex);
- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER, newKey.codes[0]);
+ sendAccessibilityEventForUnicodeCharacter(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER,
+ newKey.codes[0]);
}
}
// If key changed and preview is on ...
@@ -958,13 +962,13 @@
mPreviewText.setVisibility(VISIBLE);
}
- private void sendAccessibilityEvent(int eventType, int code) {
+ private void sendAccessibilityEventForUnicodeCharacter(int eventType, int code) {
if (mAccessibilityManager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
onInitializeAccessibilityEvent(event);
+ String text = null;
// Add text only if headset is used to avoid leaking passwords.
if (mAudioManager.isBluetoothA2dpOn() || mAudioManager.isWiredHeadsetOn()) {
- String text = null;
switch (code) {
case Keyboard.KEYCODE_ALT:
text = mContext.getString(R.string.keyboardview_keycode_alt);
@@ -990,11 +994,17 @@
default:
text = String.valueOf((char) code);
}
- event.getText().add(text);
+ } else if (!mHeadsetRequiredToHearPasswordsAnnounced) {
+ // We want the waring for required head set to be send with both the
+ // hover enter and hover exit event, so set the flag after the exit.
+ if (eventType == AccessibilityEvent.TYPE_VIEW_HOVER_EXIT) {
+ mHeadsetRequiredToHearPasswordsAnnounced = true;
+ }
+ text = mContext.getString(R.string.keyboard_headset_required_to_hear_password);
} else {
- event.getText().add(mContext.getString(
- R.string.keyboard_headset_required_to_hear_password));
+ text = mContext.getString(R.string.keyboard_password_character_no_headset);
}
+ event.getText().add(text);
mAccessibilityManager.sendAccessibilityEvent(event);
}
}
@@ -1134,15 +1144,13 @@
}
@Override
- protected boolean dispatchHoverEvent(MotionEvent event) {
+ public boolean onHoverEvent(MotionEvent event) {
// If touch exploring is enabled we ignore touch events and transform
// the stream of hover events as touch events. This allows one consistent
// event stream to drive the keyboard since during touch exploring the
// first touch generates only hover events and tapping on the same
// location generates hover and touch events.
- if (mAccessibilityManager.isEnabled()
- && mAccessibilityManager.isTouchExplorationEnabled()
- && event.getPointerCount() == 1) {
+ if (mAccessibilityManager.isTouchExplorationEnabled() && event.getPointerCount() == 1) {
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_HOVER_ENTER:
@@ -1156,9 +1164,9 @@
break;
}
onTouchEventInternal(event);
- return true;
+ event.setAction(action);
}
- return super.dispatchHoverEvent(event);
+ return super.onHoverEvent(event);
}
@Override
@@ -1168,8 +1176,7 @@
// event stream to drive the keyboard since during touch exploring the
// first touch generates only hover events and tapping on the same
// location generates hover and touch events.
- if (mAccessibilityManager.isEnabled()
- && mAccessibilityManager.isTouchExplorationEnabled()) {
+ if (mAccessibilityManager.isTouchExplorationEnabled()) {
return true;
}
return onTouchEventInternal(event);
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 530122c..0052dd0 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -515,7 +515,7 @@
* All applications that have background services that use the network
* should listen to {@link #ACTION_BACKGROUND_DATA_SETTING_CHANGED}.
* <p>
- * As of {@link VERSION_CODES#ICE_CREAM_SANDWICH}, availability of
+ * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH}, availability of
* background data depends on several combined factors, and this method will
* always return {@code true}. Instead, when background data is unavailable,
* {@link #getActiveNetworkInfo()} will now appear disconnected.
@@ -548,6 +548,8 @@
* Return quota status for the current active network, or {@code null} if no
* network is active. Quota status can change rapidly, so these values
* shouldn't be cached.
+ *
+ * @hide
*/
public NetworkQuotaInfo getActiveNetworkQuotaInfo() {
try {
diff --git a/core/java/android/net/DhcpStateMachine.java b/core/java/android/net/DhcpStateMachine.java
index 79c9395..fc6a44a 100644
--- a/core/java/android/net/DhcpStateMachine.java
+++ b/core/java/android/net/DhcpStateMachine.java
@@ -336,17 +336,17 @@
DhcpInfoInternal dhcpInfoInternal = new DhcpInfoInternal();
if (dhcpAction == DhcpAction.START) {
- Log.d(TAG, "DHCP request on " + mInterfaceName);
+ if (DBG) Log.d(TAG, "DHCP request on " + mInterfaceName);
success = NetworkUtils.runDhcp(mInterfaceName, dhcpInfoInternal);
mDhcpInfo = dhcpInfoInternal;
} else if (dhcpAction == DhcpAction.RENEW) {
- Log.d(TAG, "DHCP renewal on " + mInterfaceName);
+ if (DBG) Log.d(TAG, "DHCP renewal on " + mInterfaceName);
success = NetworkUtils.runDhcpRenew(mInterfaceName, dhcpInfoInternal);
dhcpInfoInternal.updateFromDhcpRequest(mDhcpInfo);
}
if (success) {
- Log.d(TAG, "DHCP succeeded on " + mInterfaceName);
+ if (DBG) Log.d(TAG, "DHCP succeeded on " + mInterfaceName);
long leaseDuration = dhcpInfoInternal.leaseDuration; //int to long conversion
//Sanity check for renewal
@@ -366,7 +366,7 @@
mController.obtainMessage(CMD_POST_DHCP_ACTION, DHCP_SUCCESS, 0, dhcpInfoInternal)
.sendToTarget();
} else {
- Log.d(TAG, "DHCP failed on " + mInterfaceName + ": " +
+ Log.e(TAG, "DHCP failed on " + mInterfaceName + ": " +
NetworkUtils.getDhcpError());
NetworkUtils.stopDhcp(mInterfaceName);
mController.obtainMessage(CMD_POST_DHCP_ACTION, DHCP_FAILURE, 0)
diff --git a/core/java/android/net/DnsPinger.java b/core/java/android/net/DnsPinger.java
index 3291e6b..11acabe 100644
--- a/core/java/android/net/DnsPinger.java
+++ b/core/java/android/net/DnsPinger.java
@@ -22,7 +22,7 @@
import android.os.Message;
import android.os.SystemClock;
import android.provider.Settings;
-import android.util.Slog;
+import android.util.Log;
import com.android.internal.util.Protocol;
@@ -51,7 +51,7 @@
* @hide
*/
public final class DnsPinger extends Handler {
- private static final boolean V = true;
+ private static final boolean DBG = false;
private static final int RECEIVE_POLL_INTERVAL_MS = 200;
private static final int DNS_PORT = 53;
@@ -154,7 +154,7 @@
newActivePing.socket.setNetworkInterface(NetworkInterface.getByName(
getCurrentLinkProperties().getInterfaceName()));
} catch (Exception e) {
- Slog.w(TAG,"sendDnsPing::Error binding to socket", e);
+ loge("sendDnsPing::Error binding to socket " + e);
}
newActivePing.packetId = (short) sRandom.nextInt();
@@ -165,8 +165,8 @@
// Send the DNS query
DatagramPacket packet = new DatagramPacket(buf,
buf.length, dnsAddress, DNS_PORT);
- if (V) {
- Slog.v(TAG, "Sending a ping " + newActivePing.internalId +
+ if (DBG) {
+ log("Sending a ping " + newActivePing.internalId +
" to " + dnsAddress.getHostAddress()
+ " with packetId " + newActivePing.packetId + ".");
}
@@ -196,15 +196,15 @@
curPing.result =
(int) (SystemClock.elapsedRealtime() - curPing.start);
} else {
- if (V) {
- Slog.v(TAG, "response ID didn't match, ignoring packet");
+ if (DBG) {
+ log("response ID didn't match, ignoring packet");
}
}
} catch (SocketTimeoutException e) {
// A timeout here doesn't mean anything - squelsh this exception
} catch (Exception e) {
- if (V) {
- Slog.v(TAG, "DnsPinger.pingDns got socket exception: ", e);
+ if (DBG) {
+ log("DnsPinger.pingDns got socket exception: " + e);
}
curPing.result = SOCKET_EXCEPTION;
}
@@ -244,13 +244,13 @@
public List<InetAddress> getDnsList() {
LinkProperties curLinkProps = getCurrentLinkProperties();
if (curLinkProps == null) {
- Slog.e(TAG, "getCurLinkProperties:: LP for type" + mConnectionType + " is null!");
+ loge("getCurLinkProperties:: LP for type" + mConnectionType + " is null!");
return mDefaultDns;
}
Collection<InetAddress> dnses = curLinkProps.getDnses();
if (dnses == null || dnses.size() == 0) {
- Slog.v(TAG, "getDns::LinkProps has null dns - returning default");
+ loge("getDns::LinkProps has null dns - returning default");
return mDefaultDns;
}
@@ -277,8 +277,8 @@
}
private void sendResponse(int internalId, int externalId, int responseVal) {
- if(V) {
- Slog.d(TAG, "Responding to packet " + internalId +
+ if(DBG) {
+ log("Responding to packet " + internalId +
" externalId " + externalId +
" and val " + responseVal);
}
@@ -304,7 +304,7 @@
try {
return NetworkUtils.numericToInetAddress(dns);
} catch (IllegalArgumentException e) {
- Slog.w(TAG, "getDefaultDns::malformed default dns address");
+ loge("getDefaultDns::malformed default dns address");
return null;
}
}
@@ -323,4 +323,12 @@
0, 1, // QTYPE, set to 1 = A (host address)
0, 1 // QCLASS, set to 1 = IN (internet)
};
+
+ private void log(String s) {
+ Log.d(TAG, s);
+ }
+
+ private void loge(String s) {
+ Log.e(TAG, s);
+ }
}
diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java
index aaad8a1..1b24f0c 100644
--- a/core/java/android/net/NetworkPolicy.java
+++ b/core/java/android/net/NetworkPolicy.java
@@ -40,6 +40,8 @@
public long limitBytes;
public long lastSnooze;
+ private static final long DEFAULT_MTU = 1500;
+
public NetworkPolicy(NetworkTemplate template, int cycleDay, long warningBytes, long limitBytes,
long lastSnooze) {
this.template = checkNotNull(template, "missing NetworkTemplate");
@@ -71,6 +73,17 @@
return 0;
}
+ /**
+ * Test if given measurement is near enough to {@link #limitBytes} to be
+ * considered over-limit.
+ */
+ public boolean isOverLimit(long totalBytes) {
+ // over-estimate, since kernel will trigger limit once first packet
+ // trips over limit.
+ totalBytes += 2 * DEFAULT_MTU;
+ return limitBytes != LIMIT_DISABLED && totalBytes >= limitBytes;
+ }
+
/** {@inheritDoc} */
public int compareTo(NetworkPolicy another) {
if (another == null || another.limitBytes == LIMIT_DISABLED) {
diff --git a/core/java/android/net/NetworkQuotaInfo.java b/core/java/android/net/NetworkQuotaInfo.java
index b85f925..6535256 100644
--- a/core/java/android/net/NetworkQuotaInfo.java
+++ b/core/java/android/net/NetworkQuotaInfo.java
@@ -21,6 +21,8 @@
/**
* Information about quota status on a specific network.
+ *
+ * @hide
*/
public class NetworkQuotaInfo implements Parcelable {
private final long mEstimatedBytes;
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index f3be39c..69ac1e7 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -229,6 +229,14 @@
return elapsedRealtime;
}
+ /**
+ * Return age of this {@link NetworkStats} object with respect to
+ * {@link SystemClock#elapsedRealtime()}.
+ */
+ public long getElapsedRealtimeAge() {
+ return SystemClock.elapsedRealtime() - elapsedRealtime;
+ }
+
public int size() {
return size;
}
@@ -272,6 +280,17 @@
}
/**
+ * Combine all values from another {@link NetworkStats} into this object.
+ */
+ public void combineAllValues(NetworkStats another) {
+ NetworkStats.Entry entry = null;
+ for (int i = 0; i < another.size; i++) {
+ entry = another.getValues(i, entry);
+ combineValues(entry);
+ }
+ }
+
+ /**
* Find first stats index that matches the requested parameters.
*/
public int findIndex(String iface, int uid, int set, int tag) {
@@ -343,26 +362,59 @@
* Return total of all fields represented by this snapshot object.
*/
public Entry getTotal(Entry recycle) {
+ return getTotal(recycle, null, UID_ALL);
+ }
+
+ /**
+ * Return total of all fields represented by this snapshot object matching
+ * the requested {@link #uid}.
+ */
+ public Entry getTotal(Entry recycle, int limitUid) {
+ return getTotal(recycle, null, limitUid);
+ }
+
+ /**
+ * Return total of all fields represented by this snapshot object matching
+ * the requested {@link #iface}.
+ */
+ public Entry getTotal(Entry recycle, HashSet<String> limitIface) {
+ return getTotal(recycle, limitIface, UID_ALL);
+ }
+
+ /**
+ * Return total of all fields represented by this snapshot object matching
+ * the requested {@link #iface} and {@link #uid}.
+ *
+ * @param limitIface Set of {@link #iface} to include in total; or {@code
+ * null} to include all ifaces.
+ */
+ private Entry getTotal(Entry recycle, HashSet<String> limitIface, int limitUid) {
final Entry entry = recycle != null ? recycle : new Entry();
entry.iface = IFACE_ALL;
- entry.uid = UID_ALL;
+ entry.uid = limitUid;
entry.set = SET_ALL;
entry.tag = TAG_NONE;
entry.rxBytes = 0;
entry.rxPackets = 0;
entry.txBytes = 0;
entry.txPackets = 0;
+ entry.operations = 0;
for (int i = 0; i < size; i++) {
- // skip specific tags, since already counted in TAG_NONE
- if (tag[i] != TAG_NONE) continue;
+ final boolean matchesUid = (limitUid == UID_ALL) || (limitUid == uid[i]);
+ final boolean matchesIface = (limitIface == null) || (limitIface.contains(iface[i]));
- entry.rxBytes += rxBytes[i];
- entry.rxPackets += rxPackets[i];
- entry.txBytes += txBytes[i];
- entry.txPackets += txPackets[i];
- entry.operations += operations[i];
+ if (matchesUid && matchesIface) {
+ // skip specific tags, since already counted in TAG_NONE
+ if (tag[i] != TAG_NONE) continue;
+
+ entry.rxBytes += rxBytes[i];
+ entry.rxPackets += rxPackets[i];
+ entry.txBytes += txBytes[i];
+ entry.txPackets += txPackets[i];
+ entry.operations += operations[i];
+ }
}
return entry;
}
@@ -456,6 +508,62 @@
return result;
}
+ /**
+ * Return total statistics grouped by {@link #iface}; doesn't mutate the
+ * original structure.
+ */
+ public NetworkStats groupedByIface() {
+ final NetworkStats stats = new NetworkStats(elapsedRealtime, 10);
+
+ final Entry entry = new Entry();
+ entry.uid = UID_ALL;
+ entry.set = SET_ALL;
+ entry.tag = TAG_NONE;
+ entry.operations = 0L;
+
+ for (int i = 0; i < size; i++) {
+ // skip specific tags, since already counted in TAG_NONE
+ if (tag[i] != TAG_NONE) continue;
+
+ entry.iface = iface[i];
+ entry.rxBytes = rxBytes[i];
+ entry.rxPackets = rxPackets[i];
+ entry.txBytes = txBytes[i];
+ entry.txPackets = txPackets[i];
+ stats.combineValues(entry);
+ }
+
+ return stats;
+ }
+
+ /**
+ * Return total statistics grouped by {@link #uid}; doesn't mutate the
+ * original structure.
+ */
+ public NetworkStats groupedByUid() {
+ final NetworkStats stats = new NetworkStats(elapsedRealtime, 10);
+
+ final Entry entry = new Entry();
+ entry.iface = IFACE_ALL;
+ entry.set = SET_ALL;
+ entry.tag = TAG_NONE;
+
+ for (int i = 0; i < size; i++) {
+ // skip specific tags, since already counted in TAG_NONE
+ if (tag[i] != TAG_NONE) continue;
+
+ entry.uid = uid[i];
+ entry.rxBytes = rxBytes[i];
+ entry.rxPackets = rxPackets[i];
+ entry.txBytes = txBytes[i];
+ entry.txPackets = txPackets[i];
+ entry.operations = operations[i];
+ stats.combineValues(entry);
+ }
+
+ return stats;
+ }
+
public void dump(String prefix, PrintWriter pw) {
pw.print(prefix);
pw.print("NetworkStats: elapsedRealtime="); pw.println(elapsedRealtime);
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index a6635be..8c01331 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -478,17 +478,34 @@
* @deprecated only for temporary testing
*/
@Deprecated
+ public void generateRandom(long start, long end, long bytes) {
+ final Random r = new Random();
+
+ final float fractionRx = r.nextFloat();
+ final long rxBytes = (long) (bytes * fractionRx);
+ final long txBytes = (long) (bytes * (1 - fractionRx));
+
+ final long rxPackets = rxBytes / 1024;
+ final long txPackets = txBytes / 1024;
+ final long operations = rxBytes / 2048;
+
+ generateRandom(start, end, rxBytes, rxPackets, txBytes, txPackets, operations, r);
+ }
+
+ /**
+ * @deprecated only for temporary testing
+ */
+ @Deprecated
public void generateRandom(long start, long end, long rxBytes, long rxPackets, long txBytes,
- long txPackets, long operations) {
+ long txPackets, long operations, Random r) {
ensureBuckets(start, end);
final NetworkStats.Entry entry = new NetworkStats.Entry(
IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
- final Random r = new Random();
while (rxBytes > 1024 || rxPackets > 128 || txBytes > 1024 || txPackets > 128
|| operations > 32) {
final long curStart = randomLong(r, start, end);
- final long curEnd = randomLong(r, curStart, end);
+ final long curEnd = curStart + randomLong(r, 0, (end - curStart) / 2);
entry.rxBytes = randomLong(r, 0, rxBytes);
entry.rxPackets = randomLong(r, 0, rxPackets);
@@ -506,7 +523,7 @@
}
}
- private static long randomLong(Random r, long start, long end) {
+ public static long randomLong(Random r, long start, long end) {
return (long) (start + (r.nextFloat() * (end - start)));
}
diff --git a/core/java/android/net/http/SslError.java b/core/java/android/net/http/SslError.java
index 08c6692..863304c 100644
--- a/core/java/android/net/http/SslError.java
+++ b/core/java/android/net/http/SslError.java
@@ -19,7 +19,8 @@
import java.security.cert.X509Certificate;
/**
- * One or more individual SSL errors and the associated SSL certificate
+ * This class represents a set of one or more SSL errors and the associated SSL
+ * certificate.
*/
public class SslError {
@@ -48,16 +49,17 @@
*/
public static final int SSL_DATE_INVALID = 4;
/**
- * The certificate is invalid
+ * A generic error occurred
*/
public static final int SSL_INVALID = 5;
/**
- * The number of different SSL errors (update if you add a new SSL error!!!)
+ * The number of different SSL errors.
* @deprecated This constant is not necessary for using the SslError API and
* can change from release to release.
*/
+ // Update if you add a new SSL error!!!
@Deprecated
public static final int SSL_MAX_ERROR = 6;
@@ -78,56 +80,56 @@
final String mUrl;
/**
- * Creates a new SSL error set object
+ * Creates a new SslError object using the supplied error and certificate.
+ * The URL will be set to the empty string.
* @param error The SSL error
* @param certificate The associated SSL certificate
* @deprecated Use {@link #SslError(int, SslCertificate, String)}
*/
@Deprecated
public SslError(int error, SslCertificate certificate) {
- addError(error);
- if (certificate == null) {
- throw new NullPointerException("certificate is null.");
- }
- mCertificate = certificate;
- mUrl = "";
+ this(error, certificate, "");
}
/**
- * Creates a new SSL error set object
+ * Creates a new SslError object using the supplied error and certificate.
+ * The URL will be set to the empty string.
* @param error The SSL error
* @param certificate The associated SSL certificate
* @deprecated Use {@link #SslError(int, X509Certificate, String)}
*/
@Deprecated
public SslError(int error, X509Certificate certificate) {
- addError(error);
- if (certificate == null) {
- throw new NullPointerException("certificate is null.");
- }
- mCertificate = new SslCertificate(certificate);
- mUrl = "";
+ this(error, certificate, "");
}
/**
- * Creates a new SSL error set object
+ * Creates a new SslError object using the supplied error, certificate and
+ * URL.
* @param error The SSL error
* @param certificate The associated SSL certificate
- * @param url The associated URL.
+ * @param url The associated URL
*/
public SslError(int error, SslCertificate certificate, String url) {
+ assert certificate != null;
+ assert url != null;
addError(error);
- if (certificate == null) {
- throw new NullPointerException("certificate is null.");
- }
mCertificate = certificate;
- if (url == null) {
- throw new NullPointerException("url is null.");
- }
mUrl = url;
}
/**
+ * Creates a new SslError object using the supplied error, certificate and
+ * URL.
+ * @param error The SSL error
+ * @param certificate The associated SSL certificate
+ * @param url The associated URL
+ */
+ public SslError(int error, X509Certificate certificate, String url) {
+ this(error, new SslCertificate(certificate), url);
+ }
+
+ /**
* Creates an SslError object from a chromium error code.
* @param error The chromium error code
* @param certificate The associated SSL certificate
@@ -138,56 +140,38 @@
int error, SslCertificate cert, String url) {
// The chromium error codes are in:
// external/chromium/net/base/net_error_list.h
- if (error > -200 || error < -299) {
- throw new NullPointerException("Not a valid chromium SSL error code.");
- }
+ assert (error >= -299 && error <= -200);
if (error == -200)
return new SslError(SSL_IDMISMATCH, cert, url);
if (error == -201)
return new SslError(SSL_DATE_INVALID, cert, url);
if (error == -202)
return new SslError(SSL_UNTRUSTED, cert, url);
- // Map all other errors to SSL_INVALID
+ // Map all other codes to SSL_INVALID.
return new SslError(SSL_INVALID, cert, url);
}
/**
- * Creates a new SSL error set object
- * @param error The SSL error
- * @param certificate The associated SSL certificate
- * @param url The associated URL.
- */
- public SslError(int error, X509Certificate certificate, String url) {
- addError(error);
- if (certificate == null) {
- throw new NullPointerException("certificate is null.");
- }
- mCertificate = new SslCertificate(certificate);
- if (url == null) {
- throw new NullPointerException("url is null.");
- }
- mUrl = url;
- }
-
- /**
- * @return The SSL certificate associated with the error set, non-null.
+ * Gets the SSL certificate associated with this object.
+ * @return The SSL certificate, non-null.
*/
public SslCertificate getCertificate() {
return mCertificate;
}
/**
- * @return The URL associated with the error set, non-null.
- * "" if one of the deprecated constructors is used.
+ * Gets the URL associated with this object.
+ * @return The URL, non-null.
*/
public String getUrl() {
return mUrl;
}
/**
- * Adds the SSL error to the error set
+ * Adds the supplied SSL error to the set.
* @param error The SSL error to add
- * @return True iff the error being added is a known SSL error
+ * @return True if the error being added is a known SSL error, otherwise
+ * false.
*/
public boolean addError(int error) {
boolean rval = (0 <= error && error < SslError.SSL_MAX_ERROR);
@@ -199,8 +183,9 @@
}
/**
- * @param error The SSL error to check
- * @return True iff the set includes the error
+ * Determines whether this object includes the supplied error.
+ * @param error The SSL error to check for
+ * @return True if this object includes the error, otherwise false.
*/
public boolean hasError(int error) {
boolean rval = (0 <= error && error < SslError.SSL_MAX_ERROR);
@@ -212,7 +197,9 @@
}
/**
- * @return The primary, most severe, SSL error in the set
+ * Gets the most severe SSL error in this object's set of errors.
+ * Returns -1 if the set is empty.
+ * @return The most severe SSL error, or -1 if the set is empty.
*/
public int getPrimaryError() {
if (mErrors != 0) {
@@ -222,18 +209,20 @@
return error;
}
}
+ // mErrors should never be set to an invalid value.
+ assert false;
}
- return 0;
+ return -1;
}
/**
- * @return A String representation of this SSL error object
- * (used mostly for debugging).
+ * Returns a string representation of this object.
+ * @return A String representation of this object.
*/
public String toString() {
return "primary error: " + getPrimaryError() +
- " certificate: " + getCertificate() +
- " on URL: " + getUrl();
+ " certificate: " + getCertificate() +
+ " on URL: " + getUrl();
}
}
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index fe0106d..33310df 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -768,61 +768,6 @@
}
/**
- * TODO: Remove this once pre-built apk's (Maps, Youtube etc) are updated
- * @deprecated use {@link CreateNdefMessageCallback} or {@link OnNdefPushCompleteCallback}
- * @hide
- */
- @Deprecated
- public interface NdefPushCallback {
- /**
- * @deprecated use {@link CreateNdefMessageCallback} instead
- */
- @Deprecated
- NdefMessage createMessage();
- /**
- * @deprecated use{@link OnNdefPushCompleteCallback} instead
- */
- @Deprecated
- void onMessagePushed();
- }
-
- /**
- * TODO: Remove this
- * Converts new callbacks to old callbacks.
- */
- static final class LegacyCallbackWrapper implements CreateNdefMessageCallback,
- OnNdefPushCompleteCallback {
- final NdefPushCallback mLegacyCallback;
- LegacyCallbackWrapper(NdefPushCallback legacyCallback) {
- mLegacyCallback = legacyCallback;
- }
- @Override
- public void onNdefPushComplete(NfcEvent event) {
- mLegacyCallback.onMessagePushed();
- }
- @Override
- public NdefMessage createNdefMessage(NfcEvent event) {
- return mLegacyCallback.createMessage();
- }
- }
-
- /**
- * TODO: Remove this once pre-built apk's (Maps, Youtube etc) are updated
- * @deprecated use {@link #setNdefPushMessageCallback} instead
- * @hide
- */
- @Deprecated
- public void enableForegroundNdefPush(Activity activity, final NdefPushCallback callback) {
- if (activity == null || callback == null) {
- throw new NullPointerException();
- }
- enforceResumed(activity);
- LegacyCallbackWrapper callbackWrapper = new LegacyCallbackWrapper(callback);
- mNfcActivityManager.setNdefPushMessageCallback(activity, callbackWrapper);
- mNfcActivityManager.setOnNdefPushCompleteCallback(activity, callbackWrapper);
- }
-
- /**
* Enable NDEF Push feature.
* <p>This API is for the Settings application.
* @hide
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 64bba54..9dea4c4 100644
--- a/core/java/android/os/AsyncTask.java
+++ b/core/java/android/os/AsyncTask.java
@@ -42,6 +42,13 @@
* and 4 steps, called <code>onPreExecute</code>, <code>doInBackground</code>,
* <code>onProgressUpdate</code> and <code>onPostExecute</code>.</p>
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using tasks and threads, read the
+ * <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and
+ * Threads</a> developer guide.</p>
+ * </div>
+ *
* <h2>Usage</h2>
* <p>AsyncTask must be subclassed to be used. The subclass will override at least
* one method ({@link #doInBackground}), and most often will override a
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 1d8ea12..5faab36 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -282,6 +282,10 @@
* <p>Applications targeting this or a later release will get these
* new changes in behavior:</p>
* <ul>
+ * <li> For devices without a dedicated menu key, the software compatibility
+ * menu key will not be shown even on phones. By targeting Ice Cream Sandwich
+ * or later, your UI must always have its own menu UI affordance if needed,
+ * on both tablets and phones. The ActionBar will take care of this for you.
* <li> 2d drawing hardware acceleration is now turned on by default.
* You can use
* {@link android.R.attr#hardwareAccelerated android:hardwareAccelerated}
@@ -296,6 +300,12 @@
* will not change character within the same platform version. Applications
* that wish to blend in with the device should use a theme from the
* {@link android.R.style#Theme_DeviceDefault} family.
+ * <li> Managed cursors can now throw an exception if you directly close
+ * the cursor yourself without stopping the management of it; previously failures
+ * would be silently ignored.
+ * <li> The fadingEdge attribute on views will be ignored (fading edges is no
+ * longer a standard part of the UI). A new requiresFadingEdge attribute allows
+ * applications to still force fading edges on for special cases.
* </ul>
*/
public static final int ICE_CREAM_SANDWICH = 14;
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index c288f8a..28206b7 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -54,6 +54,7 @@
private boolean mHasFds = false;
private boolean mFdsKnown = true;
+ private boolean mAllowFds = true;
/**
* The ClassLoader used when unparcelling data from mParcelledData.
@@ -186,7 +187,14 @@
public ClassLoader getClassLoader() {
return mClassLoader;
}
-
+
+ /** @hide */
+ public boolean setAllowFds(boolean allowFds) {
+ boolean orig = mAllowFds;
+ mAllowFds = allowFds;
+ return orig;
+ }
+
/**
* Clones the current Bundle. The internal map is cloned, but the keys and
* values to which it refers are copied by reference.
@@ -1589,24 +1597,29 @@
* @param parcel The parcel to copy this bundle to.
*/
public void writeToParcel(Parcel parcel, int flags) {
- if (mParcelledData != null) {
- int length = mParcelledData.dataSize();
- parcel.writeInt(length);
- parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L'
- parcel.appendFrom(mParcelledData, 0, length);
- } else {
- parcel.writeInt(-1); // dummy, will hold length
- parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L'
-
- int oldPos = parcel.dataPosition();
- parcel.writeMapInternal(mMap);
- int newPos = parcel.dataPosition();
-
- // Backpatch length
- parcel.setDataPosition(oldPos - 8);
- int length = newPos - oldPos;
- parcel.writeInt(length);
- parcel.setDataPosition(newPos);
+ final boolean oldAllowFds = parcel.pushAllowFds(mAllowFds);
+ try {
+ if (mParcelledData != null) {
+ int length = mParcelledData.dataSize();
+ parcel.writeInt(length);
+ parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L'
+ parcel.appendFrom(mParcelledData, 0, length);
+ } else {
+ parcel.writeInt(-1); // dummy, will hold length
+ parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L'
+
+ int oldPos = parcel.dataPosition();
+ parcel.writeMapInternal(mMap);
+ int newPos = parcel.dataPosition();
+
+ // Backpatch length
+ parcel.setDataPosition(oldPos - 8);
+ int length = newPos - oldPos;
+ parcel.writeInt(length);
+ parcel.setDataPosition(newPos);
+ }
+ } finally {
+ parcel.restoreAllowFds(oldAllowFds);
}
}
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index 66373fe..be87946 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -79,6 +79,16 @@
void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable);
/**
+ * Disable IPv6 on an interface
+ */
+ void disableIpv6(String iface);
+
+ /**
+ * Enable IPv6 on an interface
+ */
+ void enableIpv6(String iface);
+
+ /**
* Retrieves the network routes currently configured on the specified
* interface
*/
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index e9ed676..15e3af4 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -323,6 +323,12 @@
*/
public final native void setDataCapacity(int size);
+ /** @hide */
+ public final native boolean pushAllowFds(boolean allowFds);
+
+ /** @hide */
+ public final native void restoreAllowFds(boolean lastValue);
+
/**
* Returns the raw bytes of the parcel.
*
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 68385b4..cc2fa85 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -35,7 +35,6 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@@ -902,6 +901,7 @@
return false;
}
+ // Thread policy controls BlockGuard.
int threadPolicyMask = StrictMode.DETECT_DISK_WRITE |
StrictMode.DETECT_DISK_READ |
StrictMode.DETECT_NETWORK;
@@ -915,10 +915,16 @@
StrictMode.setThreadPolicyMask(threadPolicyMask);
+ // VM Policy controls CloseGuard, detection of Activity leaks,
+ // and instance counting.
if (IS_USER_BUILD) {
setCloseGuardEnabled(false);
} else {
- setVmPolicy(new VmPolicy.Builder().detectAll().penaltyDropBox().build());
+ VmPolicy.Builder policyBuilder = new VmPolicy.Builder().detectAll().penaltyDropBox();
+ if (IS_ENG_BUILD) {
+ policyBuilder.penaltyLog();
+ }
+ setVmPolicy(policyBuilder.build());
setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
}
return true;
diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java
index dd9dd25..8b99459 100644
--- a/core/java/android/preference/PreferenceScreen.java
+++ b/core/java/android/preference/PreferenceScreen.java
@@ -26,6 +26,7 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.Window;
+import android.widget.AbsListView;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ListAdapter;
@@ -190,9 +191,13 @@
}
public void onItemClick(AdapterView parent, View view, int position, long id) {
+ // If the list has headers, subtract them from the index.
+ if (parent instanceof ListView) {
+ position -= ((ListView) parent).getHeaderViewsCount();
+ }
Object item = getRootAdapter().getItem(position);
if (!(item instanceof Preference)) return;
-
+
final Preference preference = (Preference) item;
preference.performClick(this);
}
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index 4b4d308..d7060c1 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -300,8 +300,25 @@
public static final String CALENDAR_COLOR = "calendar_color";
/**
+ * An index for looking up a color from the {@link Colors} table. NULL
+ * or an empty string are reserved for indicating that the calendar does
+ * not use an index for looking up the color. The provider will update
+ * {@link #CALENDAR_COLOR} automatically when a valid index is written
+ * to this column. @see Colors
+ * <P>
+ * Type: TEXT
+ * </P>
+ * TODO UNHIDE
+ *
+ * @hide
+ */
+ public static final String CALENDAR_COLOR_INDEX = "calendar_color_index";
+
+ /**
* The display name of the calendar. Column name.
- * <P>Type: TEXT</P>
+ * <P>
+ * Type: TEXT
+ * </P>
*/
public static final String CALENDAR_DISPLAY_NAME = "calendar_displayName";
@@ -392,6 +409,34 @@
* <P>Type: TEXT</P>
*/
public static final String ALLOWED_REMINDERS = "allowedReminders";
+
+ /**
+ * A comma separated list of availability types supported for this
+ * calendar in the format "#,#,#". Valid types are
+ * {@link Events#AVAILABILITY_BUSY}, {@link Events#AVAILABILITY_FREE},
+ * {@link Events#AVAILABILITY_TENTATIVE}. Setting this field to only
+ * {@link Events#AVAILABILITY_BUSY} should be used to indicate that
+ * changing the availability is not supported.
+ *
+ * TODO UNHIDE, Update Calendars doc
+ *
+ * @hide
+ */
+ public static final String ALLOWED_AVAILABILITY = "allowedAvailability";
+
+ /**
+ * A comma separated list of attendee types supported for this calendar
+ * in the format "#,#,#". Valid types are {@link Attendees#TYPE_NONE},
+ * {@link Attendees#TYPE_OPTIONAL}, {@link Attendees#TYPE_REQUIRED},
+ * {@link Attendees#TYPE_RESOURCE}. Setting this field to only
+ * {@link Attendees#TYPE_NONE} should be used to indicate that changing
+ * the attendee type is not supported.
+ *
+ * TODO UNHIDE, Update Calendars doc
+ *
+ * @hide
+ */
+ public static final String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes";
}
/**
@@ -688,13 +733,22 @@
/**
* The type of attendee. Column name.
- * <P>Type: Integer (one of {@link #TYPE_REQUIRED}, {@link #TYPE_OPTIONAL})</P>
+ * <P>
+ * Type: Integer (one of {@link #TYPE_REQUIRED}, {@link #TYPE_OPTIONAL}
+ * </P>
*/
public static final String ATTENDEE_TYPE = "attendeeType";
public static final int TYPE_NONE = 0;
public static final int TYPE_REQUIRED = 1;
public static final int TYPE_OPTIONAL = 2;
+ /**
+ * This specifies that an attendee is a resource, such as a room, and
+ * not an actual person. TODO UNHIDE and add to ATTENDEE_TYPE comment
+ *
+ * @hide
+ */
+ public static final int TYPE_RESOURCE = 3;
/**
* The attendance status of the attendee. Column name.
@@ -787,13 +841,26 @@
public static final String EVENT_LOCATION = "eventLocation";
/**
- * A secondary color for the individual event. Reserved for future use.
- * Column name.
+ * A secondary color for the individual event. This should only be
+ * updated by the sync adapter for a given account.
* <P>Type: INTEGER</P>
*/
public static final String EVENT_COLOR = "eventColor";
/**
+ * A secondary color index for the individual event. NULL or an empty
+ * string are reserved for indicating that the event does not use an
+ * index for looking up the color. The provider will update
+ * {@link #EVENT_COLOR} automatically when a valid index is written to
+ * this column. @see Colors
+ * <P>Type: TEXT</P>
+ * TODO UNHIDE
+ *
+ * @hide
+ */
+ public static final String EVENT_COLOR_INDEX = "eventColor_index";
+
+ /**
* The event status. Column name.
* <P>Type: INTEGER (one of {@link #STATUS_TENTATIVE}...)</P>
*/
@@ -964,6 +1031,15 @@
* other events.
*/
public static final int AVAILABILITY_FREE = 1;
+ /**
+ * Indicates that the owner's availability may change, but should be
+ * considered busy time that will conflict.
+ *
+ * TODO UNHIDE
+ *
+ * @hide
+ */
+ public static final int AVAILABILITY_TENTATIVE = 2;
/**
* Whether the event has an alarm or not. Column name.
@@ -2224,6 +2300,91 @@
}
}
+ /**
+ * @hide
+ * TODO UNHIDE
+ */
+ protected interface ColorsColumns extends SyncStateContract.Columns {
+
+ /**
+ * The type of color, which describes how it should be used. Valid types
+ * are {@link #TYPE_CALENDAR} and {@link #TYPE_EVENT}. Column name.
+ * <P>
+ * Type: INTEGER (NOT NULL)
+ * </P>
+ */
+ public static final String COLOR_TYPE = "color_type";
+
+ /**
+ * This indicateds a color that can be used for calendars.
+ */
+ public static final int TYPE_CALENDAR = 0;
+ /**
+ * This indicates a color that can be used for events.
+ */
+ public static final int TYPE_EVENT = 1;
+
+ /**
+ * The index used to reference this color. This can be any non-empty
+ * string, but must be unique for a given {@link #ACCOUNT_TYPE} and
+ * {@link #ACCOUNT_NAME} . Column name.
+ * <P>
+ * Type: TEXT
+ * </P>
+ */
+ public static final String COLOR_INDEX = "color_index";
+
+ /**
+ * The version of this color that will work with dark text as an 8-bit
+ * ARGB integer value. Colors should specify alpha as fully opaque (eg
+ * 0xFF993322) as the alpha may be ignored or modified for display.
+ * Column name.
+ * <P>
+ * Type: INTEGER (NOT NULL)
+ * </P>
+ */
+ public static final String COLOR_LIGHT = "color_light";
+
+ /**
+ * The version of this color that will work with light text as an 8-bit
+ * ARGB integer value. Colors should specify alpha as fully opaque (eg
+ * 0xFF993322) as the alpha may be ignored or modified for display.
+ * Column name.
+ * <P>
+ * Type: INTEGER (NOT NULL)
+ * </P>
+ */
+ public static final String COLOR_DARK = "color_dark";
+
+ }
+
+ /**
+ * Fields for accessing colors available for a given account. Colors are
+ * referenced by {@link #COLOR_INDEX} which must be unique for a given
+ * account name/type. These values should only be updated by the sync
+ * adapter.
+ * TODO UNHIDE
+ *
+ * @hide
+ */
+ public static final class Colors implements ColorsColumns {
+ /**
+ * @hide
+ */
+ public static final String TABLE_NAME = "Colors";
+ /**
+ * The Uri for querying color information
+ */
+ @SuppressWarnings("hiding")
+ public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/colors");
+
+ /**
+ * This utility class cannot be instantiated
+ */
+ private Colors() {
+ }
+ }
+
protected interface ExtendedPropertiesColumns {
/**
* The event the extended property belongs to. Column name.
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index 886edaf..6d14dfc 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -238,6 +238,14 @@
public static final String CACHED_PHOTO_ID = "photo_id";
/**
+ * The cached formatted phone number.
+ * This value is not guaranteed to be present.
+ * <P>Type: TEXT</P>
+ * @hide
+ */
+ public static final String CACHED_FORMATTED_NUMBER = "formatted_number";
+
+ /**
* Adds a call to the call log.
*
* @param ci the CallerInfo object to get the target contact from. Can be null
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index fb119b3..8483b4f 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -1611,9 +1611,16 @@
}
/**
+ * <p>
* A sub-directory of a single contact that contains all of the constituent raw contact
* {@link ContactsContract.StreamItems} rows. This directory can be used either
* with a {@link #CONTENT_URI} or {@link #CONTENT_LOOKUP_URI}.
+ * </p>
+ * <p>
+ * Querying for social stream data requires android.permission.READ_SOCIAL_STREAM
+ * permission.
+ * </p>
+ * @hide
*/
public static final class StreamItems implements StreamItemsColumns {
/**
@@ -2669,6 +2676,14 @@
* {@link ContactsContract.StreamItems} for a stand-alone table containing the
* same data.
* </p>
+ * <p>
+ * Access to the social stream through this sub-directory requires additional permissions
+ * beyond the read/write contact permissions required by the provider. Querying for
+ * social stream data requires android.permission.READ_SOCIAL_STREAM permission, and
+ * inserting or updating social stream items requires android.permission.WRITE_SOCIAL_STREAM
+ * permission.
+ * </p>
+ * @hide
*/
public static final class StreamItems implements BaseColumns, StreamItemsColumns {
/**
@@ -2963,6 +2978,12 @@
* transaction correspondingly. Insertion of more items beyond the limit will
* automatically lead to deletion of the oldest items, by {@link StreamItems#TIMESTAMP}.
* </p>
+ * <p>
+ * Access to the social stream through these URIs requires additional permissions beyond the
+ * read/write contact permissions required by the provider. Querying for social stream data
+ * requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating social
+ * stream items requires android.permission.WRITE_SOCIAL_STREAM permission.
+ * </p>
* <h3>Operations</h3>
* <dl>
* <dt><b>Insert</b></dt>
@@ -3075,6 +3096,7 @@
* </pre>
* </dd>
* </dl>
+ * @hide
*/
public static final class StreamItems implements BaseColumns, StreamItemsColumns {
/**
@@ -3135,6 +3157,12 @@
* directory append {@link StreamItems.StreamItemPhotos#CONTENT_DIRECTORY} to
* an individual stream item URI.
* </p>
+ * <p>
+ * Access to social stream photos requires additional permissions beyond the read/write
+ * contact permissions required by the provider. Querying for social stream photos
+ * requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating
+ * social stream photos requires android.permission.WRITE_SOCIAL_STREAM permission.
+ * </p>
*/
public static final class StreamItemPhotos
implements BaseColumns, StreamItemPhotosColumns {
@@ -3166,6 +3194,7 @@
* Columns in the StreamItems table.
*
* @see ContactsContract.StreamItems
+ * @hide
*/
protected interface StreamItemsColumns {
/**
@@ -3312,6 +3341,12 @@
* Constants for the stream_item_photos table, which contains photos associated with
* social stream updates.
* </p>
+ * <p>
+ * Access to social stream photos requires additional permissions beyond the read/write
+ * contact permissions required by the provider. Querying for social stream photos
+ * requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating
+ * social stream photos requires android.permission.WRITE_SOCIAL_STREAM permission.
+ * </p>
* <h3>Operations</h3>
* <dl>
* <dt><b>Insert</b></dt>
@@ -3450,6 +3485,7 @@
* <pre>
* </dd>
* </dl>
+ * @hide
*/
public static final class StreamItemPhotos implements BaseColumns, StreamItemPhotosColumns {
/**
@@ -3477,6 +3513,7 @@
* Columns in the StreamItemPhotos table.
*
* @see ContactsContract.StreamItemPhotos
+ * @hide
*/
protected interface StreamItemPhotosColumns {
/**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index bc05078..3d2a3ce 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -4087,7 +4087,9 @@
MOUNT_UMS_AUTOSTART,
MOUNT_UMS_PROMPT,
MOUNT_UMS_NOTIFY_ENABLED,
- UI_NIGHT_MODE
+ UI_NIGHT_MODE,
+ LOCK_SCREEN_OWNER_INFO,
+ LOCK_SCREEN_OWNER_INFO_ENABLED
};
/**
diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java
index e849b71..79995d0 100755
--- a/core/java/android/provider/Telephony.java
+++ b/core/java/android/provider/Telephony.java
@@ -666,6 +666,7 @@
public static SmsMessage[] getMessagesFromIntent(
Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
+ String format = intent.getStringExtra("format");
byte[][] pduObjs = new byte[messages.length][];
for (int i = 0; i < messages.length; i++) {
@@ -676,7 +677,7 @@
SmsMessage[] msgs = new SmsMessage[pduCount];
for (int i = 0; i < pduCount; i++) {
pdus[i] = pduObjs[i];
- msgs[i] = SmsMessage.createFromPdu(pdus[i]);
+ msgs[i] = SmsMessage.createFromPdu(pdus[i], format);
}
return msgs;
}
@@ -1574,22 +1575,6 @@
public static final String SENT_TIME = "sent_time";
}
- public static final class ScrapSpace {
- /**
- * The content:// style URL for this table
- */
- public static final Uri CONTENT_URI = Uri.parse("content://mms/scrapSpace");
-
- /**
- * This is the scrap file we use to store the media attachment when the user
- * chooses to capture a photo to be attached . We pass {#link@Uri} to the Camera app,
- * which streams the captured image to the uri. Internally we write the media content
- * to this file. It's named '.temp.jpg' so Gallery won't pick it up.
- */
- public static final String SCRAP_FILE_PATH =
- Environment.getExternalStorageDirectory().getPath() + "/mms/scrapSpace/.temp.jpg";
- }
-
public static final class Intents {
private Intents() {
// Non-instantiatable.
diff --git a/core/java/android/server/BluetoothAdapterStateMachine.java b/core/java/android/server/BluetoothAdapterStateMachine.java
index d26364e..da7c489 100644
--- a/core/java/android/server/BluetoothAdapterStateMachine.java
+++ b/core/java/android/server/BluetoothAdapterStateMachine.java
@@ -77,6 +77,12 @@
static final int PER_PROCESS_TURN_ON = 3;
static final int PER_PROCESS_TURN_OFF = 4;
+ // Turn on Bluetooth Module, Load firmware, and do all the preparation
+ // needed to get the Bluetooth Module ready but keep it not discoverable
+ // and not connectable. This way the Bluetooth Module can be quickly
+ // switched on if needed
+ static final int TURN_HOT = 5;
+
// Message(what) to report a event that the state machine need to respond to
//
// Event indicates sevice records have been loaded
@@ -94,23 +100,18 @@
// private internal messages
//
- // Turn on Bluetooth Module, Load firmware, and do all the preparation
- // needed to get the Bluetooth Module ready but keep it not discoverable
- // and not connectable. This way the Bluetooth Module can be quickly
- // switched on if needed
- private static final int TURN_HOT = 101;
// USER_TURN_ON is changed to TURN_ON_CONTINUE after we broadcast the
// state change intent so that we will not broadcast the intent again in
// other state
- private static final int TURN_ON_CONTINUE = 102;
+ private static final int TURN_ON_CONTINUE = 101;
// Unload firmware, turning off Bluetooth module power
- private static final int TURN_COLD = 103;
+ private static final int TURN_COLD = 102;
// Device disconnecting timeout happens
- private static final int DEVICES_DISCONNECT_TIMEOUT = 104;
+ private static final int DEVICES_DISCONNECT_TIMEOUT = 103;
// Prepare Bluetooth timeout happens
- private static final int PREPARE_BLUETOOTH_TIMEOUT = 105;
+ private static final int PREPARE_BLUETOOTH_TIMEOUT = 104;
// Bluetooth Powerdown timeout happens
- private static final int POWER_DOWN_TIMEOUT = 106;
+ private static final int POWER_DOWN_TIMEOUT = 105;
private Context mContext;
private BluetoothService mBluetoothService;
@@ -156,11 +157,6 @@
setInitialState(mPowerOff);
mPublicState = BluetoothAdapter.STATE_OFF;
-
- if (mContext.getResources().getBoolean
- (com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) {
- sendMessage(TURN_HOT);
- }
}
/**
diff --git a/core/java/android/server/BluetoothHealthProfileHandler.java b/core/java/android/server/BluetoothHealthProfileHandler.java
index 2961fd2..5e93b81 100644
--- a/core/java/android/server/BluetoothHealthProfileHandler.java
+++ b/core/java/android/server/BluetoothHealthProfileHandler.java
@@ -45,8 +45,7 @@
*/
final class BluetoothHealthProfileHandler {
private static final String TAG = "BluetoothHealthProfileHandler";
- /*STOPSHIP*/
- private static final boolean DBG = true;
+ private static final boolean DBG = false;
private static BluetoothHealthProfileHandler sInstance;
private BluetoothService mBluetoothService;
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index 63da926..9ca5847 100755
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -313,6 +313,10 @@
mAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothState = new BluetoothAdapterStateMachine(mContext, this, mAdapter);
mBluetoothState.start();
+ if (mContext.getResources().getBoolean
+ (com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) {
+ mBluetoothState.sendMessage(BluetoothAdapterStateMachine.TURN_HOT);
+ }
mEventLoop = mBluetoothState.getBluetoothEventLoop();
}
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 713bb91..ba94ab2 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -565,7 +565,7 @@
mLayout.windowAnimations =
com.android.internal.R.style.Animation_Wallpaper;
mInputChannel = new InputChannel();
- if (mSession.add(mWindow, mLayout, View.VISIBLE, mContentInsets,
+ if (mSession.add(mWindow, mWindow.mSeq, mLayout, View.VISIBLE, mContentInsets,
mInputChannel) < 0) {
Log.w(TAG, "Failed to add window while updating wallpaper surface.");
return;
@@ -580,7 +580,7 @@
mDrawingAllowed = true;
final int relayoutResult = mSession.relayout(
- mWindow, mLayout, mWidth, mHeight,
+ mWindow, mWindow.mSeq, mLayout, mWidth, mHeight,
View.VISIBLE, false, mWinFrame, mContentInsets,
mVisibleInsets, mConfiguration, mSurfaceHolder.mSurface);
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 5126e48..98ab310 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -440,6 +440,9 @@
private final Context mContext;
private Connection mServiceConnection;
private OnInitListener mInitListener;
+ // Written from an unspecified application thread, read from
+ // a binder thread.
+ private volatile OnUtteranceCompletedListener mUtteranceCompletedListener;
private final Object mStartLock = new Object();
private String mRequestedEngine;
@@ -1071,20 +1074,8 @@
* @return {@link #ERROR} or {@link #SUCCESS}.
*/
public int setOnUtteranceCompletedListener(final OnUtteranceCompletedListener listener) {
- return runAction(new Action<Integer>() {
- @Override
- public Integer run(ITextToSpeechService service) throws RemoteException {
- ITextToSpeechCallback.Stub callback = new ITextToSpeechCallback.Stub() {
- public void utteranceCompleted(String utteranceId) {
- if (listener != null) {
- listener.onUtteranceCompleted(utteranceId);
- }
- }
- };
- service.setCallback(getPackageName(), callback);
- return SUCCESS;
- }
- }, ERROR, "setOnUtteranceCompletedListener");
+ mUtteranceCompletedListener = listener;
+ return TextToSpeech.SUCCESS;
}
/**
@@ -1137,6 +1128,15 @@
private class Connection implements ServiceConnection {
private ITextToSpeechService mService;
+ private final ITextToSpeechCallback.Stub mCallback = new ITextToSpeechCallback.Stub() {
+ @Override
+ public void utteranceCompleted(String utteranceId) {
+ OnUtteranceCompletedListener listener = mUtteranceCompletedListener;
+ if (listener != null) {
+ listener.onUtteranceCompleted(utteranceId);
+ }
+ }
+ };
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG, "Connected to " + name);
@@ -1147,7 +1147,13 @@
}
mServiceConnection = this;
mService = ITextToSpeechService.Stub.asInterface(service);
- dispatchOnInit(SUCCESS);
+ try {
+ mService.setCallback(getPackageName(), mCallback);
+ dispatchOnInit(SUCCESS);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Error connecting to service, setCallback() failed");
+ dispatchOnInit(ERROR);
+ }
}
}
diff --git a/core/java/android/text/CharSequenceIterator.java b/core/java/android/text/CharSequenceIterator.java
deleted file mode 100644
index 4b8ac10..0000000
--- a/core/java/android/text/CharSequenceIterator.java
+++ /dev/null
@@ -1,100 +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 android.text;
-
-import java.text.CharacterIterator;
-
-/** {@hide} */
-public class CharSequenceIterator implements CharacterIterator {
- private final CharSequence mValue;
-
- private final int mLength;
- private int mIndex;
-
- public CharSequenceIterator(CharSequence value) {
- mValue = value;
- mLength = value.length();
- mIndex = 0;
- }
-
- @Override
- public Object clone() {
- try {
- return super.clone();
- } catch (CloneNotSupportedException e) {
- throw new AssertionError(e);
- }
- }
-
- /** {@inheritDoc} */
- public char current() {
- if (mIndex == mLength) {
- return DONE;
- }
- return mValue.charAt(mIndex);
- }
-
- /** {@inheritDoc} */
- public int getBeginIndex() {
- return 0;
- }
-
- /** {@inheritDoc} */
- public int getEndIndex() {
- return mLength;
- }
-
- /** {@inheritDoc} */
- public int getIndex() {
- return mIndex;
- }
-
- /** {@inheritDoc} */
- public char first() {
- return setIndex(0);
- }
-
- /** {@inheritDoc} */
- public char last() {
- return setIndex(mLength - 1);
- }
-
- /** {@inheritDoc} */
- public char next() {
- if (mIndex == mLength) {
- return DONE;
- }
- return setIndex(mIndex + 1);
- }
-
- /** {@inheritDoc} */
- public char previous() {
- if (mIndex == 0) {
- return DONE;
- }
- return setIndex(mIndex - 1);
- }
-
- /** {@inheritDoc} */
- public char setIndex(int index) {
- if ((index < 0) || (index > mLength)) {
- throw new IllegalArgumentException("Valid range is [" + 0 + "..." + mLength + "]");
- }
- mIndex = index;
- return current();
- }
-}
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index fdbec20..231f913 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -710,18 +710,17 @@
for (int i = 0; i < spanCount; i++) {
int spanStart = starts[i];
- int spanEnd = ends[i];
-
if (spanStart > gapstart) {
spanStart -= gaplen;
}
- if (spanEnd > gapstart) {
- spanEnd -= gaplen;
- }
-
if (spanStart > queryEnd) {
continue;
}
+
+ int spanEnd = ends[i];
+ if (spanEnd > gapstart) {
+ spanEnd -= gaplen;
+ }
if (spanEnd < queryStart) {
continue;
}
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index b8728ee..e93039b 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -35,11 +35,11 @@
(MetaKeyKeyListener.getMetaState(buffer, MetaKeyKeyListener.META_SELECTING) != 0));
}
- private int getCurrentLineTop(Spannable buffer, Layout layout) {
+ private static int getCurrentLineTop(Spannable buffer, Layout layout) {
return layout.getLineTop(layout.getLineForOffset(Selection.getSelectionEnd(buffer)));
}
- private int getPageHeight(TextView widget) {
+ private static int getPageHeight(TextView widget) {
// This calculation does not take into account the view transformations that
// may have been applied to the child or its containers. In case of scaling or
// rotation, the calculated page height may be incorrect.
@@ -196,14 +196,16 @@
/** {@hide} */
@Override
protected boolean leftWord(TextView widget, Spannable buffer) {
- mWordIterator.setCharSequence(buffer);
+ final int selectionEnd = widget.getSelectionEnd();
+ mWordIterator.setCharSequence(buffer, selectionEnd, selectionEnd);
return Selection.moveToPreceding(buffer, mWordIterator, isSelecting(buffer));
}
/** {@hide} */
@Override
protected boolean rightWord(TextView widget, Spannable buffer) {
- mWordIterator.setCharSequence(buffer);
+ final int selectionEnd = widget.getSelectionEnd();
+ mWordIterator.setCharSequence(buffer, selectionEnd, selectionEnd);
return Selection.moveToFollowing(buffer, mWordIterator, isSelecting(buffer));
}
diff --git a/core/java/android/text/method/WordIterator.java b/core/java/android/text/method/WordIterator.java
index 0433ec4..239d9e8 100644
--- a/core/java/android/text/method/WordIterator.java
+++ b/core/java/android/text/method/WordIterator.java
@@ -17,14 +17,9 @@
package android.text.method;
-import android.text.CharSequenceIterator;
-import android.text.Editable;
import android.text.Selection;
-import android.text.Spanned;
-import android.text.TextWatcher;
import java.text.BreakIterator;
-import java.text.CharacterIterator;
import java.util.Locale;
/**
@@ -36,8 +31,11 @@
* {@hide}
*/
public class WordIterator implements Selection.PositionIterator {
- private CharSequence mCurrent;
- private boolean mCurrentDirty = false;
+ // Size of the window for the word iterator, should be greater than the longest word's length
+ private static final int WINDOW_WIDTH = 50;
+
+ private String mString;
+ private int mOffsetShift;
private BreakIterator mIterator;
@@ -56,74 +54,40 @@
mIterator = BreakIterator.getWordInstance(locale);
}
- private final TextWatcher mWatcher = new TextWatcher() {
- /** {@inheritDoc} */
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- // ignored
- }
+ public void setCharSequence(CharSequence charSequence, int start, int end) {
+ mOffsetShift = Math.max(0, start - WINDOW_WIDTH);
+ final int windowEnd = Math.min(charSequence.length(), end + WINDOW_WIDTH);
- /** {@inheritDoc} */
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- mCurrentDirty = true;
- }
-
- /** {@inheritDoc} */
- public void afterTextChanged(Editable s) {
- // ignored
- }
- };
-
- public void forceUpdate() {
- mCurrentDirty = true;
- }
-
- public void setCharSequence(CharSequence incoming) {
- // When incoming is different object, move listeners to new sequence
- // and mark as dirty so we reload contents.
- if (mCurrent != incoming) {
- if (mCurrent instanceof Editable) {
- ((Editable) mCurrent).removeSpan(mWatcher);
- }
-
- if (incoming instanceof Editable) {
- ((Editable) incoming).setSpan(
- mWatcher, 0, incoming.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
- }
-
- mCurrent = incoming;
- mCurrentDirty = true;
- }
-
- if (mCurrentDirty) {
- final CharacterIterator charIterator = new CharSequenceIterator(mCurrent);
- mIterator.setText(charIterator);
-
- mCurrentDirty = false;
- }
+ mString = charSequence.toString().substring(mOffsetShift, windowEnd);
+ mIterator.setText(mString);
}
/** {@inheritDoc} */
public int preceding(int offset) {
+ int shiftedOffset = offset - mOffsetShift;
do {
- offset = mIterator.preceding(offset);
- if (offset == BreakIterator.DONE || isOnLetterOrDigit(offset)) {
- break;
+ shiftedOffset = mIterator.preceding(shiftedOffset);
+ if (shiftedOffset == BreakIterator.DONE) {
+ return BreakIterator.DONE;
+ }
+ if (isOnLetterOrDigit(shiftedOffset)) {
+ return shiftedOffset + mOffsetShift;
}
} while (true);
-
- return offset;
}
/** {@inheritDoc} */
public int following(int offset) {
+ int shiftedOffset = offset - mOffsetShift;
do {
- offset = mIterator.following(offset);
- if (offset == BreakIterator.DONE || isAfterLetterOrDigit(offset)) {
- break;
+ shiftedOffset = mIterator.following(shiftedOffset);
+ if (shiftedOffset == BreakIterator.DONE) {
+ return BreakIterator.DONE;
+ }
+ if (isAfterLetterOrDigit(shiftedOffset)) {
+ return shiftedOffset + mOffsetShift;
}
} while (true);
-
- return offset;
}
/** If <code>offset</code> is within a word, returns the index of the first character of that
@@ -139,17 +103,18 @@
* @throws IllegalArgumentException is offset is not valid.
*/
public int getBeginning(int offset) {
- checkOffsetIsValid(offset);
+ final int shiftedOffset = offset - mOffsetShift;
+ checkOffsetIsValid(shiftedOffset);
- if (isOnLetterOrDigit(offset)) {
- if (mIterator.isBoundary(offset)) {
- return offset;
+ if (isOnLetterOrDigit(shiftedOffset)) {
+ if (mIterator.isBoundary(shiftedOffset)) {
+ return shiftedOffset + mOffsetShift;
} else {
- return mIterator.preceding(offset);
+ return mIterator.preceding(shiftedOffset) + mOffsetShift;
}
} else {
- if (isAfterLetterOrDigit(offset)) {
- return mIterator.preceding(offset);
+ if (isAfterLetterOrDigit(shiftedOffset)) {
+ return mIterator.preceding(shiftedOffset) + mOffsetShift;
}
}
return BreakIterator.DONE;
@@ -168,58 +133,44 @@
* @throws IllegalArgumentException is offset is not valid.
*/
public int getEnd(int offset) {
- checkOffsetIsValid(offset);
+ final int shiftedOffset = offset - mOffsetShift;
+ checkOffsetIsValid(shiftedOffset);
- if (isAfterLetterOrDigit(offset)) {
- if (mIterator.isBoundary(offset)) {
- return offset;
+ if (isAfterLetterOrDigit(shiftedOffset)) {
+ if (mIterator.isBoundary(shiftedOffset)) {
+ return shiftedOffset + mOffsetShift;
} else {
- return mIterator.following(offset);
+ return mIterator.following(shiftedOffset) + mOffsetShift;
}
} else {
- if (isOnLetterOrDigit(offset)) {
- return mIterator.following(offset);
+ if (isOnLetterOrDigit(shiftedOffset)) {
+ return mIterator.following(shiftedOffset) + mOffsetShift;
}
}
return BreakIterator.DONE;
}
- private boolean isAfterLetterOrDigit(int offset) {
- if (offset - 1 >= 0) {
- final char previousChar = mCurrent.charAt(offset - 1);
- if (Character.isLetterOrDigit(previousChar)) return true;
- if (offset - 2 >= 0) {
- final char previousPreviousChar = mCurrent.charAt(offset - 2);
- if (Character.isSurrogatePair(previousPreviousChar, previousChar)) {
- final int codePoint = Character.toCodePoint(previousPreviousChar, previousChar);
- return Character.isLetterOrDigit(codePoint);
- }
- }
+ private boolean isAfterLetterOrDigit(int shiftedOffset) {
+ if (shiftedOffset >= 1 && shiftedOffset <= mString.length()) {
+ final int codePoint = mString.codePointBefore(shiftedOffset);
+ if (Character.isLetterOrDigit(codePoint)) return true;
}
return false;
}
- private boolean isOnLetterOrDigit(int offset) {
- final int length = mCurrent.length();
- if (offset < length) {
- final char currentChar = mCurrent.charAt(offset);
- if (Character.isLetterOrDigit(currentChar)) return true;
- if (offset + 1 < length) {
- final char nextChar = mCurrent.charAt(offset + 1);
- if (Character.isSurrogatePair(currentChar, nextChar)) {
- final int codePoint = Character.toCodePoint(currentChar, nextChar);
- return Character.isLetterOrDigit(codePoint);
- }
- }
+ private boolean isOnLetterOrDigit(int shiftedOffset) {
+ if (shiftedOffset >= 0 && shiftedOffset < mString.length()) {
+ final int codePoint = mString.codePointAt(shiftedOffset);
+ if (Character.isLetterOrDigit(codePoint)) return true;
}
return false;
}
- private void checkOffsetIsValid(int offset) {
- if (offset < 0 || offset > mCurrent.length()) {
- final String message = "Invalid offset: " + offset +
- ". Valid range is [0, " + mCurrent.length() + "]";
- throw new IllegalArgumentException(message);
+ private void checkOffsetIsValid(int shiftedOffset) {
+ if (shiftedOffset < 0 || shiftedOffset > mString.length()) {
+ throw new IllegalArgumentException("Invalid offset: " + (shiftedOffset + mOffsetShift) +
+ ". Valid range is [" + mOffsetShift + ", " + (mString.length() + mOffsetShift) +
+ "]");
}
}
}
diff --git a/core/java/android/text/style/SpellCheckSpan.java b/core/java/android/text/style/SpellCheckSpan.java
index caaae99..0d8a103 100644
--- a/core/java/android/text/style/SpellCheckSpan.java
+++ b/core/java/android/text/style/SpellCheckSpan.java
@@ -39,8 +39,8 @@
mSpellCheckInProgress = (src.readInt() != 0);
}
- public void setSpellCheckInProgress() {
- mSpellCheckInProgress = true;
+ public void setSpellCheckInProgress(boolean inProgress) {
+ mSpellCheckInProgress = inProgress;
}
public boolean isSpellCheckInProgress() {
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index 1379dd2d..6e95016 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -56,6 +56,14 @@
*/
public static final int FLAG_MISSPELLED = 0x0002;
+ /**
+ * Sets this flag if the auto correction is about to be applied to a word/text
+ * that the user is typing/composing. This type of suggestion is rendered differently
+ * to indicate the auto correction is happening.
+ * @hide
+ */
+ public static final int FLAG_AUTO_CORRECTION = 0x0004;
+
public static final String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
public static final String SUGGESTION_SPAN_PICKED_AFTER = "after";
public static final String SUGGESTION_SPAN_PICKED_BEFORE = "before";
@@ -82,6 +90,9 @@
private float mMisspelledUnderlineThickness;
private int mMisspelledUnderlineColor;
+ private float mAutoCorrectionUnderlineThickness;
+ private int mAutoCorrectionUnderlineColor;
+
/*
* TODO: If switching IME is required, needs to add parameters for ids of InputMethodInfo
* and InputMethodSubtype.
@@ -145,14 +156,21 @@
com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
defStyle = com.android.internal.R.attr.textAppearanceEasyCorrectSuggestion;
-
typedArray = context.obtainStyledAttributes(
null, com.android.internal.R.styleable.SuggestionSpan, defStyle, 0);
-
mEasyCorrectUnderlineThickness = typedArray.getDimension(
com.android.internal.R.styleable.SuggestionSpan_textUnderlineThickness, 0);
mEasyCorrectUnderlineColor = typedArray.getColor(
com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
+
+ defStyle = com.android.internal.R.attr.textAppearanceAutoCorrectionSuggestion;
+ typedArray = context.obtainStyledAttributes(
+ null, com.android.internal.R.styleable.SuggestionSpan, defStyle, 0);
+ mAutoCorrectionUnderlineThickness = typedArray.getDimension(
+ com.android.internal.R.styleable.SuggestionSpan_textUnderlineThickness, 0);
+ mAutoCorrectionUnderlineColor = typedArray.getColor(
+ com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
+
}
public SuggestionSpan(Parcel src) {
@@ -165,6 +183,8 @@
mEasyCorrectUnderlineThickness = src.readFloat();
mMisspelledUnderlineColor = src.readInt();
mMisspelledUnderlineThickness = src.readFloat();
+ mAutoCorrectionUnderlineColor = src.readInt();
+ mAutoCorrectionUnderlineThickness = src.readFloat();
}
/**
@@ -218,6 +238,8 @@
dest.writeFloat(mEasyCorrectUnderlineThickness);
dest.writeInt(mMisspelledUnderlineColor);
dest.writeFloat(mMisspelledUnderlineThickness);
+ dest.writeInt(mAutoCorrectionUnderlineColor);
+ dest.writeFloat(mAutoCorrectionUnderlineThickness);
}
@Override
@@ -261,6 +283,7 @@
public void updateDrawState(TextPaint tp) {
final boolean misspelled = (mFlags & FLAG_MISSPELLED) != 0;
final boolean easy = (mFlags & FLAG_EASY_CORRECT) != 0;
+ final boolean autoCorrection = (mFlags & FLAG_AUTO_CORRECTION) != 0;
if (easy) {
if (!misspelled) {
tp.setUnderlineText(mEasyCorrectUnderlineColor, mEasyCorrectUnderlineThickness);
@@ -269,6 +292,8 @@
// than just easy, do not apply misspelled if an easy (or a mispelled) has been set
tp.setUnderlineText(mMisspelledUnderlineColor, mMisspelledUnderlineThickness);
}
+ } else if (autoCorrection) {
+ tp.setUnderlineText(mAutoCorrectionUnderlineColor, mAutoCorrectionUnderlineThickness);
}
}
@@ -281,12 +306,15 @@
// The order here should match what is used in updateDrawState
final boolean misspelled = (mFlags & FLAG_MISSPELLED) != 0;
final boolean easy = (mFlags & FLAG_EASY_CORRECT) != 0;
+ final boolean autoCorrection = (mFlags & FLAG_AUTO_CORRECTION) != 0;
if (easy) {
if (!misspelled) {
return mEasyCorrectUnderlineColor;
} else {
return mMisspelledUnderlineColor;
}
+ } else if (autoCorrection) {
+ return mAutoCorrectionUnderlineColor;
}
return 0;
}
diff --git a/core/java/android/view/ActionMode.java b/core/java/android/view/ActionMode.java
index e954983..34e7d4d 100644
--- a/core/java/android/view/ActionMode.java
+++ b/core/java/android/view/ActionMode.java
@@ -153,6 +153,18 @@
public abstract MenuInflater getMenuInflater();
/**
+ * Returns whether the UI presenting this action mode can take focus or not.
+ * This is used by internal components within the framework that would otherwise
+ * present an action mode UI that requires focus, such as an EditText as a custom view.
+ *
+ * @return true if the UI used to show this action mode can take focus
+ * @hide Internal use only
+ */
+ public boolean isUiFocusable() {
+ return true;
+ }
+
+ /**
* Callback interface for action modes. Supplied to
* {@link View#startActionMode(Callback)}, a Callback
* configures and handles events raised by a user's interaction with an action mode.
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 3bd0f76..ad2283e 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -117,6 +117,11 @@
outSize.x = getRawWidth();
outSize.y = getRawHeight();
}
+ if (false) {
+ RuntimeException here = new RuntimeException("here");
+ here.fillInStackTrace();
+ Slog.v(TAG, "Returning display size: " + outSize, here);
+ }
if (DEBUG_DISPLAY_SIZE && doCompat) Slog.v(
TAG, "Returning display size: " + outSize);
} catch (RemoteException e) {
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 23d1b0f..b86d21d 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -184,6 +184,22 @@
abstract void setup(int width, int height);
/**
+ * Gets the current width of the surface. This is the width that the surface
+ * was last set to in a call to {@link #setup(int, int)}.
+ *
+ * @return the current width of the surface
+ */
+ abstract int getWidth();
+
+ /**
+ * Gets the current height of the surface. This is the height that the surface
+ * was last set to in a call to {@link #setup(int, int)}.
+ *
+ * @return the current width of the surface
+ */
+ abstract int getHeight();
+
+ /**
* Interface used to receive callbacks whenever a view is drawn by
* a hardware renderer instance.
*/
@@ -362,6 +378,7 @@
static EGLDisplay sEglDisplay;
static EGLConfig sEglConfig;
static final Object[] sEglLock = new Object[0];
+ int mWidth = -1, mHeight = -1;
static final ThreadLocal<EGLContext> sEglContextStorage = new ThreadLocal<EGLContext>();
@@ -714,9 +731,21 @@
void setup(int width, int height) {
if (validate()) {
mCanvas.setViewport(width, height);
+ mWidth = width;
+ mHeight = height;
}
}
+ @Override
+ int getWidth() {
+ return mWidth;
+ }
+
+ @Override
+ int getHeight() {
+ return mHeight;
+ }
+
boolean canDraw() {
return mGl != null && mCanvas != null;
}
diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl
index 0e482d6..715fa7b 100644
--- a/core/java/android/view/IWindow.aidl
+++ b/core/java/android/view/IWindow.aidl
@@ -74,5 +74,6 @@
/**
* System chrome visibility changes
*/
- void dispatchSystemUiVisibilityChanged(int visibility);
+ void dispatchSystemUiVisibilityChanged(int seq, int globalVisibility,
+ int localValue, int localChanges);
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 45f9da2..fe32a5f 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -192,11 +192,12 @@
int getPreferredOptionsPanelGravity();
/**
- * Lock the device orientation to the current rotation. Sensor input will
- * be ignored until thawRotation() is called.
+ * Lock the device orientation to the specified rotation, or to the
+ * current rotation if -1. Sensor input will be ignored until
+ * thawRotation() is called.
* @hide
*/
- void freezeRotation();
+ void freezeRotation(int rotation);
/**
* Release the orientation lock imposed by freezeRotation().
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 990af083..282d7be 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -34,10 +34,10 @@
* {@hide}
*/
interface IWindowSession {
- int add(IWindow window, in WindowManager.LayoutParams attrs,
+ int add(IWindow window, int seq, in WindowManager.LayoutParams attrs,
in int viewVisibility, out Rect outContentInsets,
out InputChannel outInputChannel);
- int addWithoutInputChannel(IWindow window, in WindowManager.LayoutParams attrs,
+ int addWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs,
in int viewVisibility, out Rect outContentInsets);
void remove(IWindow window);
@@ -49,6 +49,7 @@
* to draw the window's contents.
*
* @param window The window being modified.
+ * @param seq Ordering sequence number.
* @param attrs If non-null, new attributes to apply to the window.
* @param requestedWidth The width the window wants to be.
* @param requestedHeight The height the window wants to be.
@@ -77,7 +78,7 @@
* @return int Result flags: {@link WindowManagerImpl#RELAYOUT_SHOW_FOCUS},
* {@link WindowManagerImpl#RELAYOUT_FIRST_TIME}.
*/
- int relayout(IWindow window, in WindowManager.LayoutParams attrs,
+ int relayout(IWindow window, int seq, in WindowManager.LayoutParams attrs,
int requestedWidth, int requestedHeight, int viewVisibility,
boolean insetsPending, out Rect outFrame, out Rect outContentInsets,
out Rect outVisibleInsets, out Configuration outConfig,
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index cbdb38e..9a57ea0 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -266,7 +266,7 @@
try {
DisplayMetrics metrics = getResources().getDisplayMetrics();
mLayout.x = metrics.widthPixels * 3;
- mSession.relayout(mWindow, mLayout, mWidth, mHeight, VISIBLE, false,
+ mSession.relayout(mWindow, mWindow.mSeq, mLayout, mWidth, mHeight, VISIBLE, false,
mWinFrame, mContentInsets, mVisibleInsets, mConfiguration, mSurface);
} catch (RemoteException e) {
// Ignore
@@ -492,7 +492,7 @@
mWindow = new MyWindow(this);
mLayout.type = mWindowType;
mLayout.gravity = Gravity.LEFT|Gravity.TOP;
- mSession.addWithoutInputChannel(mWindow, mLayout,
+ mSession.addWithoutInputChannel(mWindow, mWindow.mSeq, mLayout,
mVisible ? VISIBLE : GONE, mContentInsets);
}
@@ -513,7 +513,7 @@
mDrawingStopped = !visible;
final int relayoutResult = mSession.relayout(
- mWindow, mLayout, mWidth, mHeight,
+ mWindow, mWindow.mSeq, mLayout, mWidth, mHeight,
visible ? VISIBLE : GONE, false, mWinFrame, mContentInsets,
mVisibleInsets, mConfiguration, mSurface);
if ((relayoutResult&WindowManagerImpl.RELAYOUT_FIRST_TIME) != 0) {
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index c974ba1..1697382 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -250,6 +250,11 @@
return LAYER_TYPE_HARDWARE;
}
+ @Override
+ boolean hasStaticLayer() {
+ return true;
+ }
+
/**
* Calling this method has no effect.
*/
@@ -497,9 +502,23 @@
* @see #isAvailable()
* @see #getBitmap(int, int)
* @see #getBitmap()
+ *
+ * @throws IllegalStateException if the hardware rendering context cannot be
+ * acquired to capture the bitmap
*/
public Bitmap getBitmap(Bitmap bitmap) {
if (bitmap != null && isAvailable()) {
+ AttachInfo info = mAttachInfo;
+ if (info != null && info.mHardwareRenderer != null &&
+ info.mHardwareRenderer.isEnabled()) {
+ if (!info.mHardwareRenderer.validate()) {
+ throw new IllegalStateException("Could not acquire hardware rendering context");
+ }
+ }
+
+ applyUpdate();
+ applyTransformMatrix();
+
mLayer.copyInto(bitmap);
}
return bitmap;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 2ebe756..86be28a 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -94,20 +94,10 @@
* their layout properties.
* </p>
*
- * <div class="special">
- * <p>For an introduction to using this class to develop your
- * application's user interface, read the Developer Guide documentation on
- * <strong><a href="{@docRoot}guide/topics/ui/index.html">User Interface</a></strong>. Special topics
- * include:
- * <br/><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a>
- * <br/><a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a>
- * <br/><a href="{@docRoot}guide/topics/ui/layout-objects.html">Common Layout Objects</a>
- * <br/><a href="{@docRoot}guide/topics/ui/binding.html">Binding to Data with AdapterView</a>
- * <br/><a href="{@docRoot}guide/topics/ui/ui-events.html">Handling UI Events</a>
- * <br/><a href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>
- * <br/><a href="{@docRoot}guide/topics/ui/custom-components.html">Building Custom Components</a>
- * <br/><a href="{@docRoot}guide/topics/ui/how-android-draws.html">How Android Draws Views</a>.
- * </p>
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about using this class to develop your application's user interface,
+ * read the <a href="{@docRoot}guide/topics/ui/index.html">User Interface</a> developer guide.
* </div>
*
* <a name="Using"></a>
@@ -1487,6 +1477,19 @@
}
/**
+ * Accessibility event types that are dispatched for text population.
+ */
+ private static final int POPULATING_ACCESSIBILITY_EVENT_TYPES =
+ AccessibilityEvent.TYPE_VIEW_CLICKED
+ | AccessibilityEvent.TYPE_VIEW_LONG_CLICKED
+ | AccessibilityEvent.TYPE_VIEW_SELECTED
+ | AccessibilityEvent.TYPE_VIEW_FOCUSED
+ | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
+ | AccessibilityEvent.TYPE_VIEW_HOVER_ENTER
+ | AccessibilityEvent.TYPE_VIEW_HOVER_EXIT
+ | AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED;
+
+ /**
* Temporary Rect currently for use in setBackground(). This will probably
* be extended in the future to hold our own class with more than just
* a Rect. :)
@@ -1923,6 +1926,15 @@
public static final int PUBLIC_STATUS_BAR_VISIBILITY_MASK = 0x0000FFFF;
/**
+ * These are the system UI flags that can be cleared by events outside
+ * of an application. Currently this is just the ability to tap on the
+ * screen while hiding the navigation bar to have it return.
+ * @hide
+ */
+ public static final int SYSTEM_UI_CLEARABLE_FLAGS =
+ SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+
+ /**
* Find views that render the specified text.
*
* @see #findViewsWithText(ArrayList, CharSequence, int)
@@ -3333,7 +3345,9 @@
if (mOnLayoutChangeListeners == null) {
mOnLayoutChangeListeners = new ArrayList<OnLayoutChangeListener>();
}
- mOnLayoutChangeListeners.add(listener);
+ if (!mOnLayoutChangeListeners.contains(listener)) {
+ mOnLayoutChangeListeners.add(listener);
+ }
}
/**
@@ -3855,7 +3869,10 @@
return;
}
onInitializeAccessibilityEvent(event);
- dispatchPopulateAccessibilityEvent(event);
+ // Only a subset of accessibility events populates text content.
+ if ((event.getEventType() & POPULATING_ACCESSIBILITY_EVENT_TYPES) != 0) {
+ dispatchPopulateAccessibilityEvent(event);
+ }
// In the beginning we called #isShown(), so we know that getParent() is not null.
getParent().requestSendAccessibilityEvent(this, event);
}
@@ -3876,6 +3893,10 @@
* {@link AccessibilityDelegate#dispatchPopulateAccessibilityEvent(View, AccessibilityEvent)}
* is responsible for handling this call.
* </p>
+ * <p>
+ * <em>Note:</em> Accessibility events of certain types are not dispatched for
+ * populating the event text via this method. For details refer to {@link AccessibilityEvent}.
+ * </p>
*
* @param event The event.
*
@@ -3895,12 +3916,6 @@
* Note: Called from the default {@link AccessibilityDelegate}.
*/
boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
- // Do not populate text to scroll events. They describe position change
- // and usually come from container with a lot of text which is not very
- // informative for accessibility purposes. Also they are fired frequently.
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- return true;
- }
onPopulateAccessibilityEvent(event);
return false;
}
@@ -3998,23 +4013,13 @@
event.setEnabled(isEnabled());
event.setContentDescription(mContentDescription);
- final int eventType = event.getEventType();
- switch (eventType) {
- case AccessibilityEvent.TYPE_VIEW_FOCUSED: {
- if (mAttachInfo != null) {
- ArrayList<View> focusablesTempList = mAttachInfo.mFocusablesTempList;
- getRootView().addFocusables(focusablesTempList, View.FOCUS_FORWARD,
- FOCUSABLES_ALL);
- event.setItemCount(focusablesTempList.size());
- event.setCurrentItemIndex(focusablesTempList.indexOf(this));
- focusablesTempList.clear();
- }
- } break;
- case AccessibilityEvent.TYPE_VIEW_SCROLLED: {
- event.setScrollX(mScrollX);
- event.setScrollY(mScrollY);
- event.setItemCount(getHeight());
- } break;
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && mAttachInfo != null) {
+ ArrayList<View> focusablesTempList = mAttachInfo.mFocusablesTempList;
+ getRootView().addFocusables(focusablesTempList, View.FOCUS_FORWARD,
+ FOCUSABLES_ALL);
+ event.setItemCount(focusablesTempList.size());
+ event.setCurrentItemIndex(focusablesTempList.indexOf(this));
+ focusablesTempList.clear();
}
}
@@ -10001,6 +10006,15 @@
}
/**
+ * Indicates whether this view has a static layer. A view with layer type
+ * {@link #LAYER_TYPE_NONE} is a static layer. Other types of layers are
+ * dynamic.
+ */
+ boolean hasStaticLayer() {
+ return mLayerType == LAYER_TYPE_NONE;
+ }
+
+ /**
* Indicates what type of layer is currently associated with this view. By default
* a view does not have a layer, and the layer type is {@link #LAYER_TYPE_NONE}.
* Refer to the documentation of {@link #setLayerType(int, android.graphics.Paint)}
@@ -10112,6 +10126,14 @@
return mHardwareLayer;
}
+ /**
+ * Destroys this View's hardware layer if possible.
+ *
+ * @return True if the layer was destroyed, false otherwise.
+ *
+ * @see #setLayerType(int, android.graphics.Paint)
+ * @see #LAYER_TYPE_HARDWARE
+ */
boolean destroyLayer() {
if (mHardwareLayer != null) {
mHardwareLayer.destroy();
@@ -12084,6 +12106,39 @@
}
/**
+ * Finds a view by its unuque and stable accessibility id.
+ *
+ * @param accessibilityId The searched accessibility id.
+ * @return The found view.
+ */
+ final View findViewByAccessibilityId(int accessibilityId) {
+ if (accessibilityId < 0) {
+ return null;
+ }
+ return findViewByAccessibilityIdTraversal(accessibilityId);
+ }
+
+ /**
+ * Performs the traversal to find a view by its unuque and stable accessibility id.
+ *
+ * <strong>Note:</strong>This method does not stop at the root namespace
+ * boundary since the user can touch the screen at an arbitrary location
+ * potentially crossing the root namespace bounday which will send an
+ * accessibility event to accessibility services and they should be able
+ * to obtain the event source. Also accessibility ids are guaranteed to be
+ * unique in the window.
+ *
+ * @param accessibilityId The accessibility id.
+ * @return The found view.
+ */
+ View findViewByAccessibilityIdTraversal(int accessibilityId) {
+ if (getAccessibilityViewId() == accessibilityId) {
+ return this;
+ }
+ return null;
+ }
+
+ /**
* Look for a child view with the given tag. If this view has the given
* tag, return this view.
*
@@ -12982,6 +13037,8 @@
}
/**
+ * Dispatch callbacks to {@link #setOnSystemUiVisibilityChangeListener} down
+ * the view hierarchy.
*/
public void dispatchSystemUiVisibilityChanged(int visibility) {
if (mOnSystemUiVisibilityChangeListener != null) {
@@ -12990,6 +13047,13 @@
}
}
+ void updateLocalSystemUiVisibility(int localValue, int localChanges) {
+ int val = (mSystemUiVisibility&~localChanges) | (localValue&localChanges);
+ if (val != mSystemUiVisibility) {
+ setSystemUiVisibility(val);
+ }
+ }
+
/**
* Creates an image that the system displays during the drag and drop
* operation. This is called a "drag shadow". The default implementation
@@ -14063,7 +14127,8 @@
/**
* Interface definition for a callback to be invoked when the status bar changes
- * visibility.
+ * visibility. This reports <strong>global</strong> changes to the system UI
+ * state, not just what the application is requesting.
*
* @see View#setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener)
*/
@@ -14073,7 +14138,9 @@
* {@link View#setSystemUiVisibility(int)}.
*
* @param visibility Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE} or
- * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}.
+ * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}. This tells you the
+ * <strong>global</strong> state of the UI visibility flags, not what your
+ * app is currently applying.
*/
public void onSystemUiVisibilityChange(int visibility);
}
@@ -14331,6 +14398,11 @@
boolean mRecomputeGlobalAttributes;
/**
+ * Always report new attributes at next traversal.
+ */
+ boolean mForceReportNewAttributes;
+
+ /**
* Set during a traveral if any views want to keep the screen on.
*/
boolean mKeepScreenOn;
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index ddb982a..9266ae2 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -821,6 +821,24 @@
}
}
+ @Override
+ View findViewByAccessibilityIdTraversal(int accessibilityId) {
+ View foundView = super.findViewByAccessibilityIdTraversal(accessibilityId);
+ if (foundView != null) {
+ return foundView;
+ }
+ final int childrenCount = mChildrenCount;
+ final View[] children = mChildren;
+ for (int i = 0; i < childrenCount; i++) {
+ View child = children[i];
+ foundView = child.findViewByAccessibilityIdTraversal(accessibilityId);
+ if (foundView != null) {
+ return foundView;
+ }
+ }
+ return null;
+ }
+
/**
* {@inheritDoc}
*/
@@ -1182,6 +1200,18 @@
}
}
+ @Override
+ void updateLocalSystemUiVisibility(int localValue, int localChanges) {
+ super.updateLocalSystemUiVisibility(localValue, localChanges);
+
+ final int count = mChildrenCount;
+ final View[] children = mChildren;
+ for (int i=0; i <count; i++) {
+ final View child = children[i];
+ child.updateLocalSystemUiVisibility(localValue, localChanges);
+ }
+ }
+
/**
* {@inheritDoc}
*/
@@ -2560,8 +2590,8 @@
final View[] children = mChildren;
for (int i = 0; i < count; i++) {
final View child = children[i];
- if (((child.mViewFlags & VISIBILITY_MASK) == VISIBLE ||
- child.getAnimation() != null) && child.getLayerType() == LAYER_TYPE_NONE) {
+ if (((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) &&
+ child.hasStaticLayer()) {
child.mRecreateDisplayList = (child.mPrivateFlags & INVALIDATED) == INVALIDATED;
child.mPrivateFlags &= ~INVALIDATED;
child.getDisplayList();
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 9cb4e5e..7eae739 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -74,7 +74,6 @@
import android.widget.Scroller;
import com.android.internal.policy.PolicyManager;
-import com.android.internal.util.Predicate;
import com.android.internal.view.BaseSurfaceHolder;
import com.android.internal.view.IInputMethodCallback;
import com.android.internal.view.IInputMethodSession;
@@ -166,6 +165,8 @@
final int mTargetSdkVersion;
+ int mSeq;
+
View mView;
View mFocusedView;
View mRealFocusedView; // this is not set to null in touch mode
@@ -309,6 +310,13 @@
return sWindowSession;
}
}
+
+ static final class SystemUiVisibilityInfo {
+ int seq;
+ int globalVisibility;
+ int localValue;
+ int localChanges;
+ }
public ViewRootImpl(Context context) {
super();
@@ -466,7 +474,7 @@
}
try {
mOrigWindowType = mWindowAttributes.type;
- res = sWindowSession.add(mWindow, mWindowAttributes,
+ res = sWindowSession.add(mWindow, mSeq, mWindowAttributes,
getHostVisibility(), mAttachInfo.mContentInsets,
mInputChannel);
} catch (RemoteException e) {
@@ -861,7 +869,6 @@
CompatibilityInfo compatibilityInfo = mCompatibilityInfo.get();
if (compatibilityInfo.supportsScreen() == mLastInCompatMode) {
params = lp;
- windowAttributesChanges |= WindowManager.LayoutParams.BUFFER_CHANGED;
fullRedrawNeeded = true;
mLayoutRequested = true;
if (mLastInCompatMode) {
@@ -1046,16 +1053,21 @@
attachInfo.mRecomputeGlobalAttributes = false;
boolean oldScreenOn = attachInfo.mKeepScreenOn;
int oldVis = attachInfo.mSystemUiVisibility;
+ boolean oldHasSystemUiListeners = attachInfo.mHasSystemUiListeners;
attachInfo.mKeepScreenOn = false;
attachInfo.mSystemUiVisibility = 0;
attachInfo.mHasSystemUiListeners = false;
host.dispatchCollectViewAttributes(0);
if (attachInfo.mKeepScreenOn != oldScreenOn
|| attachInfo.mSystemUiVisibility != oldVis
- || attachInfo.mHasSystemUiListeners) {
+ || attachInfo.mHasSystemUiListeners != oldHasSystemUiListeners) {
params = lp;
}
}
+ if (attachInfo.mForceReportNewAttributes) {
+ attachInfo.mForceReportNewAttributes = false;
+ params = lp;
+ }
if (mFirst || attachInfo.mViewVisibilityChanged) {
attachInfo.mViewVisibilityChanged = false;
@@ -1079,7 +1091,6 @@
~WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST) |
resizeMode;
params = lp;
- windowAttributesChanges |= WindowManager.LayoutParams.BUFFER_CHANGED;
}
}
}
@@ -1137,9 +1148,7 @@
params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
}
params.subtreeSystemUiVisibility = attachInfo.mSystemUiVisibility;
- params.hasSystemUiListeners = attachInfo.mHasSystemUiListeners
- || params.subtreeSystemUiVisibility != 0
- || params.systemUiVisibility != 0;
+ params.hasSystemUiListeners = attachInfo.mHasSystemUiListeners;
}
if (DEBUG_LAYOUT) {
Log.i(TAG, "host=w:" + host.getMeasuredWidth() + ", h:" +
@@ -1376,13 +1385,15 @@
}
}
- if (hwInitialized || ((windowShouldResize || (params != null &&
- (windowAttributesChanges & WindowManager.LayoutParams.BUFFER_CHANGED) != 0)) &&
- mAttachInfo.mHardwareRenderer != null &&
- mAttachInfo.mHardwareRenderer.isEnabled())) {
- mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight);
- if (!hwInitialized && mAttachInfo.mHardwareRenderer.isEnabled()) {
- mAttachInfo.mHardwareRenderer.invalidate(mHolder);
+ if (mAttachInfo.mHardwareRenderer != null &&
+ mAttachInfo.mHardwareRenderer.isEnabled()) {
+ if (hwInitialized || windowShouldResize ||
+ mWidth != mAttachInfo.mHardwareRenderer.getWidth() ||
+ mHeight != mAttachInfo.mHardwareRenderer.getHeight()) {
+ mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight);
+ if (!hwInitialized) {
+ mAttachInfo.mHardwareRenderer.invalidate(mHolder);
+ }
}
}
@@ -2546,7 +2557,7 @@
handleDragEvent(event);
} break;
case DISPATCH_SYSTEM_UI_VISIBILITY: {
- handleDispatchSystemUiVisibilityChanged(msg.arg1);
+ handleDispatchSystemUiVisibilityChanged((SystemUiVisibilityInfo)msg.obj);
} break;
case UPDATE_CONFIGURATION: {
Configuration config = (Configuration)msg.obj;
@@ -3430,12 +3441,27 @@
event.recycle();
}
- public void handleDispatchSystemUiVisibilityChanged(int visibility) {
- if (mView == null) return;
- if (mAttachInfo != null) {
- mAttachInfo.mSystemUiVisibility = visibility;
+ public void handleDispatchSystemUiVisibilityChanged(SystemUiVisibilityInfo args) {
+ if (mSeq != args.seq) {
+ // The sequence has changed, so we need to update our value and make
+ // sure to do a traversal afterward so the window manager is given our
+ // most recent data.
+ mSeq = args.seq;
+ mAttachInfo.mForceReportNewAttributes = true;
+ scheduleTraversals();
}
- mView.dispatchSystemUiVisibilityChanged(visibility);
+ if (mView == null) return;
+ if (args.localChanges != 0) {
+ if (mAttachInfo != null) {
+ mAttachInfo.mSystemUiVisibility =
+ (mAttachInfo.mSystemUiVisibility&~args.localChanges)
+ | (args.localValue&args.localChanges);
+ }
+ mView.updateLocalSystemUiVisibility(args.localValue, args.localChanges);
+ mAttachInfo.mRecomputeGlobalAttributes = true;
+ scheduleTraversals();
+ }
+ mView.dispatchSystemUiVisibilityChanged(args.globalVisibility);
}
public void getLastTouchPoint(Point outLocation) {
@@ -3494,7 +3520,7 @@
}
}
int relayoutResult = sWindowSession.relayout(
- mWindow, params,
+ mWindow, mSeq, params,
(int) (mView.getMeasuredWidth() * appScale + 0.5f),
(int) (mView.getMeasuredHeight() * appScale + 0.5f),
viewVisibility, insetsPending, mWinFrame,
@@ -3797,8 +3823,14 @@
sendMessage(msg);
}
- public void dispatchSystemUiVisibilityChanged(int visibility) {
- sendMessage(obtainMessage(DISPATCH_SYSTEM_UI_VISIBILITY, visibility, 0));
+ public void dispatchSystemUiVisibilityChanged(int seq, int globalVisibility,
+ int localValue, int localChanges) {
+ SystemUiVisibilityInfo args = new SystemUiVisibilityInfo();
+ args.seq = seq;
+ args.globalVisibility = globalVisibility;
+ args.localValue = localValue;
+ args.localChanges = localChanges;
+ sendMessage(obtainMessage(DISPATCH_SYSTEM_UI_VISIBILITY, args));
}
/**
@@ -4053,10 +4085,12 @@
}
}
- public void dispatchSystemUiVisibilityChanged(int visibility) {
+ public void dispatchSystemUiVisibilityChanged(int seq, int globalVisibility,
+ int localValue, int localChanges) {
final ViewRootImpl viewAncestor = mViewAncestor.get();
if (viewAncestor != null) {
- viewAncestor.dispatchSystemUiVisibilityChanged(visibility);
+ viewAncestor.dispatchSystemUiVisibilityChanged(seq, globalVisibility,
+ localValue, localChanges);
}
}
}
@@ -4462,9 +4496,6 @@
final class AccessibilityInteractionController {
private static final int POOL_SIZE = 5;
- private FindByAccessibilitytIdPredicate mFindByAccessibilityIdPredicate =
- new FindByAccessibilitytIdPredicate();
-
private ArrayList<AccessibilityNodeInfo> mTempAccessibilityNodeInfoList =
new ArrayList<AccessibilityNodeInfo>();
@@ -4551,11 +4582,8 @@
AccessibilityNodeInfo info = null;
try {
- FindByAccessibilitytIdPredicate predicate = mFindByAccessibilityIdPredicate;
- predicate.init(accessibilityId);
- View root = ViewRootImpl.this.mView;
- View target = root.findViewByPredicate(predicate);
- if (target != null && target.getVisibility() == View.VISIBLE) {
+ View target = findViewByAccessibilityId(accessibilityId);
+ if (target != null) {
info = target.createAccessibilityNodeInfo();
}
} finally {
@@ -4794,25 +4822,12 @@
if (root == null) {
return null;
}
- mFindByAccessibilityIdPredicate.init(accessibilityId);
- View foundView = root.findViewByPredicate(mFindByAccessibilityIdPredicate);
- if (foundView == null || foundView.getVisibility() != View.VISIBLE) {
+ View foundView = root.findViewByAccessibilityId(accessibilityId);
+ if (foundView != null && foundView.getVisibility() != View.VISIBLE) {
return null;
}
return foundView;
}
-
- private final class FindByAccessibilitytIdPredicate implements Predicate<View> {
- public int mSearchedId;
-
- public void init(int searchedId) {
- mSearchedId = searchedId;
- }
-
- public boolean apply(View view) {
- return (view.getAccessibilityViewId() == mSearchedId);
- }
- }
}
private class SendWindowContentChangedAccessibilityEvent implements Runnable {
@@ -4820,18 +4835,7 @@
public void run() {
if (mView != null) {
- // Check again for accessibility state since this is executed delayed.
- AccessibilityManager accessibilityManager =
- AccessibilityManager.getInstance(mView.mContext);
- if (accessibilityManager.isEnabled()) {
- // Send the event directly since we do not want to append the
- // source text because this is the text for the entire window
- // and we just want to notify that the content has changed.
- AccessibilityEvent event = AccessibilityEvent.obtain(
- AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
- mView.onInitializeAccessibilityEvent(event);
- accessibilityManager.sendAccessibilityEvent(event);
- }
+ mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
mIsPending = false;
}
}
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 75c7592..d0841dd 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -26,6 +26,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.SystemProperties;
import android.util.Slog;
import android.view.accessibility.AccessibilityEvent;
@@ -472,11 +473,14 @@
}
private class LocalWindowManager extends WindowManagerImpl.CompatModeWrapper {
+ private static final String PROPERTY_HARDWARE_UI = "persist.sys.ui.hw";
+
private final boolean mHardwareAccelerated;
LocalWindowManager(WindowManager wm, boolean hardwareAccelerated) {
super(wm, getCompatInfo(mContext));
- mHardwareAccelerated = hardwareAccelerated;
+ mHardwareAccelerated = hardwareAccelerated ||
+ SystemProperties.getBoolean(PROPERTY_HARDWARE_UI, false);
}
public boolean isHardwareAccelerated() {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 17a516c..e8ab227 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -416,6 +416,13 @@
public static final int TYPE_BOOT_PROGRESS = FIRST_SYSTEM_WINDOW+21;
/**
+ * Window type: Fake window to consume touch events when the navigation
+ * bar is hidden.
+ * @hide
+ */
+ public static final int TYPE_HIDDEN_NAV_CONSUMER = FIRST_SYSTEM_WINDOW+22;
+
+ /**
* End of types of system windows.
*/
public static final int LAST_SYSTEM_WINDOW = 2999;
@@ -1260,8 +1267,6 @@
/** {@hide} */
public static final int PRIVATE_FLAGS_CHANGED = 1<<16;
/** {@hide} */
- public static final int BUFFER_CHANGED = 1<<17;
- /** {@hide} */
public static final int EVERYTHING_CHANGED = 0xffffffff;
// internal buffer to backup/restore parameters under compatibility mode.
@@ -1272,11 +1277,11 @@
if (width != o.width) {
width = o.width;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (height != o.height) {
height = o.height;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (x != o.x) {
x = o.x;
@@ -1288,19 +1293,19 @@
}
if (horizontalWeight != o.horizontalWeight) {
horizontalWeight = o.horizontalWeight;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (verticalWeight != o.verticalWeight) {
verticalWeight = o.verticalWeight;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (horizontalMargin != o.horizontalMargin) {
horizontalMargin = o.horizontalMargin;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (verticalMargin != o.verticalMargin) {
verticalMargin = o.verticalMargin;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (type != o.type) {
type = o.type;
@@ -1308,7 +1313,7 @@
}
if (flags != o.flags) {
flags = o.flags;
- changes |= FLAGS_CHANGED | BUFFER_CHANGED;
+ changes |= FLAGS_CHANGED;
}
if (privateFlags != o.privateFlags) {
privateFlags = o.privateFlags;
@@ -1320,11 +1325,11 @@
}
if (gravity != o.gravity) {
gravity = o.gravity;
- changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
+ changes |= LAYOUT_CHANGED;
}
if (format != o.format) {
format = o.format;
- changes |= FORMAT_CHANGED | BUFFER_CHANGED;
+ changes |= FORMAT_CHANGED;
}
if (windowAnimations != o.windowAnimations) {
windowAnimations = o.windowAnimations;
@@ -1363,7 +1368,7 @@
if (screenOrientation != o.screenOrientation) {
screenOrientation = o.screenOrientation;
- changes |= SCREEN_ORIENTATION_CHANGED | BUFFER_CHANGED;
+ changes |= SCREEN_ORIENTATION_CHANGED;
}
if (systemUiVisibility != o.systemUiVisibility
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 4f67675..17bdff2 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -23,6 +23,7 @@
import android.graphics.RectF;
import android.os.IBinder;
import android.os.LocalPowerManager;
+import android.os.Looper;
import android.view.animation.Animation;
import java.io.FileDescriptor;
@@ -103,23 +104,23 @@
*/
public final static String EXTRA_HDMI_PLUGGED_STATE = "state";
- // flags for interceptKeyTq
/**
- * Pass this event to the user / app. To be returned from {@link #interceptKeyTq}.
+ * Pass this event to the user / app. To be returned from
+ * {@link #interceptKeyBeforeQueueing}.
*/
public final static int ACTION_PASS_TO_USER = 0x00000001;
/**
* This key event should extend the user activity timeout and turn the lights on.
- * To be returned from {@link #interceptKeyTq}. Do not return this and
- * {@link #ACTION_GO_TO_SLEEP} or {@link #ACTION_PASS_TO_USER}.
+ * To be returned from {@link #interceptKeyBeforeQueueing}.
+ * Do not return this and {@link #ACTION_GO_TO_SLEEP} or {@link #ACTION_PASS_TO_USER}.
*/
public final static int ACTION_POKE_USER_ACTIVITY = 0x00000002;
/**
* This key event should put the device to sleep (and engage keyguard if necessary)
- * To be returned from {@link #interceptKeyTq}. Do not return this and
- * {@link #ACTION_POKE_USER_ACTIVITY} or {@link #ACTION_PASS_TO_USER}.
+ * To be returned from {@link #interceptKeyBeforeQueueing}.
+ * Do not return this and {@link #ACTION_POKE_USER_ACTIVITY} or {@link #ACTION_PASS_TO_USER}.
*/
public final static int ACTION_GO_TO_SLEEP = 0x00000004;
@@ -237,6 +238,12 @@
public WindowManager.LayoutParams getAttrs();
/**
+ * Retrieve the current system UI visibility flags associated with
+ * this window.
+ */
+ public int getSystemUiVisibility();
+
+ /**
* Get the layer at which this window's surface will be Z-ordered.
*/
public int getSurfaceLayer();
@@ -309,6 +316,36 @@
}
/**
+ * Representation of a "fake window" that the policy has added to the
+ * window manager to consume events.
+ */
+ public interface FakeWindow {
+ /**
+ * Remove the fake window from the window manager.
+ */
+ void dismiss();
+ }
+
+ /**
+ * Interface for calling back in to the window manager that is private
+ * between it and the policy.
+ */
+ public interface WindowManagerFuncs {
+ /**
+ * Ask the window manager to re-evaluate the system UI flags.
+ */
+ public void reevaluateStatusBarVisibility();
+
+ /**
+ * Add a fake window to the window manager. This window sits
+ * at the top of the other windows and consumes events.
+ */
+ public FakeWindow addFakeWindow(Looper looper, InputHandler inputHandler,
+ String name, int windowType, int layoutParamsFlags, boolean canReceiveKeys,
+ boolean hasFocus, boolean touchFullscreen);
+ }
+
+ /**
* Bit mask that is set for all enter transition.
*/
public final int TRANSIT_ENTER_MASK = 0x1000;
@@ -389,6 +426,7 @@
* @param powerManager
*/
public void init(Context context, IWindowManager windowManager,
+ WindowManagerFuncs windowManagerFuncs,
LocalPowerManager powerManager);
/**
@@ -639,10 +677,12 @@
* event will normally go.
* @param event The key event.
* @param policyFlags The policy flags associated with the key.
- * @return Returns true if the policy consumed the event and it should
- * not be further dispatched.
+ * @return 0 if the key should be dispatched immediately, -1 if the key should
+ * not be dispatched ever, or a positive value indicating the number of
+ * milliseconds by which the key dispatch should be delayed before trying
+ * again.
*/
- public boolean interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags);
+ public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags);
/**
* Called from the input dispatcher thread when an application did not handle
@@ -756,7 +796,7 @@
/**
* A new window has been focused.
*/
- public void focusChanged(WindowState lastFocus, WindowState newFocus);
+ public int focusChangedLw(WindowState lastFocus, WindowState newFocus);
/**
* Called after the screen turns off.
@@ -962,6 +1002,14 @@
public void setUserRotationMode(int mode, int rotation);
/**
+ * Called when a new system UI visibility is being reported, allowing
+ * the policy to adjust what is actually reported.
+ * @param visibility The raw visiblity reported by the status bar.
+ * @return The new desired visibility.
+ */
+ public int adjustSystemUiVisibilityLw(int visibility);
+
+ /**
* Print the WindowManagerPolicy's state into the given stream.
*
* @param prefix Text to print at the front of each line.
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index c93b564..86dd9df 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -69,14 +69,26 @@
* <em>Type:</em>{@link #TYPE_VIEW_CLICKED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #isChecked()} - Whether the source is checked.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
* </ul>
* </p>
* <p>
@@ -85,14 +97,26 @@
* <em>Type:</em>{@link #TYPE_VIEW_LONG_CLICKED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #isChecked()} - Whether the source is checked.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
* </ul>
* </p>
* <p>
@@ -101,16 +125,28 @@
* <em>Type:</em> {@link #TYPE_VIEW_SELECTED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #isChecked()} - Whether the source is checked.</li>
* <li>{@link #getItemCount()} - The number of selectable items of the source.</li>
* <li>{@link #getCurrentItemIndex()} - The currently selected item index.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
* </ul>
* </p>
* <p>
@@ -119,16 +155,28 @@
* <em>Type:</em> {@link #TYPE_VIEW_FOCUSED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #isChecked()} - Whether the source is checked.</li>
* <li>{@link #getItemCount()} - The number of focusable items on the screen.</li>
* <li>{@link #getCurrentItemIndex()} - The currently focused item index.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
* </ul>
* </p>
* <p>
@@ -137,6 +185,7 @@
* <em>Type:</em> {@link #TYPE_VIEW_TEXT_CHANGED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
@@ -149,6 +198,7 @@
* <li>{@link #getAddedCount()} - The number of added characters.</li>
* <li>{@link #getRemovedCount()} - The number of removed characters.</li>
* <li>{@link #getBeforeText()} - The text of the source before the change.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
* </ul>
* </p>
* <p>
@@ -157,96 +207,236 @@
* <em>Type:</em> {@link #TYPE_VIEW_TEXT_SELECTION_CHANGED} </br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
* <li>{@link #getText()} - The text of the source.</li>
- * <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #getFromIndex()} - The selection start index.</li>
* <li>{@link #getToIndex()} - The selection end index.</li>
* <li>{@link #getItemCount()} - The length of the source text.</li>
+ * <li>{@link #isEnabled()} - Whether the source is enabled.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
* </ul>
+ * <em>Note:</em> This event type is not dispatched to descendants though
+ * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
+ * source {@link android.view.View} and the sub-tree rooted at it will not receive
+ * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
+ * text content to such events is by setting the
+ * {@link android.R.styleable#View_contentDescription contentDescription} of the source
+ * view.</br>
* </p>
* <p>
* <b>View scrolled</b> - represents the event of scrolling a view. If
* the source is a descendant of {@link android.widget.AdapterView} the
* scroll is reported in terms of visible items - the first visible item,
* the last visible item, and the total items - because the the source
- * is unaware if its pixel size since its adapter is responsible for
+ * is unaware of its pixel size since its adapter is responsible for
* creating views. In all other cases the scroll is reported as the current
* scroll on the X and Y axis respectively plus the height of the source in
* pixels.</br>
* <em>Type:</em> {@link #TYPE_VIEW_SCROLLED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
- * <li>{@link #getScrollX()} - The horizontal offset of the source
- * (without descendants of AdapterView)).</li>
- * <li>{@link #getScrollY()} - The vertical offset of the source
- * (without descendants of AdapterView)).</li>
- * <li>{@link #getFromIndex()} - The index of the first visible item of the source
- * (for descendants of AdapterView).</li>
- * <li>{@link #getToIndex()} - The index of the last visible item of the source
- * (for descendants of AdapterView).</li>
- * <li>{@link #getItemCount()} - The total items of the source (for descendants of AdapterView)
- * or the height of the source in pixels (all other cases).</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
* </ul>
+ * <em>Note:</em> This event type is not dispatched to descendants though
+ * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
+ * source {@link android.view.View} and the sub-tree rooted at it will not receive
+ * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
+ * text content to such events is by setting the
+ * {@link android.R.styleable#View_contentDescription contentDescription} of the source
+ * view.</br>
* </p>
* <p>
* <b>TRANSITION TYPES</b></br>
* </p>
+ * <p>
* <b>Window state changed</b> - represents the event of opening a
* {@link android.widget.PopupWindow}, {@link android.view.Menu},
* {@link android.app.Dialog}, etc.</br>
* <em>Type:</em> {@link #TYPE_WINDOW_STATE_CHANGED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
+ * <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* </ul>
* </p>
* <p>
* <b>Window content changed</b> - represents the event of change in the
* content of a window. This change can be adding/removing view, changing
* a view size, etc.</br>
+ * </p>
* <p>
* <strong>Note:</strong> This event is fired only for the window source of the
- * last accessibility event different from {@link #TYPE_NOTIFICATION_STATE_CHANGED})
+ * last accessibility event different from {@link #TYPE_NOTIFICATION_STATE_CHANGED}
* and its purpose is to notify clients that the content of the user interaction
- * window has changed.
- * </p>
+ * window has changed.</br>
* <em>Type:</em> {@link #TYPE_WINDOW_CONTENT_CHANGED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getSource()} - The source info (for registered clients).</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
* </ul>
+ * <em>Note:</em> This event type is not dispatched to descendants though
+ * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
+ * source {@link android.view.View} and the sub-tree rooted at it will not receive
+ * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
+ * text content to such events is by setting the
+ * {@link android.R.styleable#View_contentDescription contentDescription} of the source
+ * view.</br>
+ * </p>
* <p>
* <b>NOTIFICATION TYPES</b></br>
+ * </p>
* <p>
* <b>Notification state changed</b> - represents the event showing
- * {@link android.app.Notification}.
+ * {@link android.app.Notification}.</br>
* <em>Type:</em> {@link #TYPE_NOTIFICATION_STATE_CHANGED}</br>
* <em>Properties:</em></br>
* <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #getParcelableData()} - The posted {@link android.app.Notification}.</li>
+ * <li>{@link #getText()} - Text for providing more context.</li>
* </ul>
+ * <em>Note:</em> This event type is not dispatched to descendants though
+ * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
+ * source {@link android.view.View} and the sub-tree rooted at it will not receive
+ * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
+ * text content to such events is by setting the
+ * {@link android.R.styleable#View_contentDescription contentDescription} of the source
+ * view.</br>
+ * </p>
+ * <p>
+ * <b>EXPLORATION TYPES</b></br>
+ * </p>
+ * <p>
+ * <b>View hover enter</b> - represents the event of beginning to hover
+ * over a {@link android.view.View}. The hover may be generated via
+ * exploring the screen by touch or via a pointing device.</br>
+ * <em>Type:</em> {@link #TYPE_VIEW_HOVER_ENTER}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * <li>{@link #getSource()} - The source info (for registered clients).</li>
+ * <li>{@link #getClassName()} - The class name of the source.</li>
+ * <li>{@link #getPackageName()} - The package name of the source.</li>
+ * <li>{@link #getEventTime()} - The event time.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
+ * <li>{@link #isEnabled()} - Whether the source is enabled.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
+ * </ul>
+ * </p>
+ * <b>View hover exit</b> - represents the event of stopping to hover
+ * over a {@link android.view.View}. The hover may be generated via
+ * exploring the screen by touch or via a pointing device.</br>
+ * <em>Type:</em> {@link #TYPE_VIEW_HOVER_EXIT}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * <li>{@link #getSource()} - The source info (for registered clients).</li>
+ * <li>{@link #getClassName()} - The class name of the source.</li>
+ * <li>{@link #getPackageName()} - The package name of the source.</li>
+ * <li>{@link #getEventTime()} - The event time.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
+ * <li>{@link #isEnabled()} - Whether the source is enabled.</li>
+ * <li>{@link #getContentDescription()} - The content description of the source.</li>
+ * <li>{@link #getScrollX()} - The offset of the source left edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getScrollY()} - The offset of the source top edge in pixels
+ * (without descendants of AdapterView).</li>
+ * <li>{@link #getFromIndex()} - The zero based index of the first visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getToIndex()} - The zero based index of the last visible item of the source,
+ * inclusive (for descendants of AdapterView).</li>
+ * <li>{@link #getItemCount()} - The total items of the source
+ * (for descendants of AdapterView).</li>
+ * </ul>
+ * </p>
+ * <p>
+ * <b>Touch exploration gesture start</b> - represents the event of starting a touch
+ * exploring gesture.</br>
+ * <em>Type:</em> {@link #TYPE_TOUCH_EXPLORATION_GESTURE_START}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * </ul>
+ * <em>Note:</em> This event type is not dispatched to descendants though
+ * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
+ * source {@link android.view.View} and the sub-tree rooted at it will not receive
+ * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
+ * text content to such events is by setting the
+ * {@link android.R.styleable#View_contentDescription contentDescription} of the source
+ * view.</br>
+ * </p>
+ * <p>
+ * <b>Touch exploration gesture end</b> - represents the event of ending a touch
+ * exploring gesture.</br>
+ * <em>Type:</em> {@link #TYPE_TOUCH_EXPLORATION_GESTURE_END}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * </ul>
+ * <em>Note:</em> This event type is not dispatched to descendants though
+ * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
+ * source {@link android.view.View} and the sub-tree rooted at it will not receive
+ * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
+ * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
+ * text content to such events is by setting the
+ * {@link android.R.styleable#View_contentDescription contentDescription} of the source
+ * view.</br>
* </p>
* <p>
* <b>Security note</b>
@@ -254,6 +444,7 @@
* Since an event contains the text of its source privacy can be compromised by leaking
* sensitive information such as passwords. To address this issue any event fired in response
* to manipulation of a PASSWORD field does NOT CONTAIN the text of the password.
+ * </p>
*
* @see android.view.accessibility.AccessibilityManager
* @see android.accessibilityservice.AccessibilityService
@@ -675,6 +866,8 @@
record.mToIndex = parcel.readInt();
record.mScrollX = parcel.readInt();
record.mScrollY = parcel.readInt();
+ record.mMaxScrollX = parcel.readInt();
+ record.mMaxScrollY = parcel.readInt();
record.mAddedCount = parcel.readInt();
record.mRemovedCount = parcel.readInt();
record.mClassName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
@@ -727,6 +920,8 @@
parcel.writeInt(record.mToIndex);
parcel.writeInt(record.mScrollX);
parcel.writeInt(record.mScrollY);
+ parcel.writeInt(record.mMaxScrollX);
+ parcel.writeInt(record.mMaxScrollY);
parcel.writeInt(record.mAddedCount);
parcel.writeInt(record.mRemovedCount);
TextUtils.writeToParcel(record.mClassName, parcel, flags);
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java
index afd7473..a4e0688 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -73,6 +73,8 @@
int mToIndex = UNDEFINED;
int mScrollX = UNDEFINED;
int mScrollY = UNDEFINED;
+ int mMaxScrollX = UNDEFINED;
+ int mMaxScrollY = UNDEFINED;
int mAddedCount= UNDEFINED;
int mRemovedCount = UNDEFINED;
@@ -348,18 +350,18 @@
}
/**
- * Gets the scroll position of the source along the X axis.
+ * Gets the scroll offset of the source left edge in pixels.
*
- * @return The scroll along the X axis.
+ * @return The scroll.
*/
public int getScrollX() {
return mScrollX;
}
/**
- * Sets the scroll position of the source along the X axis.
+ * Sets the scroll offset of the source left edge in pixels.
*
- * @param scrollX The scroll along the X axis.
+ * @param scrollX The scroll.
*/
public void setScrollX(int scrollX) {
enforceNotSealed();
@@ -367,18 +369,18 @@
}
/**
- * Gets the scroll position of the source along the Y axis.
+ * Gets the scroll offset of the source top edge in pixels.
*
- * @return The scroll along the Y axis.
+ * @return The scroll.
*/
public int getScrollY() {
return mScrollY;
}
/**
- * Sets the scroll position of the source along the Y axis.
+ * Sets the scroll offset of the source top edge in pixels.
*
- * @param scrollY The scroll along the Y axis.
+ * @param scrollY The scroll.
*/
public void setScrollY(int scrollY) {
enforceNotSealed();
@@ -386,6 +388,43 @@
}
/**
+ * Gets the max scroll offset of the source left edge in pixels.
+ *
+ * @return The max scroll.
+ */
+ public int getMaxScrollX() {
+ return mMaxScrollX;
+ }
+ /**
+ * Sets the max scroll offset of the source left edge in pixels.
+ *
+ * @param maxScrollX The max scroll.
+ */
+ public void setMaxScrollX(int maxScrollX) {
+ enforceNotSealed();
+ mMaxScrollX = maxScrollX;
+ }
+
+ /**
+ * Gets the max scroll offset of the source top edge in pixels.
+ *
+ * @return The max scroll.
+ */
+ public int getMaxScrollY() {
+ return mMaxScrollY;
+ }
+
+ /**
+ * Sets the max scroll offset of the source top edge in pixels.
+ *
+ * @param maxScrollY The max scroll.
+ */
+ public void setMaxScrollY(int maxScrollY) {
+ enforceNotSealed();
+ mMaxScrollY = maxScrollY;
+ }
+
+ /**
* Gets the number of added characters.
*
* @return The number of added characters.
@@ -658,6 +697,8 @@
mToIndex = record.mToIndex;
mScrollX = record.mScrollX;
mScrollY = record.mScrollY;
+ mMaxScrollX = record.mMaxScrollX;
+ mMaxScrollY = record.mMaxScrollY;
mAddedCount = record.mAddedCount;
mRemovedCount = record.mRemovedCount;
mClassName = record.mClassName;
@@ -682,6 +723,8 @@
mToIndex = UNDEFINED;
mScrollX = UNDEFINED;
mScrollY = UNDEFINED;
+ mMaxScrollX = UNDEFINED;
+ mMaxScrollY = UNDEFINED;
mAddedCount = UNDEFINED;
mRemovedCount = UNDEFINED;
mClassName = null;
@@ -711,6 +754,8 @@
builder.append("; ToIndex: " + mToIndex);
builder.append("; ScrollX: " + mScrollX);
builder.append("; ScrollY: " + mScrollY);
+ builder.append("; MaxScrollX: " + mMaxScrollX);
+ builder.append("; MaxScrollY: " + mMaxScrollY);
builder.append("; AddedCount: " + mAddedCount);
builder.append("; RemovedCount: " + mRemovedCount);
builder.append("; ParcelableData: " + mParcelableData);
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 28f54aa..2cc928f 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -43,7 +43,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
-import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charsets;
import java.security.PrivateKey;
@@ -472,8 +471,7 @@
/**
* We have received an SSL certificate for the main top-level page.
- *
- * !!!Called from the network thread!!!
+ * Used by the Android HTTP stack only.
*/
void certificate(SslCertificate certificate) {
if (mIsMainFrame) {
@@ -1171,12 +1169,7 @@
try {
X509Certificate cert = new X509CertImpl(certDER);
SslCertificate sslCert = new SslCertificate(cert);
- if (JniUtil.useChromiumHttpStack()) {
- sslError = SslError.SslErrorFromChromiumErrorCode(certError, sslCert,
- new URL(url).getHost());
- } else {
- sslError = new SslError(certError, cert, url);
- }
+ sslError = SslError.SslErrorFromChromiumErrorCode(certError, sslCert, url);
} catch (IOException e) {
// Can't get the certificate, not much to do.
Log.e(LOGTAG, "Can't get the certificate from WebKit, canceling");
@@ -1186,18 +1179,18 @@
if (SslCertLookupTable.getInstance().isAllowed(sslError)) {
nativeSslCertErrorProceed(handle);
+ mCallbackProxy.onProceededAfterSslError(sslError);
return;
}
SslErrorHandler handler = new SslErrorHandler() {
@Override
public void proceed() {
- SslCertLookupTable.getInstance().setIsAllowed(sslError, true);
+ SslCertLookupTable.getInstance().setIsAllowed(sslError);
nativeSslCertErrorProceed(handle);
}
@Override
public void cancel() {
- SslCertLookupTable.getInstance().setIsAllowed(sslError, false);
nativeSslCertErrorCancel(handle, certError);
}
};
@@ -1211,22 +1204,20 @@
* We delegate the request to CallbackProxy, and route its response to
* {@link #nativeSslClientCert(int, X509Certificate)}.
*/
- private void requestClientCert(int handle, byte[] host_and_port_bytes) {
- String host_and_port = new String(host_and_port_bytes, Charsets.UTF_8);
+ private void requestClientCert(int handle, String hostAndPort) {
SslClientCertLookupTable table = SslClientCertLookupTable.getInstance();
- if (table.IsAllowed(host_and_port)) {
+ if (table.IsAllowed(hostAndPort)) {
// previously allowed
nativeSslClientCert(handle,
- table.PrivateKey(host_and_port),
- table.CertificateChain(host_and_port));
- } else if (table.IsDenied(host_and_port)) {
+ table.PrivateKey(hostAndPort),
+ table.CertificateChain(hostAndPort));
+ } else if (table.IsDenied(hostAndPort)) {
// previously denied
nativeSslClientCert(handle, null, null);
} else {
// previously ignored or new
mCallbackProxy.onReceivedClientCertRequest(
- new ClientCertRequestHandler(this, handle, host_and_port, table),
- host_and_port);
+ new ClientCertRequestHandler(this, handle, hostAndPort, table), hostAndPort);
}
}
@@ -1276,7 +1267,8 @@
}
/**
- * Called by JNI when we load a page over SSL.
+ * Called by JNI when we recieve a certificate for the page's main resource.
+ * Used by the Chromium HTTP stack only.
*/
private void setCertificate(byte cert_der[]) {
try {
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 5ee90a4..75ee338 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -77,53 +77,54 @@
// Used to call startActivity during url override.
private final Context mContext;
- // Message Ids
- private static final int PAGE_STARTED = 100;
- private static final int RECEIVED_ICON = 101;
- private static final int RECEIVED_TITLE = 102;
- private static final int OVERRIDE_URL = 103;
- private static final int AUTH_REQUEST = 104;
- private static final int SSL_ERROR = 105;
- private static final int PROGRESS = 106;
- private static final int UPDATE_VISITED = 107;
- private static final int LOAD_RESOURCE = 108;
- private static final int CREATE_WINDOW = 109;
- private static final int CLOSE_WINDOW = 110;
- private static final int SAVE_PASSWORD = 111;
- private static final int JS_ALERT = 112;
- private static final int JS_CONFIRM = 113;
- private static final int JS_PROMPT = 114;
- private static final int JS_UNLOAD = 115;
- private static final int ASYNC_KEYEVENTS = 116;
- private static final int DOWNLOAD_FILE = 118;
- private static final int REPORT_ERROR = 119;
- private static final int RESEND_POST_DATA = 120;
- private static final int PAGE_FINISHED = 121;
- private static final int REQUEST_FOCUS = 122;
- private static final int SCALE_CHANGED = 123;
- private static final int RECEIVED_CERTIFICATE = 124;
- private static final int SWITCH_OUT_HISTORY = 125;
- private static final int EXCEEDED_DATABASE_QUOTA = 126;
- private static final int REACHED_APPCACHE_MAXSIZE = 127;
- private static final int JS_TIMEOUT = 128;
- private static final int ADD_MESSAGE_TO_CONSOLE = 129;
- private static final int GEOLOCATION_PERMISSIONS_SHOW_PROMPT = 130;
- private static final int GEOLOCATION_PERMISSIONS_HIDE_PROMPT = 131;
- private static final int RECEIVED_TOUCH_ICON_URL = 132;
- private static final int GET_VISITED_HISTORY = 133;
- private static final int OPEN_FILE_CHOOSER = 134;
- private static final int ADD_HISTORY_ITEM = 135;
- private static final int HISTORY_INDEX_CHANGED = 136;
- private static final int AUTH_CREDENTIALS = 137;
- private static final int SET_INSTALLABLE_WEBAPP = 138;
- private static final int NOTIFY_SEARCHBOX_LISTENERS = 139;
- private static final int AUTO_LOGIN = 140;
- private static final int CLIENT_CERT_REQUEST = 141;
- private static final int SEARCHBOX_IS_SUPPORTED_CALLBACK = 142;
- private static final int SEARCHBOX_DISPATCH_COMPLETE_CALLBACK= 143;
+ // Message IDs
+ private static final int PAGE_STARTED = 100;
+ private static final int RECEIVED_ICON = 101;
+ private static final int RECEIVED_TITLE = 102;
+ private static final int OVERRIDE_URL = 103;
+ private static final int AUTH_REQUEST = 104;
+ private static final int SSL_ERROR = 105;
+ private static final int PROGRESS = 106;
+ private static final int UPDATE_VISITED = 107;
+ private static final int LOAD_RESOURCE = 108;
+ private static final int CREATE_WINDOW = 109;
+ private static final int CLOSE_WINDOW = 110;
+ private static final int SAVE_PASSWORD = 111;
+ private static final int JS_ALERT = 112;
+ private static final int JS_CONFIRM = 113;
+ private static final int JS_PROMPT = 114;
+ private static final int JS_UNLOAD = 115;
+ private static final int ASYNC_KEYEVENTS = 116;
+ private static final int DOWNLOAD_FILE = 118;
+ private static final int REPORT_ERROR = 119;
+ private static final int RESEND_POST_DATA = 120;
+ private static final int PAGE_FINISHED = 121;
+ private static final int REQUEST_FOCUS = 122;
+ private static final int SCALE_CHANGED = 123;
+ private static final int RECEIVED_CERTIFICATE = 124;
+ private static final int SWITCH_OUT_HISTORY = 125;
+ private static final int EXCEEDED_DATABASE_QUOTA = 126;
+ private static final int REACHED_APPCACHE_MAXSIZE = 127;
+ private static final int JS_TIMEOUT = 128;
+ private static final int ADD_MESSAGE_TO_CONSOLE = 129;
+ private static final int GEOLOCATION_PERMISSIONS_SHOW_PROMPT = 130;
+ private static final int GEOLOCATION_PERMISSIONS_HIDE_PROMPT = 131;
+ private static final int RECEIVED_TOUCH_ICON_URL = 132;
+ private static final int GET_VISITED_HISTORY = 133;
+ private static final int OPEN_FILE_CHOOSER = 134;
+ private static final int ADD_HISTORY_ITEM = 135;
+ private static final int HISTORY_INDEX_CHANGED = 136;
+ private static final int AUTH_CREDENTIALS = 137;
+ private static final int SET_INSTALLABLE_WEBAPP = 138;
+ private static final int NOTIFY_SEARCHBOX_LISTENERS = 139;
+ private static final int AUTO_LOGIN = 140;
+ private static final int CLIENT_CERT_REQUEST = 141;
+ private static final int SEARCHBOX_IS_SUPPORTED_CALLBACK = 142;
+ private static final int SEARCHBOX_DISPATCH_COMPLETE_CALLBACK = 143;
+ private static final int PROCEEDED_AFTER_SSL_ERROR = 144;
// Message triggered by the client to resume execution
- private static final int NOTIFY = 200;
+ private static final int NOTIFY = 200;
// Result transportation object for returning results across thread
// boundaries.
@@ -349,6 +350,13 @@
}
break;
+ case PROCEEDED_AFTER_SSL_ERROR:
+ if (mWebViewClient != null) {
+ mWebViewClient.onProceededAfterSslError(mWebView,
+ (SslError) msg.obj);
+ }
+ break;
+
case CLIENT_CERT_REQUEST:
if (mWebViewClient != null) {
HashMap<String, Object> map =
@@ -1024,6 +1032,15 @@
sendMessage(msg);
}
+ public void onProceededAfterSslError(SslError error) {
+ if (mWebViewClient == null) {
+ return;
+ }
+ Message msg = obtainMessage(PROCEEDED_AFTER_SSL_ERROR);
+ msg.obj = error;
+ sendMessage(msg);
+ }
+
public void onReceivedClientCertRequest(ClientCertRequestHandler handler, String host_and_port) {
// Do an unsynchronized quick check to avoid posting if no callback has
// been set.
diff --git a/core/java/android/webkit/FindActionModeCallback.java b/core/java/android/webkit/FindActionModeCallback.java
index a322fa3d..b85fd17 100644
--- a/core/java/android/webkit/FindActionModeCallback.java
+++ b/core/java/android/webkit/FindActionModeCallback.java
@@ -22,16 +22,14 @@
import android.text.Selection;
import android.text.Spannable;
import android.text.TextWatcher;
-import android.webkit.WebView;
-import android.widget.EditText;
-import android.widget.TextView;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
class FindActionModeCallback implements ActionMode.Callback, TextWatcher,
View.OnLongClickListener, View.OnClickListener {
@@ -180,6 +178,14 @@
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ if (!mode.isUiFocusable()) {
+ // If the action mode we're running in is not focusable the user
+ // will not be able to type into the find on page field. This
+ // should only come up when we're running in a dialog which is
+ // already less than ideal; disable the option for now.
+ return false;
+ }
+
mode.setCustomView(mCustomView);
mode.getMenuInflater().inflate(com.android.internal.R.menu.webview_find,
menu);
@@ -195,6 +201,7 @@
@Override
public void onDestroyActionMode(ActionMode mode) {
+ mActionMode = null;
mWebView.notifyFindDialogDismissed();
mInput.hideSoftInputFromWindow(mWebView.getWindowToken(), 0);
}
@@ -247,4 +254,13 @@
// Does nothing. Needed to implement TextWatcher.
}
+ public int getActionModeHeight() {
+ if (mActionMode == null) {
+ return 0;
+ }
+ View parent = (View) mCustomView.getParent();
+ return parent != null ? parent.getMeasuredHeight()
+ : mCustomView.getMeasuredHeight();
+ }
+
}
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index 3600d09..9fc48a1 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -16,12 +16,9 @@
package android.webkit;
+import android.content.Context;
+import android.media.AudioManager;
import android.media.MediaPlayer;
-import android.media.MediaPlayer.OnBufferingUpdateListener;
-import android.media.MediaPlayer.OnCompletionListener;
-import android.media.MediaPlayer.OnErrorListener;
-import android.media.MediaPlayer.OnPreparedListener;
-import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -45,7 +42,8 @@
MediaPlayer.OnCompletionListener,
MediaPlayer.OnErrorListener,
MediaPlayer.OnPreparedListener,
- MediaPlayer.OnSeekCompleteListener {
+ MediaPlayer.OnSeekCompleteListener,
+ AudioManager.OnAudioFocusChangeListener {
// Logging tag.
private static final String LOGTAG = "HTML5Audio";
@@ -69,6 +67,7 @@
private String mUrl;
private boolean mAskToPlay = false;
+ private Context mContext;
// Timer thread -> UI thread
private static final int TIMEUPDATE = 100;
@@ -183,6 +182,7 @@
// Save the native ptr
mNativePointer = nativePtr;
resetMediaPlayer();
+ mContext = webViewCore.getContext();
mIsPrivateBrowsingEnabledGetter = new IsPrivateBrowsingEnabledGetter(
webViewCore.getContext().getMainLooper(), webViewCore.getWebView());
}
@@ -233,6 +233,34 @@
}
}
+ @Override
+ public void onAudioFocusChange(int focusChange) {
+ switch (focusChange) {
+ case AudioManager.AUDIOFOCUS_GAIN:
+ // resume playback
+ if (mMediaPlayer == null) resetMediaPlayer();
+ else if (!mMediaPlayer.isPlaying()) mMediaPlayer.start();
+ mState = STARTED;
+ break;
+
+ case AudioManager.AUDIOFOCUS_LOSS:
+ // Lost focus for an unbounded amount of time: stop playback and release media player
+ if (mMediaPlayer.isPlaying()) mMediaPlayer.stop();
+ mMediaPlayer.release();
+ mMediaPlayer = null;
+ break;
+
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
+ // Lost focus for a short time, but we have to stop
+ // playback. We don't release the media player because playback
+ // is likely to resume
+ if (mMediaPlayer.isPlaying()) mMediaPlayer.pause();
+ break;
+ }
+ }
+
+
private void play() {
if ((mState >= ERROR && mState < PREPARED) && mUrl != null) {
resetMediaPlayer();
@@ -241,8 +269,17 @@
}
if (mState >= PREPARED) {
- mMediaPlayer.start();
- mState = STARTED;
+ AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
+ AudioManager.AUDIOFOCUS_GAIN);
+
+ if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+ // could not get audio focus.
+ teardown();
+ } else {
+ mMediaPlayer.start();
+ mState = STARTED;
+ }
}
}
@@ -276,4 +313,5 @@
private native void nativeOnEnded(int nativePointer);
private native void nativeOnPrepared(int duration, int width, int height, int nativePointer);
private native void nativeOnTimeupdate(int position, int nativePointer);
+
}
diff --git a/core/java/android/webkit/SelectActionModeCallback.java b/core/java/android/webkit/SelectActionModeCallback.java
index 104deb1..8c174aa 100644
--- a/core/java/android/webkit/SelectActionModeCallback.java
+++ b/core/java/android/webkit/SelectActionModeCallback.java
@@ -17,13 +17,12 @@
package android.webkit;
import android.app.SearchManager;
+import android.content.Context;
import android.content.Intent;
import android.provider.Browser;
-import android.webkit.WebView;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.View;
class SelectActionModeCallback implements ActionMode.Callback {
private WebView mWebView;
@@ -45,9 +44,25 @@
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- mode.getMenuInflater().inflate(com.android.internal.R.menu.webview_copy,
- menu);
- mode.setTitle(com.android.internal.R.string.textSelectionCABTitle);
+ mode.getMenuInflater().inflate(com.android.internal.R.menu.webview_copy, menu);
+
+ final Context context = mWebView.getContext();
+ boolean allowText = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
+ mode.setTitle(allowText ?
+ context.getString(com.android.internal.R.string.textSelectionCABTitle) : null);
+
+ if (!mode.isUiFocusable()) {
+ // If the action mode UI we're running in isn't capable of taking window focus
+ // the user won't be able to type into the find on page UI. Disable this functionality.
+ // (Note that this should only happen in floating dialog windows.)
+ // This can be removed once we can handle multiple focusable windows at a time
+ // in a better way.
+ final MenuItem findOnPageItem = menu.findItem(com.android.internal.R.id.find);
+ if (findOnPageItem != null) {
+ findOnPageItem.setVisible(false);
+ }
+ }
mActionMode = mode;
return true;
}
diff --git a/core/java/android/webkit/SslCertLookupTable.java b/core/java/android/webkit/SslCertLookupTable.java
index 052244f..98ace4f 100644
--- a/core/java/android/webkit/SslCertLookupTable.java
+++ b/core/java/android/webkit/SslCertLookupTable.java
@@ -19,13 +19,18 @@
import android.os.Bundle;
import android.net.http.SslError;
+import java.net.MalformedURLException;
+import java.net.URL;
+
/**
* Stores the user's decision of whether to allow or deny an invalid certificate.
*
- * This class is not threadsafe. It is used only on the WebCore thread.
+ * This class is not threadsafe. It is used only on the WebCore thread. Also, it
+ * is used only by the Chromium HTTP stack.
*/
final class SslCertLookupTable {
private static SslCertLookupTable sTable;
+ // We store the most severe error we're willing to allow for each host.
private final Bundle table;
public static SslCertLookupTable getInstance() {
@@ -39,12 +44,26 @@
table = new Bundle();
}
- public void setIsAllowed(SslError sslError, boolean allow) {
- table.putBoolean(sslError.toString(), allow);
+ public void setIsAllowed(SslError sslError) {
+ String host;
+ try {
+ host = new URL(sslError.getUrl()).getHost();
+ } catch(MalformedURLException e) {
+ return;
+ }
+ table.putInt(host, sslError.getPrimaryError());
}
+ // We allow the decision to be re-used if it's for the same host and is for
+ // an error of equal or greater severity than this error.
public boolean isAllowed(SslError sslError) {
- return table.getBoolean(sslError.toString());
+ String host;
+ try {
+ host = new URL(sslError.getUrl()).getHost();
+ } catch(MalformedURLException e) {
+ return false;
+ }
+ return table.containsKey(host) && sslError.getPrimaryError() <= table.getInt(host);
}
public void clear() {
diff --git a/core/java/android/webkit/SslErrorHandlerImpl.java b/core/java/android/webkit/SslErrorHandlerImpl.java
index e029e37..b2e4b13 100644
--- a/core/java/android/webkit/SslErrorHandlerImpl.java
+++ b/core/java/android/webkit/SslErrorHandlerImpl.java
@@ -16,8 +16,6 @@
package android.webkit;
-import junit.framework.Assert;
-
import android.net.http.SslError;
import android.os.Bundle;
import android.os.Handler;
@@ -54,7 +52,7 @@
private final SslErrorHandler mOriginHandler;
private final LoadListener mLoadListener;
- // Message id for handling the response
+ // Message id for handling the response from the client.
private static final int HANDLE_RESPONSE = 100;
@Override
@@ -130,7 +128,9 @@
}
/**
- * Handles SSL error(s) on the way up to the user.
+ * Handles requests from the network stack about whether to proceed with a
+ * load given an SSL error(s). We may ask the client what to do, or use a
+ * cached response.
*/
/* package */ synchronized void handleSslErrorRequest(LoadListener loader) {
if (DebugFlags.SSL_ERROR_HANDLER) {
@@ -147,8 +147,10 @@
}
/**
- * Check the preference table for a ssl error that has already been shown
- * to the user.
+ * Check the preference table to see if we already have a 'proceed' decision
+ * from the client for this host and for an error of equal or greater
+ * severity than the supplied error. If so, instruct the loader to proceed
+ * and return true. Otherwise return false.
*/
/* package */ synchronized boolean checkSslPrefTable(LoadListener loader,
SslError error) {
@@ -156,21 +158,22 @@
final int primary = error.getPrimaryError();
if (DebugFlags.SSL_ERROR_HANDLER) {
- Assert.assertTrue(host != null && primary != 0);
+ assert host != null;
+ assert primary != -1;
}
- if (mSslPrefTable.containsKey(host)) {
- if (primary <= mSslPrefTable.getInt(host)) {
- handleSslErrorResponse(loader, error, true);
- return true;
+ if (mSslPrefTable.containsKey(host) && primary <= mSslPrefTable.getInt(host)) {
+ if (!loader.cancelled()) {
+ loader.handleSslErrorResponse(true);
}
+ return true;
}
return false;
}
/**
* Processes queued SSL-error confirmation requests in
- * a tight loop while there is no need to ask the user.
+ * a tight loop while there is no need to ask the client.
*/
/* package */void fastProcessQueuedSslErrors() {
while (processNextLoader());
@@ -195,19 +198,18 @@
SslError error = loader.sslError();
if (DebugFlags.SSL_ERROR_HANDLER) {
- Assert.assertNotNull(error);
+ assert error != null;
}
- // checkSslPrefTable will handle the ssl error response if the
- // answer is available. It does not remove the loader from the
- // queue.
+ // checkSslPrefTable() will instruct the loader to proceed if we
+ // have a cached 'proceed' decision. It does not remove the loader
+ // from the queue.
if (checkSslPrefTable(loader, error)) {
mLoaderQueue.remove(loader);
return true;
}
- // if we do not have information on record, ask
- // the user (display a dialog)
+ // If we can not proceed based on a cached decision, ask the client.
CallbackProxy proxy = loader.getFrame().getCallbackProxy();
proxy.onReceivedSslError(new SslErrorHandlerImpl(this, loader), error);
}
@@ -217,32 +219,31 @@
}
/**
- * Proceed with the SSL certificate.
+ * Proceed with this load.
*/
public void proceed() {
- mOriginHandler.sendMessage(
- mOriginHandler.obtainMessage(
- HANDLE_RESPONSE, 1, 0, mLoadListener));
+ mOriginHandler.sendMessage(mOriginHandler.obtainMessage(
+ HANDLE_RESPONSE, 1, 0, mLoadListener));
}
/**
- * Cancel this request and all pending requests for the WebView that had
- * the error.
+ * Cancel this load and all pending loads for the WebView that had the
+ * error.
*/
public void cancel() {
- mOriginHandler.sendMessage(
- mOriginHandler.obtainMessage(
- HANDLE_RESPONSE, 0, 0, mLoadListener));
+ mOriginHandler.sendMessage(mOriginHandler.obtainMessage(
+ HANDLE_RESPONSE, 0, 0, mLoadListener));
}
/**
- * Handles SSL error(s) on the way down from the user.
+ * Handles the response from the client about whether to proceed with this
+ * load. We save the response to be re-used in the future.
*/
/* package */ synchronized void handleSslErrorResponse(LoadListener loader,
SslError error, boolean proceed) {
if (DebugFlags.SSL_ERROR_HANDLER) {
- Assert.assertNotNull(loader);
- Assert.assertNotNull(error);
+ assert loader != null;
+ assert error != null;
}
if (DebugFlags.SSL_ERROR_HANDLER) {
@@ -253,16 +254,16 @@
if (!loader.cancelled()) {
if (proceed) {
- // update the user's SSL error preference table
+ // Update the SSL error preference table
int primary = error.getPrimaryError();
String host = loader.host();
if (DebugFlags.SSL_ERROR_HANDLER) {
- Assert.assertTrue(host != null && primary != 0);
+ assert host != null;
+ assert primary != -1;
}
boolean hasKey = mSslPrefTable.containsKey(host);
- if (!hasKey ||
- primary > mSslPrefTable.getInt(host)) {
+ if (!hasKey || primary > mSslPrefTable.getInt(host)) {
mSslPrefTable.putInt(host, primary);
}
}
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 9c44138..f1c2bde 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -211,6 +211,7 @@
private ZoomDensity mDefaultZoom = ZoomDensity.MEDIUM;
private RenderPriority mRenderPriority = RenderPriority.NORMAL;
private int mOverrideCacheMode = LOAD_DEFAULT;
+ private int mDoubleTapZoom = 100;
private boolean mSaveFormData = true;
private boolean mAutoFillEnabled = false;
private boolean mSavePassword = true;
@@ -769,6 +770,27 @@
}
/**
+ * Set the double-tap zoom of the page in percent. Default is 100.
+ * @param doubleTapZoom A percent value for increasing or decreasing the double-tap zoom.
+ * @hide
+ */
+ public void setDoubleTapZoom(int doubleTapZoom) {
+ if (mDoubleTapZoom != doubleTapZoom) {
+ mDoubleTapZoom = doubleTapZoom;
+ mWebView.updateDoubleTapZoom();
+ }
+ }
+
+ /**
+ * Get the double-tap zoom of the page in percent.
+ * @return A percent value describing the double-tap zoom.
+ * @hide
+ */
+ public int getDoubleTapZoom() {
+ return mDoubleTapZoom;
+ }
+
+ /**
* Set the default zoom density of the page. This should be called from UI
* thread.
* @param zoom A ZoomDensity value
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 217ad7c..b0ecf09 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -768,9 +768,13 @@
imm.hideSoftInputFromWindow(getWindowToken(), 0);
}
mInsideRemove = true;
+ boolean isFocused = hasFocus();
mWebView.removeView(this);
- mWebView.requestFocus();
+ if (isFocused) {
+ mWebView.requestFocus();
+ }
mInsideRemove = false;
+ mHandler.removeCallbacksAndMessages(null);
}
@Override
@@ -828,7 +832,7 @@
TextView tv =
(TextView) super.getView(position, convertView, parent);
if (tv != null && mTextView != null) {
- tv.setTextSize(mTextView.getTextSize());
+ tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextView.getTextSize());
}
return tv;
}
@@ -892,7 +896,10 @@
* WebTextView represents.
*/
/* package */ void setNodePointer(int ptr) {
- mNodePointer = ptr;
+ if (ptr != mNodePointer) {
+ mNodePointer = ptr;
+ setAdapterCustom(null);
+ }
}
/**
@@ -995,6 +1002,9 @@
| InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT;
int imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI
| EditorInfo.IME_FLAG_NO_FULLSCREEN;
+ if (!mWebView.nativeFocusCandidateIsSpellcheck()) {
+ inputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
+ }
if (TEXT_AREA != type
&& mWebView.nativeFocusCandidateHasNextTextfield()) {
imeOptions |= EditorInfo.IME_FLAG_NAVIGATE_NEXT;
@@ -1047,11 +1057,12 @@
}
setHint(null);
setThreshold(1);
+ boolean autoComplete = false;
if (single) {
mWebView.requestLabel(mWebView.nativeFocusCandidateFramePointer(),
mNodePointer);
maxLength = mWebView.nativeFocusCandidateMaxLength();
- boolean autoComplete = mWebView.nativeFocusCandidateIsAutoComplete();
+ autoComplete = mWebView.nativeFocusCandidateIsAutoComplete();
if (type != PASSWORD && (mAutoFillable || autoComplete)) {
String name = mWebView.nativeFocusCandidateName();
if (name != null && name.length() > 0) {
@@ -1066,8 +1077,9 @@
setInputType(inputType);
setImeOptions(imeOptions);
setVisibility(VISIBLE);
- AutoCompleteAdapter adapter = null;
- setAdapterCustom(adapter);
+ if (!autoComplete) {
+ setAdapterCustom(null);
+ }
}
/**
@@ -1092,4 +1104,11 @@
return url != null ? url.getProtocol() + "://" + url.getHost() + url.getPath() : null;
}
+
+ public void setGravityForRtl(boolean rtl) {
+ int gravity = rtl ? Gravity.RIGHT : Gravity.LEFT;
+ gravity |= mSingle ? Gravity.CENTER_VERTICAL : Gravity.TOP;
+ setGravity(gravity);
+ }
+
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 530b230..a851fb4 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -77,7 +77,9 @@
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
+import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
@@ -1303,6 +1305,31 @@
}
@Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setScrollable(isScrollableForAccessibility());
+ }
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setScrollable(isScrollableForAccessibility());
+ event.setScrollX(mScrollX);
+ event.setScrollY(mScrollY);
+ final int convertedContentWidth = contentToViewX(getContentWidth());
+ final int adjustedViewWidth = getWidth() - mPaddingLeft - mPaddingRight;
+ event.setMaxScrollX(Math.max(convertedContentWidth - adjustedViewWidth, 0));
+ final int convertedContentHeight = contentToViewY(getContentHeight());
+ final int adjustedViewHeight = getHeight() - mPaddingTop - mPaddingBottom;
+ event.setMaxScrollY(Math.max(convertedContentHeight - adjustedViewHeight, 0));
+ }
+
+ private boolean isScrollableForAccessibility() {
+ return (contentToViewX(getContentWidth()) > getWidth() - mPaddingLeft - mPaddingRight
+ || contentToViewY(getContentHeight()) > getHeight() - mPaddingTop - mPaddingBottom);
+ }
+
+ @Override
public void setOverScrollMode(int mode) {
super.setOverScrollMode(mode);
if (mode != OVER_SCROLL_NEVER) {
@@ -1456,7 +1483,8 @@
private int getVisibleTitleHeightImpl() {
// need to restrict mScrollY due to over scroll
- return Math.max(getTitleHeight() - Math.max(0, mScrollY), 0);
+ return Math.max(getTitleHeight() - Math.max(0, mScrollY),
+ mFindCallback != null ? mFindCallback.getActionModeHeight() : 0);
}
/*
@@ -1581,6 +1609,11 @@
mListBoxDialog.dismiss();
mListBoxDialog = null;
}
+ // remove so that it doesn't cause events
+ if (mWebTextView != null) {
+ mWebTextView.remove();
+ mWebTextView = null;
+ }
if (mNativeClass != 0) nativeStopGL();
if (mWebViewCore != null) {
// Set the handlers to null before destroying WebViewCore so no
@@ -2041,7 +2074,13 @@
* If the value of the encoding parameter is 'base64', then the data must
* be encoded as base64. Otherwise, the data must use ASCII encoding for
* octets inside the range of safe URL characters and use the standard %xx
- * hex encoding of URLs for octets outside that range.
+ * hex encoding of URLs for octets outside that range. For example,
+ * '#', '%', '\', '?' should be replaced by %23, %25, %27, %3f respectively.
+ * <p>
+ * The 'data' scheme URL formed by this method uses the default US-ASCII
+ * charset. If you need need to set a different charset, you should form a
+ * 'data' scheme URL which specifies a charset parameter and call
+ * {@link #loadUrl(String)} instead.
* @param data A String of data in the given encoding.
* @param mimeType The MIMEType of the data, e.g. 'text/html'.
* @param encoding The encoding of the data.
@@ -2947,6 +2986,13 @@
return false;
}
+ /**
+ * Update the double-tap zoom.
+ */
+ /* package */ void updateDoubleTapZoom() {
+ mZoomManager.updateDoubleTapZoom();
+ }
+
private int computeRealHorizontalScrollRange() {
if (mDrawHistory) {
return mHistoryWidth;
@@ -3241,8 +3287,7 @@
public void clearFormData() {
checkThread();
if (inEditingMode()) {
- AutoCompleteAdapter adapter = null;
- mWebTextView.setAdapterCustom(adapter);
+ mWebTextView.setAdapterCustom(null);
}
}
@@ -4078,8 +4123,8 @@
boolean pressed = (mTouchMode == TOUCH_SHORTPRESS_START_MODE
|| mTouchMode == TOUCH_INIT_MODE
|| mTouchMode == TOUCH_SHORTPRESS_MODE);
- nativeRecordButtons(hasFocus() && hasWindowFocus(),
- (pressed && !USE_WEBKIT_RINGS)
+ recordButtons(canvas,
+ hasFocus() && hasWindowFocus(), (pressed && !USE_WEBKIT_RINGS)
|| mTrackballDown || mGotCenterDown, false);
drawCoreAndCursorRing(canvas, mBackgroundColor,
mDrawCursorRing && drawRings);
@@ -4308,7 +4353,7 @@
selectionDone();
}
mOrientation = newConfig.orientation;
- contentInvalidateAll();
+ mWebViewCore.sendMessage(EventHub.CLEAR_CONTENT);
}
/**
@@ -4454,6 +4499,9 @@
if (mHeldMotionless == MOTIONLESS_FALSE) {
mPrivateHandler.sendMessageDelayed(mPrivateHandler
.obtainMessage(DRAG_HELD_MOTIONLESS), MOTIONLESS_TIME);
+ mPrivateHandler.sendMessageDelayed(mPrivateHandler
+ .obtainMessage(AWAKEN_SCROLL_BARS),
+ ViewConfiguration.getScrollDefaultDelay());
mHeldMotionless = MOTIONLESS_PENDING;
}
}
@@ -4760,12 +4808,12 @@
}
String text = nativeFocusCandidateText();
int nodePointer = nativeFocusCandidatePointer();
- mWebTextView.setGravity(nativeFocusCandidateIsRtlText() ?
- Gravity.RIGHT : Gravity.NO_GRAVITY);
// This needs to be called before setType, which may call
// requestFormData, and it needs to have the correct nodePointer.
mWebTextView.setNodePointer(nodePointer);
mWebTextView.setType(nativeFocusCandidateType());
+ // Gravity needs to be set after setType
+ mWebTextView.setGravityForRtl(nativeFocusCandidateIsRtlText());
updateWebTextViewPadding();
if (null == text) {
if (DebugFlags.WEB_VIEW) {
@@ -5133,7 +5181,7 @@
.obtainMessage(LONG_PRESS_CENTER), LONG_PRESS_TIMEOUT);
// Already checked mNativeClass, so we do not need to check it
// again.
- nativeRecordButtons(hasFocus() && hasWindowFocus(), true, true);
+ recordButtons(null, hasFocus() && hasWindowFocus(), true, true);
if (!wantsKeyEvents) return true;
}
// Bubble up the key event as WebView doesn't handle it
@@ -5561,7 +5609,7 @@
mDrawCursorRing = true;
setFocusControllerActive(true);
if (mNativeClass != 0) {
- nativeRecordButtons(true, false, true);
+ recordButtons(null, true, false, true);
}
} else {
if (!inEditingMode()) {
@@ -5570,7 +5618,7 @@
mDrawCursorRing = false;
setFocusControllerActive(false);
}
- // We do not call nativeRecordButtons here because we assume
+ // We do not call recordButtons here because we assume
// that when we lost focus, or window focus, it got called with
// false for the first parameter
}
@@ -5589,7 +5637,7 @@
mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS);
mTouchMode = TOUCH_DONE_MODE;
if (mNativeClass != 0) {
- nativeRecordButtons(false, false, true);
+ recordButtons(null, false, false, true);
}
setFocusControllerActive(false);
}
@@ -5647,13 +5695,13 @@
if (hasWindowFocus()) {
mDrawCursorRing = true;
if (mNativeClass != 0) {
- nativeRecordButtons(true, false, true);
+ recordButtons(null, true, false, true);
}
setFocusControllerActive(true);
//} else {
// The WebView has gained focus while we do not have
// windowfocus. When our window lost focus, we should have
- // called nativeRecordButtons(false...)
+ // called recordButtons(false...)
}
} else {
// When we lost focus, unless focus went to the TextView (which is
@@ -5661,7 +5709,7 @@
if (!inEditingMode()) {
mDrawCursorRing = false;
if (mNativeClass != 0) {
- nativeRecordButtons(false, false, true);
+ recordButtons(null, false, false, true);
}
setFocusControllerActive(false);
}
@@ -5951,6 +5999,7 @@
mTouchMode = TOUCH_DRAG_START_MODE;
mConfirmMove = true;
mPrivateHandler.removeMessages(RESUME_WEBCORE_PRIORITY);
+ nativeSetIsScrolling(false);
} else if (mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP)) {
mPrivateHandler.removeMessages(RELEASE_SINGLE_TAP);
if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
@@ -6233,9 +6282,16 @@
}
mLastTouchX = x;
mLastTouchY = y;
- if ((deltaX | deltaY) != 0) {
+
+ if (deltaX * deltaX + deltaY * deltaY > mTouchSlopSquare) {
mHeldMotionless = MOTIONLESS_FALSE;
+ nativeSetIsScrolling(true);
+ } else {
+ mHeldMotionless = MOTIONLESS_TRUE;
+ nativeSetIsScrolling(false);
+ keepScrollBarsVisible = true;
}
+
mLastTouchTime = eventTime;
}
@@ -6251,9 +6307,15 @@
// keep the scrollbar on the screen even there is no scroll
awakenScrollBars(ViewConfiguration.getScrollDefaultDelay(),
false);
+ // Post a message so that we'll keep them alive while we're not scrolling.
+ mPrivateHandler.sendMessageDelayed(mPrivateHandler
+ .obtainMessage(AWAKEN_SCROLL_BARS),
+ ViewConfiguration.getScrollDefaultDelay());
// return false to indicate that we can't pan out of the
// view space
return !done;
+ } else {
+ mPrivateHandler.removeMessages(AWAKEN_SCROLL_BARS);
}
break;
}
@@ -6762,7 +6824,7 @@
if (mNativeClass == 0) {
return false;
}
- nativeRecordButtons(hasFocus() && hasWindowFocus(), true, true);
+ recordButtons(null, hasFocus() && hasWindowFocus(), true, true);
if (time - mLastCursorTime <= TRACKBALL_TIMEOUT
&& !mLastCursorBounds.equals(nativeGetCursorRingBounds())) {
nativeSelectBestAt(mLastCursorBounds);
@@ -7378,6 +7440,10 @@
}
}
+ void sendPluginDrawMsg() {
+ mWebViewCore.sendMessage(EventHub.PLUGIN_SURFACE_READY);
+ }
+
/**
* Returns plugin bounds if x/y in content coordinates corresponds to a
* plugin. Otherwise a NULL rectangle is returned.
@@ -7636,6 +7702,10 @@
}
/* package */ void passToJavaScript(String currentText, KeyEvent event) {
+ // check if mWebViewCore has been destroyed
+ if (mWebViewCore == null) {
+ return;
+ }
WebViewCore.JSKeyData arg = new WebViewCore.JSKeyData();
arg.mEvent = event;
arg.mCurrentText = currentText;
@@ -9349,6 +9419,24 @@
return nativeTileProfilingGetFloat(frame, tile, key);
}
+ /**
+ * Helper method to deal with differences between hardware and software rendering
+ */
+ private void recordButtons(Canvas canvas, boolean focus, boolean pressed,
+ boolean inval) {
+ boolean isHardwareAccel = canvas != null
+ ? canvas.isHardwareAccelerated()
+ : isHardwareAccelerated();
+ if (isHardwareAccel) {
+ // We never want to change button state if we are hardware accelerated,
+ // but we DO want to invalidate as necessary so that the GL ring
+ // can be drawn
+ nativeRecordButtons(false, false, inval);
+ } else {
+ nativeRecordButtons(focus, pressed, inval);
+ }
+ }
+
private native int nativeCacheHitFramePointer();
private native boolean nativeCacheHitIsPlugin();
private native Rect nativeCacheHitNodeBounds();
@@ -9395,6 +9483,7 @@
private native boolean nativeFocusCandidateIsTextInput();
/* package */ native int nativeFocusCandidateMaxLength();
/* package */ native boolean nativeFocusCandidateIsAutoComplete();
+ /* package */ native boolean nativeFocusCandidateIsSpellcheck();
/* package */ native String nativeFocusCandidateName();
private native Rect nativeFocusCandidateNodeBounds();
/**
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index d3be2bf..81de356 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -186,11 +186,11 @@
}
/**
- * Notify the host application to handle a SSL certificate error request
- * (display the error to the user and ask whether to proceed or not). The
- * host application has to call either handler.cancel() or handler.proceed()
- * as the connection is suspended and waiting for the response. The default
- * behavior is to cancel the load.
+ * Notify the host application that an SSL error occurred while loading a
+ * resource. The host application must call either handler.cancel() or
+ * handler.proceed(). Note that the decision may be retained for use in
+ * response to future SSL errors. The default behavior is to cancel the
+ * load.
*
* @param view The WebView that is initiating the callback.
* @param handler An SslErrorHandler object that will handle the user's
@@ -203,6 +203,15 @@
}
/**
+ * Notify the host application that an SSL error occurred while loading a
+ * resource, but the WebView but chose to proceed anyway based on a
+ * decision retained from a previous response to onReceivedSslError().
+ * @hide
+ */
+ public void onProceededAfterSslError(WebView view, SslError error) {
+ }
+
+ /**
* Notify the host application to handle a SSL client certificate
* request (display the request to the user and ask whether to
* proceed with a client certificate or not). The host application
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 63c4d03..1294a28 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -518,7 +518,7 @@
/**
* Update the layers' content
*/
- private native int nativeUpdateLayers(Region invalRegion);
+ private native boolean nativeUpdateLayers(int baseLayer);
private native boolean nativeFocusBoundsChanged();
@@ -1032,6 +1032,8 @@
static final int EXECUTE_JS = 194;
+ static final int PLUGIN_SURFACE_READY = 195;
+
// private message ids
private static final int DESTROY = 200;
@@ -1587,6 +1589,10 @@
nativeFullScreenPluginHidden(msg.arg1);
break;
+ case PLUGIN_SURFACE_READY:
+ nativePluginSurfaceReady();
+ break;
+
case ADD_PACKAGE_NAMES:
if (BrowserFrame.sJavaBridge == null) {
throw new IllegalStateException("No WebView " +
@@ -1662,24 +1668,15 @@
mDrawIsScheduled = false;
}
if (mMessages != null) {
- Log.w(LOGTAG, "Not supported in this case.");
+ Throwable throwable = new Throwable(
+ "EventHub.removeMessages(int what = " + what + ") is not supported " +
+ "before the WebViewCore is set up.");
+ Log.w(LOGTAG, Log.getStackTraceString(throwable));
} else {
mHandler.removeMessages(what);
}
}
- private synchronized boolean hasMessages(int what) {
- if (mBlockMessages) {
- return false;
- }
- if (mMessages != null) {
- Log.w(LOGTAG, "hasMessages() is not supported in this case.");
- return false;
- } else {
- return mHandler.hasMessages(what);
- }
- }
-
private synchronized void sendMessageDelayed(Message msg, long delay) {
if (mBlockMessages) {
return;
@@ -2004,18 +2001,25 @@
boolean mFocusSizeChanged;
}
+ DrawData mLastDrawData = null;
+
// Only update the layers' content, not the base surface
// PictureSet.
private void webkitDrawLayers() {
mDrawLayersIsScheduled = false;
- if (mDrawIsScheduled) {
+ if (mDrawIsScheduled || mLastDrawData == null) {
removeMessages(EventHub.WEBKIT_DRAW);
webkitDraw();
return;
}
- DrawData draw = new DrawData();
- draw.mBaseLayer = nativeUpdateLayers(draw.mInvalRegion);
- webkitDraw(draw);
+ // Directly update the layers we last passed to the UI side
+ if (nativeUpdateLayers(mLastDrawData.mBaseLayer)) {
+ // If anything more complex than position has been touched, let's do a full draw
+ webkitDraw();
+ }
+ mWebView.mPrivateHandler.removeMessages(WebView.INVAL_RECT_MSG_ID);
+ mWebView.mPrivateHandler.sendMessageAtFrontOfQueue(mWebView.mPrivateHandler
+ .obtainMessage(WebView.INVAL_RECT_MSG_ID));
}
private void webkitDraw() {
@@ -2032,6 +2036,7 @@
}
return;
}
+ mLastDrawData = draw;
webkitDraw(draw);
}
@@ -2827,6 +2832,7 @@
private native void nativeResume();
private native void nativeFreeMemory();
private native void nativeFullScreenPluginHidden(int npp);
+ private native void nativePluginSurfaceReady();
private native boolean nativeValidNodeAndBounds(int frame, int node,
Rect bounds);
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 7f526e7..206142a 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -145,11 +145,11 @@
private float mInvDefaultScale;
/*
- * The scale factor that is used to determine the zoom level for reading text.
- * The value is initially set to equal the display density.
- * TODO: Support changing this in WebSettings
+ * The logical density of the display. This is a scaling factor for the
+ * Density Independent Pixel unit, where one DIP is one pixel on an
+ * approximately 160 dpi screen (see android.util.DisplayMetrics.density)
*/
- private float mReadingLevelScale;
+ private float mDisplayDensity;
/*
* The scale factor that is used as the minimum increment when going from
@@ -233,11 +233,11 @@
public void init(float density) {
assert density > 0;
+ mDisplayDensity = density;
setDefaultZoomScale(density);
mActualScale = density;
mInvActualScale = 1 / density;
- mReadingLevelScale = density;
- mTextWrapScale = density;
+ mTextWrapScale = getReadingLevelScale();
}
/**
@@ -310,8 +310,11 @@
return mInitialScale > 0 ? mInitialScale : mDefaultScale;
}
+ /**
+ * Returns the zoom scale used for reading text on a double-tap.
+ */
public final float getReadingLevelScale() {
- return mReadingLevelScale;
+ return mDisplayDensity * mWebView.getSettings().getDoubleTapZoom() / 100.0f;
}
public final float getInvDefaultScale() {
@@ -510,6 +513,13 @@
return mZoomScale != 0 || mInHWAcceleratedZoom;
}
+ public void updateDoubleTapZoom() {
+ if (mInZoomOverview) {
+ mTextWrapScale = getReadingLevelScale();
+ refreshZoomScale(true);
+ }
+ }
+
public void refreshZoomScale(boolean reflowText) {
setZoomScale(mActualScale, reflowText, true);
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 7b8c7f2..38bb2e1 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -237,9 +237,11 @@
SparseBooleanArray mCheckStates;
/**
- * Running state of which IDs are currently checked
+ * Running state of which IDs are currently checked.
+ * If there is a value for a given key, the checked state for that ID is true
+ * and the value holds the last known position in the adapter for that id.
*/
- LongSparseArray<Boolean> mCheckedIdStates;
+ LongSparseArray<Integer> mCheckedIdStates;
/**
* Controls how the next layout will happen
@@ -472,6 +474,13 @@
static final int OVERSCROLL_LIMIT_DIVISOR = 3;
/**
+ * How many positions in either direction we will search to try to
+ * find a checked item with a stable ID that moved position across
+ * a data set change. If the item isn't found it will be unselected.
+ */
+ private static final int CHECK_POSITION_SEARCH_DISTANCE = 20;
+
+ /**
* Used to request a layout when we changed touch mode
*/
private static final int TOUCH_MODE_UNKNOWN = -1;
@@ -806,7 +815,7 @@
if (adapter != null) {
if (mChoiceMode != CHOICE_MODE_NONE && mAdapter.hasStableIds() &&
mCheckedIdStates == null) {
- mCheckedIdStates = new LongSparseArray<Boolean>();
+ mCheckedIdStates = new LongSparseArray<Integer>();
}
}
@@ -901,7 +910,7 @@
return new long[0];
}
- final LongSparseArray<Boolean> idStates = mCheckedIdStates;
+ final LongSparseArray<Integer> idStates = mCheckedIdStates;
final int count = idStates.size();
final long[] ids = new long[count];
@@ -948,7 +957,7 @@
mCheckStates.put(position, value);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
if (value) {
- mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+ mCheckedIdStates.put(mAdapter.getItemId(position), position);
} else {
mCheckedIdStates.delete(mAdapter.getItemId(position));
}
@@ -980,7 +989,7 @@
if (value) {
mCheckStates.put(position, true);
if (updateIds) {
- mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+ mCheckedIdStates.put(mAdapter.getItemId(position), position);
}
mCheckedItemCount = 1;
} else if (mCheckStates.size() == 0 || !mCheckStates.valueAt(0)) {
@@ -1010,7 +1019,7 @@
mCheckStates.put(position, newValue);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
if (newValue) {
- mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+ mCheckedIdStates.put(mAdapter.getItemId(position), position);
} else {
mCheckedIdStates.delete(mAdapter.getItemId(position));
}
@@ -1032,7 +1041,7 @@
mCheckStates.put(position, true);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
mCheckedIdStates.clear();
- mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+ mCheckedIdStates.put(mAdapter.getItemId(position), position);
}
mCheckedItemCount = 1;
} else if (mCheckStates.size() == 0 || !mCheckStates.valueAt(0)) {
@@ -1081,7 +1090,7 @@
mCheckStates = new SparseBooleanArray();
}
if (mCheckedIdStates == null && mAdapter != null && mAdapter.hasStableIds()) {
- mCheckedIdStates = new LongSparseArray<Boolean>();
+ mCheckedIdStates = new LongSparseArray<Integer>();
}
// Modal multi-choice mode only has choices when the mode is active. Clear them.
if (mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL) {
@@ -1270,40 +1279,24 @@
}
@Override
- public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(info);
- info.setScrollable(true);
- }
-
- @Override
public void sendAccessibilityEvent(int eventType) {
// Since this class calls onScrollChanged even if the mFirstPosition and the
// child count have not changed we will avoid sending duplicate accessibility
// events.
if (eventType == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- final int lastPosition = mFirstPosition + getChildCount();
- if (mLastAccessibilityScrollEventFromIndex == mFirstPosition
- && mLastAccessibilityScrollEventToIndex == lastPosition) {
+ final int firstVisiblePosition = getFirstVisiblePosition();
+ final int lastVisiblePosition = getLastVisiblePosition();
+ if (mLastAccessibilityScrollEventFromIndex == firstVisiblePosition
+ && mLastAccessibilityScrollEventToIndex == lastVisiblePosition) {
return;
} else {
- mLastAccessibilityScrollEventFromIndex = mFirstPosition;
- mLastAccessibilityScrollEventToIndex = lastPosition;
+ mLastAccessibilityScrollEventFromIndex = firstVisiblePosition;
+ mLastAccessibilityScrollEventToIndex = lastVisiblePosition;
}
}
super.sendAccessibilityEvent(eventType);
}
- @Override
- public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(event);
- event.setScrollable(true);
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- event.setFromIndex(mFirstPosition);
- event.setToIndex(mFirstPosition + getChildCount());
- event.setItemCount(mItemCount);
- }
- }
-
/**
* Indicates whether the children's drawing cache is used during a scroll.
* By default, the drawing cache is enabled but this will consume more memory.
@@ -1427,7 +1420,7 @@
boolean inActionMode;
int checkedItemCount;
SparseBooleanArray checkState;
- LongSparseArray<Boolean> checkIdState;
+ LongSparseArray<Integer> checkIdState;
/**
* Constructor called from {@link AbsListView#onSaveInstanceState()}
@@ -1450,11 +1443,14 @@
inActionMode = in.readByte() != 0;
checkedItemCount = in.readInt();
checkState = in.readSparseBooleanArray();
- long[] idState = in.createLongArray();
-
- if (idState.length > 0) {
- checkIdState = new LongSparseArray<Boolean>();
- checkIdState.setValues(idState, Boolean.TRUE);
+ final int N = in.readInt();
+ if (N > 0) {
+ checkIdState = new LongSparseArray<Integer>();
+ for (int i=0; i<N; i++) {
+ final long key = in.readLong();
+ final int value = in.readInt();
+ checkIdState.put(key, value);
+ }
}
}
@@ -1470,7 +1466,12 @@
out.writeByte((byte) (inActionMode ? 1 : 0));
out.writeInt(checkedItemCount);
out.writeSparseBooleanArray(checkState);
- out.writeLongArray(checkIdState != null ? checkIdState.getKeys() : new long[0]);
+ final int N = checkIdState != null ? checkIdState.size() : 0;
+ out.writeInt(N);
+ for (int i=0; i<N; i++) {
+ out.writeLong(checkIdState.keyAt(i));
+ out.writeInt(checkIdState.valueAt(i));
+ }
}
@Override
@@ -1565,7 +1566,7 @@
ss.checkState = mCheckStates.clone();
}
if (mCheckedIdStates != null) {
- final LongSparseArray<Boolean> idState = new LongSparseArray<Boolean>();
+ final LongSparseArray<Integer> idState = new LongSparseArray<Integer>();
final int count = mCheckedIdStates.size();
for (int i = 0; i < count; i++) {
idState.put(mCheckedIdStates.keyAt(i), mCheckedIdStates.valueAt(i));
@@ -4786,15 +4787,63 @@
return selectedPos >= 0;
}
+ void confirmCheckedPositionsById() {
+ // Clear out the positional check states, we'll rebuild it below from IDs.
+ mCheckStates.clear();
+
+ boolean checkedCountChanged = false;
+ for (int checkedIndex = 0; checkedIndex < mCheckedIdStates.size(); checkedIndex++) {
+ final long id = mCheckedIdStates.keyAt(checkedIndex);
+ final int lastPos = mCheckedIdStates.valueAt(checkedIndex);
+
+ final long lastPosId = mAdapter.getItemId(lastPos);
+ if (id != lastPosId) {
+ // Look around to see if the ID is nearby. If not, uncheck it.
+ final int start = Math.max(0, lastPos - CHECK_POSITION_SEARCH_DISTANCE);
+ final int end = Math.min(lastPos + CHECK_POSITION_SEARCH_DISTANCE, mItemCount);
+ boolean found = false;
+ for (int searchPos = start; searchPos < end; searchPos++) {
+ final long searchId = mAdapter.getItemId(searchPos);
+ if (id == searchId) {
+ found = true;
+ mCheckStates.put(searchPos, true);
+ mCheckedIdStates.setValueAt(checkedIndex, searchPos);
+ break;
+ }
+ }
+
+ if (!found) {
+ mCheckedIdStates.delete(id);
+ checkedIndex--;
+ mCheckedItemCount--;
+ checkedCountChanged = true;
+ if (mChoiceActionMode != null && mMultiChoiceModeCallback != null) {
+ mMultiChoiceModeCallback.onItemCheckedStateChanged(mChoiceActionMode,
+ lastPos, id, false);
+ }
+ }
+ } else {
+ mCheckStates.put(lastPos, true);
+ }
+ }
+
+ if (checkedCountChanged && mChoiceActionMode != null) {
+ mChoiceActionMode.invalidate();
+ }
+ }
+
@Override
protected void handleDataChanged() {
int count = mItemCount;
int lastHandledItemCount = mLastHandledItemCount;
mLastHandledItemCount = mItemCount;
+
+ if (mChoiceMode != CHOICE_MODE_NONE && mAdapter != null && mAdapter.hasStableIds()) {
+ confirmCheckedPositionsById();
+ }
+
if (count > 0) {
-
int newPos;
-
int selectablePos;
// Find the row we are supposed to sync to
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index df8eb05..475b8ee 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -335,6 +335,7 @@
mTouchDownX = event.getX();
} else {
setPressed(true);
+ invalidate(mThumb.getBounds()); // This may be within the padding region
onStartTrackingTouch();
trackTouchEvent(event);
attemptClaimDrag();
@@ -348,6 +349,7 @@
final float x = event.getX();
if (Math.abs(x - mTouchDownX) > mScaledTouchSlop) {
setPressed(true);
+ invalidate(mThumb.getBounds()); // This may be within the padding region
onStartTrackingTouch();
trackTouchEvent(event);
attemptClaimDrag();
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index c6e63c3..60b24bc 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -33,6 +33,8 @@
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.widget.ActivityChooserModel.ActivityChooserModelClient;
/**
@@ -169,6 +171,11 @@
private boolean mIsAttachedToWindow;
/**
+ * String resource for formatting content description of the default target.
+ */
+ private int mDefaultActionButtonContentDescription;
+
+ /**
* Create a new instance.
*
* @param context The application environment.
@@ -259,7 +266,7 @@
*
* <strong>Note:</strong> Clients would like to set this drawable
* as a clue about the action the chosen activity will perform. For
- * example, if share activity is to be chosen the drawable should
+ * example, if a share activity is to be chosen the drawable should
* give a clue that sharing is to be performed.
*
* @param drawable The drawable.
@@ -269,6 +276,21 @@
}
/**
+ * Sets the content description for the button that expands the activity
+ * overflow list.
+ *
+ * description as a clue about the action performed by the button.
+ * For example, if a share activity is to be chosen the content
+ * description should be something like "Share with".
+ *
+ * @param resourceId The content description resource id.
+ */
+ public void setExpandActivityOverflowButtonContentDescription(int resourceId) {
+ CharSequence contentDescription = mContext.getString(resourceId);
+ mExpandActivityOverflowButtonImage.setContentDescription(contentDescription);
+ }
+
+ /**
* Set the provider hosting this view, if applicable.
* @hide Internal use only
*/
@@ -302,8 +324,6 @@
getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
- mAdapter.setMaxActivityCount(maxActivityCount);
-
final boolean defaultActivityButtonShown =
mDefaultActivityButton.getVisibility() == VISIBLE;
@@ -312,8 +332,10 @@
if (maxActivityCount != ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_UNLIMITED
&& activityCount > maxActivityCount + maxActivityCountOffset) {
mAdapter.setShowFooterView(true);
+ mAdapter.setMaxActivityCount(maxActivityCount - 1);
} else {
mAdapter.setShowFooterView(false);
+ mAdapter.setMaxActivityCount(maxActivityCount);
}
ListPopupWindow popupWindow = getListPopupWindow();
@@ -329,6 +351,8 @@
if (mProvider != null) {
mProvider.subUiVisibilityChanged(true);
}
+ popupWindow.getListView().setContentDescription(mContext.getString(
+ R.string.activitychooserview_choose_application));
}
}
@@ -431,6 +455,20 @@
}
/**
+ * Sets a content description of the default action button. This
+ * resource should be a string taking one formatting argument and
+ * will be used for formatting the content description of the button
+ * dynamically as the default target changes. For example, a resource
+ * pointing to the string "share with %1$s" will result in a content
+ * description "share with Bluetooth" for the Bluetooth activity.
+ *
+ * @param resourceId The resource id.
+ */
+ public void setDefaultActionButtonContentDescription(int resourceId) {
+ mDefaultActionButtonContentDescription = resourceId;
+ }
+
+ /**
* Gets the list popup window which is lazily initialized.
*
* @return The popup.
@@ -465,6 +503,12 @@
ResolveInfo activity = mAdapter.getDefaultActivity();
PackageManager packageManager = mContext.getPackageManager();
mDefaultActivityButtonImage.setImageDrawable(activity.loadIcon(packageManager));
+ if (mDefaultActionButtonContentDescription != 0) {
+ CharSequence label = activity.loadLabel(packageManager);
+ String contentDescription = mContext.getString(
+ mDefaultActionButtonContentDescription, label);
+ mDefaultActivityButton.setContentDescription(contentDescription);
+ }
} else {
mDefaultActivityButton.setVisibility(View.GONE);
}
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index a4b4e78..e16a8bd 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -29,6 +29,7 @@
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
@@ -881,25 +882,10 @@
@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- final int eventType = event.getEventType();
- switch (eventType) {
- case AccessibilityEvent.TYPE_VIEW_SCROLLED:
- // Do not populate the text of scroll events.
- return true;
- case AccessibilityEvent.TYPE_VIEW_FOCUSED:
- // This is an exceptional case which occurs when a window gets the
- // focus and sends a focus event via its focused child to announce
- // current focus/selection. AdapterView fires selection but not focus
- // events so we change the event type here.
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
- event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED);
- }
- break;
- }
-
View selectedView = getSelectedView();
- if (selectedView != null && selectedView.getVisibility() == VISIBLE) {
- getSelectedView().dispatchPopulateAccessibilityEvent(event);
+ if (selectedView != null && selectedView.getVisibility() == VISIBLE
+ && selectedView.dispatchPopulateAccessibilityEvent(event)) {
+ return true;
}
return false;
}
@@ -919,19 +905,37 @@
}
@Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setScrollable(isScrollableForAccessibility());
+ View selectedView = getSelectedView();
+ if (selectedView != null) {
+ info.setEnabled(selectedView.isEnabled());
+ }
+ }
+
+ @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
-
+ event.setScrollable(isScrollableForAccessibility());
View selectedView = getSelectedView();
if (selectedView != null) {
event.setEnabled(selectedView.isEnabled());
}
- event.setItemCount(getCount());
event.setCurrentItemIndex(getSelectedItemPosition());
- if (getChildCount() > 0) {
- event.setFromIndex(getFirstVisiblePosition());
- event.setToIndex(getLastVisiblePosition());
+ event.setFromIndex(getFirstVisiblePosition());
+ event.setToIndex(getLastVisiblePosition());
+ event.setItemCount(getAdapter().getCount());
+ }
+
+ private boolean isScrollableForAccessibility() {
+ T adapter = getAdapter();
+ if (adapter != null) {
+ final int itemCount = adapter.getCount();
+ return itemCount > 0
+ && (getFirstVisiblePosition() > 0 || getLastVisiblePosition() < itemCount - 1);
}
+ return false;
}
@Override
diff --git a/core/java/android/widget/AnalogClock.java b/core/java/android/widget/AnalogClock.java
index 84ebec3..63a0870 100644
--- a/core/java/android/widget/AnalogClock.java
+++ b/core/java/android/widget/AnalogClock.java
@@ -25,6 +25,7 @@
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Handler;
+import android.text.format.DateUtils;
import android.text.format.Time;
import android.util.AttributeSet;
import android.view.View;
@@ -228,6 +229,8 @@
mMinutes = minute + second / 60.0f;
mHour = hour + mMinutes / 60.0f;
mChanged = true;
+
+ updateContentDescription(mCalendar);
}
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@@ -243,4 +246,11 @@
invalidate();
}
};
+
+ private void updateContentDescription(Time time) {
+ final int flags = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR;
+ String contentDescription = DateUtils.formatDateTime(mContext,
+ time.toMillis(false), flags);
+ setContentDescription(contentDescription);
+ }
}
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 51506e8..083a952 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -29,12 +29,14 @@
import android.os.SystemClock;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
import android.widget.AbsListView.OnScrollListener;
/**
* Helper class for AbsListView to draw and control the Fast Scroll thumb
*/
class FastScroller {
+ private static final String TAG = "FastScroller";
// Minimum number of pages to justify showing a fast scroll thumb
private static int MIN_PAGES = 4;
@@ -81,15 +83,15 @@
private Drawable mOverlayDrawableLeft;
private Drawable mOverlayDrawableRight;
- private int mThumbH;
- private int mThumbW;
- private int mThumbY;
+ int mThumbH;
+ int mThumbW;
+ int mThumbY;
private RectF mOverlayPos;
private int mOverlaySize;
- private AbsListView mList;
- private boolean mScrollCompleted;
+ AbsListView mList;
+ boolean mScrollCompleted;
private int mVisibleItem;
private Paint mPaint;
private int mListOffset;
@@ -105,7 +107,7 @@
private Handler mHandler = new Handler();
- private BaseAdapter mListAdapter;
+ BaseAdapter mListAdapter;
private SectionIndexer mSectionIndexer;
private boolean mChangedBounds;
@@ -118,10 +120,36 @@
private boolean mMatchDragPosition;
+ float mInitialTouchY;
+ boolean mPendingDrag;
+ private int mScaledTouchSlop;
+
private static final int FADE_TIMEOUT = 1500;
+ private static final int PENDING_DRAG_DELAY = 180;
private final Rect mTmpRect = new Rect();
+ private final Runnable mDeferStartDrag = new Runnable() {
+ public void run() {
+ if (mList.mIsAttached) {
+ beginDrag();
+
+ final int viewHeight = mList.getHeight();
+ // Jitter
+ int newThumbY = (int) mInitialTouchY - mThumbH + 10;
+ if (newThumbY < 0) {
+ newThumbY = 0;
+ } else if (newThumbY + mThumbH > viewHeight) {
+ newThumbY = viewHeight - mThumbH;
+ }
+ mThumbY = newThumbY;
+ scrollTo((float) mThumbY / (viewHeight - mThumbH));
+ }
+
+ mPendingDrag = false;
+ }
+ };
+
public FastScroller(Context context, AbsListView listView) {
mList = listView;
init(context);
@@ -264,6 +292,8 @@
ta.recycle();
+ mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+
mMatchDragPosition = context.getApplicationInfo().targetSdkVersion >=
android.os.Build.VERSION_CODES.HONEYCOMB;
@@ -456,7 +486,7 @@
return mSections;
}
- private void getSectionsFromIndexer() {
+ void getSectionsFromIndexer() {
Adapter adapter = mList.getAdapter();
mSectionIndexer = null;
if (adapter instanceof HeaderViewListAdapter) {
@@ -489,7 +519,7 @@
mListAdapter = null;
}
- private void scrollTo(float position) {
+ void scrollTo(float position) {
int count = mList.getCount();
mScrollCompleted = false;
float fThreshold = (1.0f / count) / 8;
@@ -647,12 +677,45 @@
cancelFling.recycle();
}
+ void cancelPendingDrag() {
+ mList.removeCallbacks(mDeferStartDrag);
+ mPendingDrag = false;
+ }
+
+ void startPendingDrag() {
+ mPendingDrag = true;
+ mList.postDelayed(mDeferStartDrag, PENDING_DRAG_DELAY);
+ }
+
+ void beginDrag() {
+ setState(STATE_DRAGGING);
+ if (mListAdapter == null && mList != null) {
+ getSectionsFromIndexer();
+ }
+ if (mList != null) {
+ mList.requestDisallowInterceptTouchEvent(true);
+ mList.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
+ }
+
+ cancelFling();
+ }
+
boolean onInterceptTouchEvent(MotionEvent ev) {
- if (mState > STATE_NONE && ev.getAction() == MotionEvent.ACTION_DOWN) {
- if (isPointInside(ev.getX(), ev.getY())) {
- setState(STATE_DRAGGING);
- return true;
- }
+ switch (ev.getActionMasked()) {
+ case MotionEvent.ACTION_DOWN:
+ if (mState > STATE_NONE && isPointInside(ev.getX(), ev.getY())) {
+ if (!mList.isInScrollingContainer()) {
+ beginDrag();
+ return true;
+ }
+ mInitialTouchY = ev.getY();
+ startPendingDrag();
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ cancelPendingDrag();
+ break;
}
return false;
}
@@ -666,19 +729,32 @@
if (action == MotionEvent.ACTION_DOWN) {
if (isPointInside(me.getX(), me.getY())) {
- setState(STATE_DRAGGING);
- if (mListAdapter == null && mList != null) {
- getSectionsFromIndexer();
+ if (!mList.isInScrollingContainer()) {
+ beginDrag();
+ return true;
}
- if (mList != null) {
- mList.requestDisallowInterceptTouchEvent(true);
- mList.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
- }
-
- cancelFling();
- return true;
+ mInitialTouchY = me.getY();
+ startPendingDrag();
}
} else if (action == MotionEvent.ACTION_UP) { // don't add ACTION_CANCEL here
+ if (mPendingDrag) {
+ // Allow a tap to scroll.
+ beginDrag();
+
+ final int viewHeight = mList.getHeight();
+ // Jitter
+ int newThumbY = (int) me.getY() - mThumbH + 10;
+ if (newThumbY < 0) {
+ newThumbY = 0;
+ } else if (newThumbY + mThumbH > viewHeight) {
+ newThumbY = viewHeight - mThumbH;
+ }
+ mThumbY = newThumbY;
+ scrollTo((float) mThumbY / (viewHeight - mThumbH));
+
+ cancelPendingDrag();
+ // Will hit the STATE_DRAGGING check below
+ }
if (mState == STATE_DRAGGING) {
if (mList != null) {
// ViewGroup does the right thing already, but there might
@@ -698,6 +774,23 @@
return true;
}
} else if (action == MotionEvent.ACTION_MOVE) {
+ if (mPendingDrag) {
+ final float y = me.getY();
+ if (Math.abs(y - mInitialTouchY) > mScaledTouchSlop) {
+ setState(STATE_DRAGGING);
+ if (mListAdapter == null && mList != null) {
+ getSectionsFromIndexer();
+ }
+ if (mList != null) {
+ mList.requestDisallowInterceptTouchEvent(true);
+ mList.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
+ }
+
+ cancelFling();
+ cancelPendingDrag();
+ // Will hit the STATE_DRAGGING check below
+ }
+ }
if (mState == STATE_DRAGGING) {
final int viewHeight = mList.getHeight();
// Jitter
@@ -717,6 +810,8 @@
}
return true;
}
+ } else if (action == MotionEvent.ACTION_CANCEL) {
+ cancelPendingDrag();
}
return false;
}
diff --git a/core/java/android/widget/Gallery.java b/core/java/android/widget/Gallery.java
index 3f5b571c..5e37fa8 100644
--- a/core/java/android/widget/Gallery.java
+++ b/core/java/android/widget/Gallery.java
@@ -32,8 +32,6 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Transformation;
import com.android.internal.R;
@@ -354,33 +352,6 @@
return child.getMeasuredHeight();
}
- @Override
- public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(info);
- info.setScrollable(true);
- }
-
- @Override
- public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(event);
- event.setScrollable(true);
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- event.setFromIndex(mFirstPosition);
- event.setToIndex(mFirstPosition + getChildCount());
- event.setItemCount(mItemCount);
- }
- }
-
- @Override
- public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // Do not append text content to scroll events they are fired frequently
- // and the client has already received another event type with the text.
- if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- super.dispatchPopulateAccessibilityEvent(event);
- }
- return false;
- }
-
/**
* Tracks a motion scroll. In reality, this is used to do just about any
* movement to items (touch scroll, arrow-key scroll, set an item as selected).
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index ba69288..fb9047b 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -850,32 +850,65 @@
return c.getVisibility() == View.GONE;
}
- private void measureChildWithMargins(View child, int widthMeasureSpec, int heightMeasureSpec) {
- LayoutParams lp = getLayoutParams(child);
- int childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec,
- mPaddingLeft + mPaddingRight + getTotalMargin(child, true), lp.width);
- int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec,
- mPaddingTop + mPaddingBottom + getTotalMargin(child, false), lp.height);
- child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+ private void measureChildWithMargins2(View child, int parentWidthSpec, int parentHeightSpec,
+ int childWidth, int childHeight) {
+ int childWidthSpec = getChildMeasureSpec(parentWidthSpec,
+ mPaddingLeft + mPaddingRight + getTotalMargin(child, true), childWidth);
+ int childHeightSpec = getChildMeasureSpec(parentHeightSpec,
+ mPaddingTop + mPaddingBottom + getTotalMargin(child, false), childHeight);
+ child.measure(childWidthSpec, childHeightSpec);
}
- private void measureChildrenWithMargins(int widthMeasureSpec, int heightMeasureSpec) {
+ private void measureChildrenWithMargins(int widthSpec, int heightSpec, boolean firstPass) {
for (int i = 0, N = getChildCount(); i < N; i++) {
View c = getChildAt(i);
if (isGone(c)) continue;
- measureChildWithMargins(c, widthMeasureSpec, heightMeasureSpec);
+ LayoutParams lp = getLayoutParams(c);
+ if (firstPass) {
+ measureChildWithMargins2(c, widthSpec, heightSpec, lp.width, lp.height);
+ } else {
+ Spec spec = (orientation == HORIZONTAL) ? lp.columnSpec : lp.rowSpec;
+ if (spec.alignment == FILL) {
+ Interval span = spec.span;
+ Axis axis = (orientation == HORIZONTAL) ? horizontalAxis : verticalAxis;
+ int[] locations = axis.getLocations();
+ int size = locations[span.max] - locations[span.min];
+ if (orientation == HORIZONTAL) {
+ measureChildWithMargins2(c, widthSpec, heightSpec, size, lp.height);
+ } else {
+ measureChildWithMargins2(c, widthSpec, heightSpec, lp.width, size);
+ }
+ }
+ }
}
}
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
- measureChildrenWithMargins(widthSpec, heightSpec);
+ /** If we have been called by {@link View#measure(int, int)}, one of width or height
+ * is likely to have changed. We must invalidate if so. */
+ invalidateValues();
- int width = getPaddingLeft() + horizontalAxis.getMeasure(widthSpec) + getPaddingRight();
- int height = getPaddingTop() + verticalAxis.getMeasure(heightSpec) + getPaddingBottom();
+ measureChildrenWithMargins(widthSpec, heightSpec, true);
- int measuredWidth = Math.max(width, getSuggestedMinimumWidth());
- int measuredHeight = Math.max(height, getSuggestedMinimumHeight());
+ int width, height;
+
+ // Use the orientation property to decide which axis should be laid out first.
+ if (orientation == HORIZONTAL) {
+ width = horizontalAxis.getMeasure(widthSpec);
+ measureChildrenWithMargins(widthSpec, heightSpec, false);
+ height = verticalAxis.getMeasure(heightSpec);
+ } else {
+ height = verticalAxis.getMeasure(heightSpec);
+ measureChildrenWithMargins(widthSpec, heightSpec, false);
+ width = horizontalAxis.getMeasure(widthSpec);
+ }
+
+ int hPadding = getPaddingLeft() + getPaddingRight();
+ int vPadding = getPaddingTop() + getPaddingBottom();
+
+ int measuredWidth = Math.max(hPadding + width, getSuggestedMinimumWidth());
+ int measuredHeight = Math.max(vPadding + height, getSuggestedMinimumHeight());
setMeasuredDimension(
resolveSizeAndState(measuredWidth, widthSpec, 0),
@@ -1015,8 +1048,6 @@
for the vertical one.
*/
final class Axis {
- private static final int MIN_VALUE = -1000000;
-
private static final int NEW = 0;
private static final int PENDING = 1;
private static final int COMPLETE = 2;
@@ -1024,7 +1055,7 @@
public final boolean horizontal;
public int definedCount = UNDEFINED;
- private int inferredCount = UNDEFINED;
+ private int maxIndex = UNDEFINED;
PackedMap<Spec, Bounds> groupBounds;
public boolean groupBoundsValid = false;
@@ -1056,28 +1087,29 @@
this.horizontal = horizontal;
}
- private int maxIndex() {
- // note the number Integer.MIN_VALUE + 1 comes up in undefined cells
- int count = -1;
+ private int calculateMaxIndex() {
+ // the number Integer.MIN_VALUE + 1 comes up in undefined cells
+ int result = -1;
for (int i = 0, N = getChildCount(); i < N; i++) {
View c = getChildAt(i);
LayoutParams params = getLayoutParams(c);
Spec spec = horizontal ? params.columnSpec : params.rowSpec;
- count = max(count, spec.span.min);
- count = max(count, spec.span.max);
+ Interval span = spec.span;
+ result = max(result, span.min);
+ result = max(result, span.max);
}
- return count == -1 ? UNDEFINED : count;
+ return result == -1 ? UNDEFINED : result;
}
- private int getInferredCount() {
- if (inferredCount == UNDEFINED) {
- inferredCount = max(0, maxIndex()); // if there are no cells, actual count is zero
+ private int getMaxIndex() {
+ if (maxIndex == UNDEFINED) {
+ maxIndex = max(0, calculateMaxIndex()); // use zero when there are no children
}
- return inferredCount;
+ return maxIndex;
}
public int getCount() {
- return max(definedCount, getInferredCount());
+ return max(definedCount, getMaxIndex());
}
public void setCount(int count) {
@@ -1179,7 +1211,7 @@
}
private void include(List<Arc> arcs, Interval key, MutableInt size,
- boolean ignoreIfAlreadyPresent) {
+ boolean ignoreIfAlreadyPresent) {
/*
Remove self referential links.
These appear:
@@ -1341,19 +1373,18 @@
}
private void init(int[] locations) {
- Arrays.fill(locations, MIN_VALUE);
- locations[0] = 0;
+ Arrays.fill(locations, 0);
}
private String arcsToString(List<Arc> arcs) {
- String var = horizontal ? "c" : "r";
+ String var = horizontal ? "x" : "y";
StringBuilder result = new StringBuilder();
- boolean first = false;
- for(Arc arc : arcs) {
- if (!first) {
- first = true;
+ boolean first = true;
+ for (Arc arc : arcs) {
+ if (first) {
+ first = false;
} else {
- result =result.append(", ");
+ result = result.append(", ");
}
int src = arc.span.min;
int dst = arc.span.max;
@@ -1434,10 +1465,6 @@
if (originalCulprits != null) {
logError(axisName, arcs, originalCulprits);
}
- if (DEBUG) {
- Log.v(TAG, axisName + " iteration completed in " +
- (1 + i) + " steps of " + N);
- }
return;
}
}
@@ -1506,6 +1533,18 @@
private void computeLocations(int[] a) {
solve(getArcs(), a);
+ if (!orderPreserved) {
+ // Solve returns the smallest solution to the constraint system for which all
+ // values are positive. One value is therefore zero - though if the row/col
+ // order is not preserved this may not be the first vertex. For consistency,
+ // translate all the values so that they measure the distance from a[0]; the
+ // leading edge of the parent. After this transformation some values may be
+ // negative.
+ int a0 = a[0];
+ for (int i = 0, N = a.length; i < N; i++) {
+ a[i] = a[i] - a0;
+ }
+ }
}
public int[] getLocations() {
@@ -1521,7 +1560,10 @@
}
private int size(int[] locations) {
- return max2(locations, 0) - locations[0];
+ // The parental edges are attached to vertices 0 and N - even when order is not
+ // being preserved and other vertices fall outside this range. Measure the distance
+ // between vertices 0 and N, assuming that locations[0] = 0.
+ return locations[getCount()];
}
private void setParentConstraints(int min, int max) {
@@ -1561,7 +1603,7 @@
}
public void invalidateStructure() {
- inferredCount = UNDEFINED;
+ maxIndex = UNDEFINED;
groupBounds = null;
forwardLinks = null;
@@ -2139,8 +2181,8 @@
/**
* A Spec defines the horizontal or vertical characteristics of a group of
- * cells. Each spec. defines the <em>grid indices</em>, <em>alignment</em> and
- * <em>flexibility</em> along the appropriate axis.
+ * cells. Each spec. defines the <em>grid indices</em> and <em>alignment</em>
+ * along the appropriate axis.
* <p>
* The <em>grid indices</em> are the leading and trailing edges of this cell group.
* See {@link GridLayout} for a description of the conventions used by GridLayout
@@ -2149,6 +2191,15 @@
* The <em>alignment</em> property specifies how cells should be aligned in this group.
* For row groups, this specifies the vertical alignment.
* For column groups, this specifies the horizontal alignment.
+ * <p>
+ * Use the following static methods to create specs:
+ * <ul>
+ * <li>{@link #spec(int)}</li>
+ * <li>{@link #spec(int, int)}</li>
+ * <li>{@link #spec(int, Alignment)}</li>
+ * <li>{@link #spec(int, int, Alignment)}</li>
+ * </ul>
+ *
*/
public static class Spec {
static final Spec UNDEFINED = spec(GridLayout.UNDEFINED);
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 1bbc501..57701ae 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -716,23 +716,17 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
- info.setScrollable(true);
+ info.setScrollable(getScrollRange() > 0);
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
- event.setScrollable(true);
- }
-
- @Override
- public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // Do not append text content to scroll events they are fired frequently
- // and the client has already received another event type with the text.
- if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- super.dispatchPopulateAccessibilityEvent(event);
- }
- return false;
+ event.setScrollable(getScrollRange() > 0);
+ event.setScrollX(mScrollX);
+ event.setScrollY(mScrollY);
+ event.setMaxScrollX(getScrollRange());
+ event.setMaxScrollY(mScrollY);
}
private int getScrollRange() {
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 42e27b1..9ef1aa1 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1997,31 +1997,6 @@
}
}
- @Override
- public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(event);
-
- // If the item count is less than 15 then subtract disabled items from the count and
- // position. Otherwise ignore disabled items.
- int itemCount = 0;
- int currentItemIndex = getSelectedItemPosition();
-
- ListAdapter adapter = getAdapter();
- if (adapter != null) {
- final int count = adapter.getCount();
- for (int i = 0; i < count; i++) {
- if (adapter.isEnabled(i)) {
- itemCount++;
- } else if (i <= currentItemIndex) {
- currentItemIndex--;
- }
- }
- }
-
- event.setItemCount(itemCount);
- event.setCurrentItemIndex(currentItemIndex);
- }
-
/**
* setSelectionAfterHeaderView set the selection to be the first list item
* after the header views.
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index e033d2d..df88fec 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -937,7 +937,8 @@
int left = 0;
if (mIndeterminateDrawable != null) {
- if (mOnlyIndeterminate) {
+ // Aspect ratio logic does not apply to AnimationDrawables
+ if (mOnlyIndeterminate && !(mIndeterminateDrawable instanceof AnimationDrawable)) {
// Maintain aspect ratio. Certain kinds of animated drawables
// get very confused otherwise.
final int intrinsicWidth = mIndeterminateDrawable.getIntrinsicWidth();
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 61ea5c9..767eaee 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -721,23 +721,18 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
- info.setScrollable(true);
+ info.setScrollable(getScrollRange() > 0);
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
- event.setScrollable(true);
- }
-
- @Override
- public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // Do not append text content to scroll events they are fired frequently
- // and the client has already received another event type with the text.
- if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- super.dispatchPopulateAccessibilityEvent(event);
- }
- return false;
+ final boolean scrollable = getScrollRange() > 0;
+ event.setScrollable(scrollable);
+ event.setScrollX(mScrollX);
+ event.setScrollY(mScrollY);
+ event.setMaxScrollX(mScrollX);
+ event.setMaxScrollY(getScrollRange());
}
private int getScrollRange() {
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index adf2b7b..6df80e4 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -92,6 +92,11 @@
private static final boolean DBG = false;
private static final String LOG_TAG = "SearchView";
+ /**
+ * Private constant for removing the microphone in the keyboard.
+ */
+ private static final String IME_OPTION_NO_MICROPHONE = "nm";
+
private OnQueryTextListener mOnQueryChangeListener;
private OnCloseListener mOnCloseListener;
private OnFocusChangeListener mOnQueryTextFocusChangeListener;
@@ -256,7 +261,7 @@
mQueryTextView.setOnItemClickListener(mOnItemClickListener);
mQueryTextView.setOnItemSelectedListener(mOnItemSelectedListener);
mQueryTextView.setOnKeyListener(mTextKeyListener);
- // Inform any listener of focus changes
+ // Inform any listener of focus changes
mQueryTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
@@ -335,6 +340,12 @@
}
// Cache the voice search capability
mVoiceButtonEnabled = hasVoiceSearch();
+
+ if (mVoiceButtonEnabled) {
+ // Disable the microphone on the keyboard, as a mic is displayed near the text box
+ // TODO: use imeOptions to disable voice input when the new API will be available
+ mQueryTextView.setPrivateImeOptions(IME_OPTION_NO_MICROPHONE);
+ }
updateViewsVisibility(isIconified());
}
diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java
index 3627890..bb27b73 100644
--- a/core/java/android/widget/ShareActionProvider.java
+++ b/core/java/android/widget/ShareActionProvider.java
@@ -171,6 +171,12 @@
activityChooserView.setExpandActivityOverflowButtonDrawable(drawable);
activityChooserView.setProvider(this);
+ // Set content description.
+ activityChooserView.setDefaultActionButtonContentDescription(
+ R.string.shareactionprovider_share_with_application);
+ activityChooserView.setExpandActivityOverflowButtonContentDescription(
+ R.string.shareactionprovider_share_with);
+
return activityChooserView;
}
diff --git a/core/java/android/widget/Space.java b/core/java/android/widget/Space.java
index d7b2ec2..bb53a77 100644
--- a/core/java/android/widget/Space.java
+++ b/core/java/android/widget/Space.java
@@ -32,20 +32,24 @@
*/
public Space(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ if (getVisibility() == VISIBLE) {
+ setVisibility(INVISIBLE);
+ }
}
/**
* {@inheritDoc}
*/
public Space(Context context, AttributeSet attrs) {
- super(context, attrs);
+ this(context, attrs, 0);
}
/**
* {@inheritDoc}
*/
public Space(Context context) {
- super(context);
+ //noinspection NullableProblems
+ this(context, null);
}
/**
@@ -58,22 +62,6 @@
}
/**
- * {@inheritDoc}
- */
- @Override
- public ViewGroup.LayoutParams getLayoutParams() {
- return super.getLayoutParams();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setLayoutParams(ViewGroup.LayoutParams params) {
- super.setLayoutParams(params);
- }
-
- /**
* Compare to: {@link View#getDefaultSize(int, int)}
* If mode is AT_MOST, return the child size instead of the parent size
* (unless it is too big).
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index 6b2f3e4..1da18aa 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -20,9 +20,9 @@
import android.text.Editable;
import android.text.Selection;
import android.text.Spanned;
+import android.text.method.WordIterator;
import android.text.style.SpellCheckSpan;
import android.text.style.SuggestionSpan;
-import android.util.Log;
import android.view.textservice.SpellCheckerSession;
import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
import android.view.textservice.SuggestionsInfo;
@@ -31,7 +31,7 @@
import com.android.internal.util.ArrayUtils;
-import java.util.Locale;
+import java.text.BreakIterator;
/**
@@ -40,23 +40,26 @@
* @hide
*/
public class SpellChecker implements SpellCheckerSessionListener {
- private static final String LOG_TAG = "SpellChecker";
- private static final boolean DEBUG_SPELL_CHECK = false;
- private static final int DELAY_BEFORE_SPELL_CHECK = 400; // milliseconds
+
+ private final static int MAX_SPELL_BATCH_SIZE = 50;
private final TextView mTextView;
final SpellCheckerSession mSpellCheckerSession;
final int mCookie;
- // Paired arrays for the (id, spellCheckSpan) pair. mIndex is the next available position
+ // Paired arrays for the (id, spellCheckSpan) pair. A negative id means the associated
+ // SpellCheckSpan has been recycled and can be-reused.
+ // Contains null SpellCheckSpans after index mLength.
private int[] mIds;
private SpellCheckSpan[] mSpellCheckSpans;
- // The actual current number of used slots in the above arrays
+ // The mLength first elements of the above arrays have been initialized
private int mLength;
+ // Parsers on chunck of text, cutting text into words that will be checked
+ private SpellParser[] mSpellParsers = new SpellParser[0];
+
private int mSpanSequenceCounter = 0;
- private Runnable mChecker;
public SpellChecker(TextView textView) {
mTextView = textView;
@@ -64,12 +67,14 @@
final TextServicesManager textServicesManager = (TextServicesManager) textView.getContext().
getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
mSpellCheckerSession = textServicesManager.newSpellCheckerSession(
- null /* not currently used by the textServicesManager */, Locale.getDefault(),
- this, true /* means use the languages defined in Settings */);
+ null /* not currently used by the textServicesManager */,
+ null /* null locale means use the languages defined in Settings
+ if referToSpellCheckerLanguageSettings is true */,
+ this, true /* means use the languages defined in Settings */);
mCookie = hashCode();
// Arbitrary: 4 simultaneous spell check spans. Will automatically double size on demand
- final int size = ArrayUtils.idealObjectArraySize(4);
+ final int size = ArrayUtils.idealObjectArraySize(1);
mIds = new int[size];
mSpellCheckSpans = new SpellCheckSpan[size];
mLength = 0;
@@ -79,7 +84,7 @@
* @return true if a spell checker session has successfully been created. Returns false if not,
* for instance when spell checking has been disabled in settings.
*/
- public boolean isSessionActive() {
+ private boolean isSessionActive() {
return mSpellCheckerSession != null;
}
@@ -87,76 +92,81 @@
if (mSpellCheckerSession != null) {
mSpellCheckerSession.close();
}
+
+ final int length = mSpellParsers.length;
+ for (int i = 0; i < length; i++) {
+ mSpellParsers[i].close();
+ }
}
- public void addSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
- int length = mIds.length;
- if (mLength >= length) {
- final int newSize = length * 2;
+ private int nextSpellCheckSpanIndex() {
+ for (int i = 0; i < mLength; i++) {
+ if (mIds[i] < 0) return i;
+ }
+
+ if (mLength == mSpellCheckSpans.length) {
+ final int newSize = mLength * 2;
int[] newIds = new int[newSize];
SpellCheckSpan[] newSpellCheckSpans = new SpellCheckSpan[newSize];
- System.arraycopy(mIds, 0, newIds, 0, length);
- System.arraycopy(mSpellCheckSpans, 0, newSpellCheckSpans, 0, length);
+ System.arraycopy(mIds, 0, newIds, 0, mLength);
+ System.arraycopy(mSpellCheckSpans, 0, newSpellCheckSpans, 0, mLength);
mIds = newIds;
mSpellCheckSpans = newSpellCheckSpans;
}
- mIds[mLength] = mSpanSequenceCounter++;
- mSpellCheckSpans[mLength] = spellCheckSpan;
+ mSpellCheckSpans[mLength] = new SpellCheckSpan();
mLength++;
+ return mLength - 1;
+ }
- if (DEBUG_SPELL_CHECK) {
- final Editable mText = (Editable) mTextView.getText();
- int start = mText.getSpanStart(spellCheckSpan);
- int end = mText.getSpanEnd(spellCheckSpan);
- if (start >= 0 && end >= 0) {
- Log.d(LOG_TAG, "Schedule check " + mText.subSequence(start, end));
- } else {
- Log.d(LOG_TAG, "Schedule check EMPTY!");
- }
- }
-
- scheduleSpellCheck();
+ private void addSpellCheckSpan(Editable editable, int start, int end) {
+ final int index = nextSpellCheckSpanIndex();
+ editable.setSpan(mSpellCheckSpans[index], start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ mIds[index] = mSpanSequenceCounter++;
}
public void removeSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
for (int i = 0; i < mLength; i++) {
if (mSpellCheckSpans[i] == spellCheckSpan) {
- removeAtIndex(i);
+ mSpellCheckSpans[i].setSpellCheckInProgress(false);
+ mIds[i] = -1;
return;
}
}
}
- private void removeAtIndex(int i) {
- System.arraycopy(mIds, i + 1, mIds, i, mLength - i - 1);
- System.arraycopy(mSpellCheckSpans, i + 1, mSpellCheckSpans, i, mLength - i - 1);
- mLength--;
- }
-
public void onSelectionChanged() {
- scheduleSpellCheck();
+ spellCheck();
}
- private void scheduleSpellCheck() {
- if (mLength == 0) return;
- if (mSpellCheckerSession == null) return;
+ public void spellCheck(int start, int end) {
+ if (!isSessionActive()) return;
- if (mChecker != null) {
- mTextView.removeCallbacks(mChecker);
+ final int length = mSpellParsers.length;
+ for (int i = 0; i < length; i++) {
+ final SpellParser spellParser = mSpellParsers[i];
+ if (spellParser.isDone()) {
+ spellParser.init(start, end);
+ spellParser.parse();
+ return;
+ }
}
- if (mChecker == null) {
- mChecker = new Runnable() {
- public void run() {
- spellCheck();
- }
- };
- }
- mTextView.postDelayed(mChecker, DELAY_BEFORE_SPELL_CHECK);
+
+ // No available parser found in pool, create a new one
+ SpellParser[] newSpellParsers = new SpellParser[length + 1];
+ System.arraycopy(mSpellParsers, 0, newSpellParsers, 0, length);
+ mSpellParsers = newSpellParsers;
+
+ SpellParser spellParser = new SpellParser();
+ mSpellParsers[length] = spellParser;
+ spellParser.init(start, end);
+ spellParser.parse();
}
private void spellCheck() {
- final Editable editable = (Editable) mTextView.getText();
+ if (mSpellCheckerSession == null) return;
+
+ Editable editable = (Editable) mTextView.getText();
final int selectionStart = Selection.getSelectionStart(editable);
final int selectionEnd = Selection.getSelectionEnd(editable);
@@ -164,8 +174,7 @@
int textInfosCount = 0;
for (int i = 0; i < mLength; i++) {
- SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
-
+ final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
if (spellCheckSpan.isSpellCheckInProgress()) continue;
final int start = editable.getSpanStart(spellCheckSpan);
@@ -174,13 +183,13 @@
// Do not check this word if the user is currently editing it
if (start >= 0 && end > start && (selectionEnd < start || selectionStart > end)) {
final String word = editable.subSequence(start, end).toString();
- spellCheckSpan.setSpellCheckInProgress();
+ spellCheckSpan.setSpellCheckInProgress(true);
textInfos[textInfosCount++] = new TextInfo(word, mCookie, mIds[i]);
}
}
if (textInfosCount > 0) {
- if (textInfosCount < mLength) {
+ if (textInfosCount < textInfos.length) {
TextInfo[] textInfosCopy = new TextInfo[textInfosCount];
System.arraycopy(textInfos, 0, textInfosCopy, 0, textInfosCount);
textInfos = textInfosCopy;
@@ -192,65 +201,229 @@
@Override
public void onGetSuggestions(SuggestionsInfo[] results) {
- final Editable editable = (Editable) mTextView.getText();
+ Editable editable = (Editable) mTextView.getText();
+
for (int i = 0; i < results.length; i++) {
SuggestionsInfo suggestionsInfo = results[i];
if (suggestionsInfo.getCookie() != mCookie) continue;
-
final int sequenceNumber = suggestionsInfo.getSequence();
- // Starting from the end, to limit the number of array copy while removing
- for (int j = mLength - 1; j >= 0; j--) {
+
+ for (int j = 0; j < mLength; j++) {
if (sequenceNumber == mIds[j]) {
- SpellCheckSpan spellCheckSpan = mSpellCheckSpans[j];
final int attributes = suggestionsInfo.getSuggestionsAttributes();
boolean isInDictionary =
((attributes & SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY) > 0);
boolean looksLikeTypo =
((attributes & SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO) > 0);
- if (DEBUG_SPELL_CHECK) {
- final int start = editable.getSpanStart(spellCheckSpan);
- final int end = editable.getSpanEnd(spellCheckSpan);
- Log.d(LOG_TAG, "Result sequence=" + suggestionsInfo.getSequence() + " " +
- editable.subSequence(start, end) +
- "\t" + (isInDictionary?"IN_DICT" : "NOT_DICT") +
- "\t" + (looksLikeTypo?"TYPO" : "NOT_TYPO"));
- }
-
+ SpellCheckSpan spellCheckSpan = mSpellCheckSpans[j];
if (!isInDictionary && looksLikeTypo) {
- String[] suggestions = getSuggestions(suggestionsInfo);
- if (suggestions.length > 0) {
- SuggestionSpan suggestionSpan = new SuggestionSpan(
- mTextView.getContext(), suggestions,
- SuggestionSpan.FLAG_EASY_CORRECT |
- SuggestionSpan.FLAG_MISSPELLED);
- final int start = editable.getSpanStart(spellCheckSpan);
- final int end = editable.getSpanEnd(spellCheckSpan);
- editable.setSpan(suggestionSpan, start, end,
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- // TODO limit to the word rectangle region
- mTextView.invalidate();
-
- if (DEBUG_SPELL_CHECK) {
- String suggestionsString = "";
- for (String s : suggestions) { suggestionsString += s + "|"; }
- Log.d(LOG_TAG, " Suggestions for " + sequenceNumber + " " +
- editable.subSequence(start, end)+ " " + suggestionsString);
- }
- }
+ createMisspelledSuggestionSpan(editable, suggestionsInfo, spellCheckSpan);
}
editable.removeSpan(spellCheckSpan);
+ break;
}
}
}
+
+ final int length = mSpellParsers.length;
+ for (int i = 0; i < length; i++) {
+ final SpellParser spellParser = mSpellParsers[i];
+ if (!spellParser.isDone()) {
+ spellParser.parse();
+ }
+ }
}
- private static String[] getSuggestions(SuggestionsInfo suggestionsInfo) {
- final int len = Math.max(0, suggestionsInfo.getSuggestionsCount());
- String[] suggestions = new String[len];
- for (int j = 0; j < len; ++j) {
- suggestions[j] = suggestionsInfo.getSuggestionAt(j);
+ private void createMisspelledSuggestionSpan(Editable editable,
+ SuggestionsInfo suggestionsInfo, SpellCheckSpan spellCheckSpan) {
+ final int start = editable.getSpanStart(spellCheckSpan);
+ final int end = editable.getSpanEnd(spellCheckSpan);
+ if (start < 0 || end < 0) return; // span was removed in the meantime
+
+ // Other suggestion spans may exist on that region, with identical suggestions, filter
+ // them out to avoid duplicates. First, filter suggestion spans on that exact region.
+ SuggestionSpan[] suggestionSpans = editable.getSpans(start, end, SuggestionSpan.class);
+ final int length = suggestionSpans.length;
+ for (int i = 0; i < length; i++) {
+ final int spanStart = editable.getSpanStart(suggestionSpans[i]);
+ final int spanEnd = editable.getSpanEnd(suggestionSpans[i]);
+ if (spanStart != start || spanEnd != end) {
+ suggestionSpans[i] = null;
+ }
}
- return suggestions;
+
+ final int suggestionsCount = suggestionsInfo.getSuggestionsCount();
+ String[] suggestions;
+ if (suggestionsCount <= 0) {
+ // A negative suggestion count is possible
+ suggestions = ArrayUtils.emptyArray(String.class);
+ } else {
+ int numberOfSuggestions = 0;
+ suggestions = new String[suggestionsCount];
+
+ for (int i = 0; i < suggestionsCount; i++) {
+ final String spellSuggestion = suggestionsInfo.getSuggestionAt(i);
+ if (spellSuggestion == null) break;
+ boolean suggestionFound = false;
+
+ for (int j = 0; j < length && !suggestionFound; j++) {
+ if (suggestionSpans[j] == null) break;
+
+ String[] suggests = suggestionSpans[j].getSuggestions();
+ for (int k = 0; k < suggests.length; k++) {
+ if (spellSuggestion.equals(suggests[k])) {
+ // The suggestion is already provided by an other SuggestionSpan
+ suggestionFound = true;
+ break;
+ }
+ }
+ }
+
+ if (!suggestionFound) {
+ suggestions[numberOfSuggestions++] = spellSuggestion;
+ }
+ }
+
+ if (numberOfSuggestions != suggestionsCount) {
+ String[] newSuggestions = new String[numberOfSuggestions];
+ System.arraycopy(suggestions, 0, newSuggestions, 0, numberOfSuggestions);
+ suggestions = newSuggestions;
+ }
+ }
+
+ SuggestionSpan suggestionSpan = new SuggestionSpan(mTextView.getContext(), suggestions,
+ SuggestionSpan.FLAG_EASY_CORRECT | SuggestionSpan.FLAG_MISSPELLED);
+ editable.setSpan(suggestionSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ // TODO limit to the word rectangle region
+ mTextView.invalidate();
+ }
+
+ private class SpellParser {
+ private WordIterator mWordIterator = new WordIterator(/*TODO Locale*/);
+ private Object mRange = new Object();
+
+ public void init(int start, int end) {
+ ((Editable) mTextView.getText()).setSpan(mRange, start, end,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+
+ public void close() {
+ ((Editable) mTextView.getText()).removeSpan(mRange);
+ }
+
+ public boolean isDone() {
+ return ((Editable) mTextView.getText()).getSpanStart(mRange) < 0;
+ }
+
+ public void parse() {
+ Editable editable = (Editable) mTextView.getText();
+ // Iterate over the newly added text and schedule new SpellCheckSpans
+ final int start = editable.getSpanStart(mRange);
+ final int end = editable.getSpanEnd(mRange);
+ mWordIterator.setCharSequence(editable, start, end);
+
+ // Move back to the beginning of the current word, if any
+ int wordStart = mWordIterator.preceding(start);
+ int wordEnd;
+ if (wordStart == BreakIterator.DONE) {
+ wordEnd = mWordIterator.following(start);
+ if (wordEnd != BreakIterator.DONE) {
+ wordStart = mWordIterator.getBeginning(wordEnd);
+ }
+ } else {
+ wordEnd = mWordIterator.getEnd(wordStart);
+ }
+ if (wordEnd == BreakIterator.DONE) {
+ editable.removeSpan(mRange);
+ return;
+ }
+
+ // We need to expand by one character because we want to include the spans that
+ // end/start at position start/end respectively.
+ SpellCheckSpan[] spellCheckSpans = editable.getSpans(start - 1, end + 1,
+ SpellCheckSpan.class);
+ SuggestionSpan[] suggestionSpans = editable.getSpans(start - 1, end + 1,
+ SuggestionSpan.class);
+
+ int nbWordsChecked = 0;
+ boolean scheduleOtherSpellCheck = false;
+
+ while (wordStart <= end) {
+ if (wordEnd >= start && wordEnd > wordStart) {
+ // A new word has been created across the interval boundaries with this edit.
+ // Previous spans (ended on start / started on end) removed, not valid anymore
+ if (wordStart < start && wordEnd > start) {
+ removeSpansAt(editable, start, spellCheckSpans);
+ removeSpansAt(editable, start, suggestionSpans);
+ }
+
+ if (wordStart < end && wordEnd > end) {
+ removeSpansAt(editable, end, spellCheckSpans);
+ removeSpansAt(editable, end, suggestionSpans);
+ }
+
+ // Do not create new boundary spans if they already exist
+ boolean createSpellCheckSpan = true;
+ if (wordEnd == start) {
+ for (int i = 0; i < spellCheckSpans.length; i++) {
+ final int spanEnd = editable.getSpanEnd(spellCheckSpans[i]);
+ if (spanEnd == start) {
+ createSpellCheckSpan = false;
+ break;
+ }
+ }
+ }
+
+ if (wordStart == end) {
+ for (int i = 0; i < spellCheckSpans.length; i++) {
+ final int spanStart = editable.getSpanStart(spellCheckSpans[i]);
+ if (spanStart == end) {
+ createSpellCheckSpan = false;
+ break;
+ }
+ }
+ }
+
+ if (createSpellCheckSpan) {
+ if (nbWordsChecked == MAX_SPELL_BATCH_SIZE) {
+ scheduleOtherSpellCheck = true;
+ break;
+ }
+ addSpellCheckSpan(editable, wordStart, wordEnd);
+ nbWordsChecked++;
+ }
+ }
+
+ // iterate word by word
+ wordEnd = mWordIterator.following(wordEnd);
+ if (wordEnd == BreakIterator.DONE) break;
+ wordStart = mWordIterator.getBeginning(wordEnd);
+ if (wordStart == BreakIterator.DONE) {
+ break;
+ }
+ }
+
+ if (scheduleOtherSpellCheck) {
+ editable.setSpan(mRange, wordStart, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ } else {
+ editable.removeSpan(mRange);
+ }
+
+ spellCheck();
+ }
+
+ private <T> void removeSpansAt(Editable editable, int offset, T[] spans) {
+ final int length = spans.length;
+ for (int i = 0; i < length; i++) {
+ final T span = spans[i];
+ final int start = editable.getSpanStart(span);
+ if (start > offset) continue;
+ final int end = editable.getSpanEnd(span);
+ if (end < offset) continue;
+ editable.removeSpan(span);
+ }
+ }
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index bffdadc..324198f 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -2476,6 +2476,7 @@
if (gravity != mGravity) {
invalidate();
+ mLayoutAlignment = null;
}
mGravity = gravity;
@@ -2937,11 +2938,19 @@
Spannable sp = new SpannableString(mText);
- for (ChangeWatcher cw :
- sp.getSpans(0, sp.length(), ChangeWatcher.class)) {
+ for (ChangeWatcher cw : sp.getSpans(0, sp.length(), ChangeWatcher.class)) {
sp.removeSpan(cw);
}
+ SuggestionSpan[] suggestionSpans = sp.getSpans(0, sp.length(), SuggestionSpan.class);
+ for (int i = 0; i < suggestionSpans.length; i++) {
+ int flags = suggestionSpans[i].getFlags();
+ if ((flags & SuggestionSpan.FLAG_EASY_CORRECT) != 0
+ && (flags & SuggestionSpan.FLAG_MISSPELLED) != 0) {
+ sp.removeSpan(suggestionSpans[i]);
+ }
+ }
+
sp.removeSpan(mSuggestionRangeSpan);
ss.text = sp;
@@ -4449,7 +4458,6 @@
if (mSpellChecker != null) {
mSpellChecker.closeSession();
- removeMisspelledSpans();
// Forces the creation of a new SpellChecker next time this window is created.
// Will handle the cases where the settings has been changed in the meantime.
mSpellChecker = null;
@@ -5537,7 +5545,7 @@
@Override public boolean onCheckIsTextEditor() {
return mInputType != EditorInfo.TYPE_NULL;
}
-
+
@Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
if (onCheckIsTextEditor() && isEnabled()) {
if (mInputMethodState == null) {
@@ -6115,7 +6123,7 @@
* not the full view width with padding.
* {@hide}
*/
- protected void makeNewLayout(int w, int hintWidth,
+ protected void makeNewLayout(int wantWidth, int hintWidth,
BoringLayout.Metrics boring,
BoringLayout.Metrics hintBoring,
int ellipsisWidth, boolean bringIntoView) {
@@ -6127,8 +6135,8 @@
mHighlightPathBogus = true;
- if (w < 0) {
- w = 0;
+ if (wantWidth < 0) {
+ wantWidth = 0;
}
if (hintWidth < 0) {
hintWidth = 0;
@@ -6148,12 +6156,12 @@
resolveTextDirection();
}
- mLayout = makeSingleLayout(w, boring, ellipsisWidth, alignment, shouldEllipsize,
+ mLayout = makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize,
effectiveEllipsize, effectiveEllipsize == mEllipsize);
if (switchEllipsize) {
TruncateAt oppositeEllipsize = effectiveEllipsize == TruncateAt.MARQUEE ?
TruncateAt.END : TruncateAt.MARQUEE;
- mSavedMarqueeModeLayout = makeSingleLayout(w, boring, ellipsisWidth, alignment,
+ mSavedMarqueeModeLayout = makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment,
shouldEllipsize, oppositeEllipsize, effectiveEllipsize != mEllipsize);
}
@@ -6161,7 +6169,7 @@
mHintLayout = null;
if (mHint != null) {
- if (shouldEllipsize) hintWidth = w;
+ if (shouldEllipsize) hintWidth = wantWidth;
if (hintBoring == UNKNOWN_BORING) {
hintBoring = BoringLayout.isBoring(mHint, mTextPaint, mTextDir,
@@ -6245,12 +6253,12 @@
prepareCursorControllers();
}
- private Layout makeSingleLayout(int w, BoringLayout.Metrics boring, int ellipsisWidth,
+ private Layout makeSingleLayout(int wantWidth, BoringLayout.Metrics boring, int ellipsisWidth,
Layout.Alignment alignment, boolean shouldEllipsize, TruncateAt effectiveEllipsize,
boolean useSaved) {
Layout result = null;
if (mText instanceof Spannable) {
- result = new DynamicLayout(mText, mTransformed, mTextPaint, w,
+ result = new DynamicLayout(mText, mTransformed, mTextPaint, wantWidth,
alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, mInput == null ? effectiveEllipsize : null,
ellipsisWidth);
@@ -6263,53 +6271,53 @@
}
if (boring != null) {
- if (boring.width <= w &&
+ if (boring.width <= wantWidth &&
(effectiveEllipsize == null || boring.width <= ellipsisWidth)) {
if (useSaved && mSavedLayout != null) {
result = mSavedLayout.replaceOrMake(mTransformed, mTextPaint,
- w, alignment, mSpacingMult, mSpacingAdd,
+ wantWidth, alignment, mSpacingMult, mSpacingAdd,
boring, mIncludePad);
} else {
result = BoringLayout.make(mTransformed, mTextPaint,
- w, alignment, mSpacingMult, mSpacingAdd,
+ wantWidth, alignment, mSpacingMult, mSpacingAdd,
boring, mIncludePad);
}
if (useSaved) {
mSavedLayout = (BoringLayout) result;
}
- } else if (shouldEllipsize && boring.width <= w) {
+ } else if (shouldEllipsize && boring.width <= wantWidth) {
if (useSaved && mSavedLayout != null) {
result = mSavedLayout.replaceOrMake(mTransformed, mTextPaint,
- w, alignment, mSpacingMult, mSpacingAdd,
+ wantWidth, alignment, mSpacingMult, mSpacingAdd,
boring, mIncludePad, effectiveEllipsize,
ellipsisWidth);
} else {
result = BoringLayout.make(mTransformed, mTextPaint,
- w, alignment, mSpacingMult, mSpacingAdd,
+ wantWidth, alignment, mSpacingMult, mSpacingAdd,
boring, mIncludePad, effectiveEllipsize,
ellipsisWidth);
}
} else if (shouldEllipsize) {
result = new StaticLayout(mTransformed,
0, mTransformed.length(),
- mTextPaint, w, alignment, mTextDir, mSpacingMult,
+ mTextPaint, wantWidth, alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, effectiveEllipsize,
ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
} else {
result = new StaticLayout(mTransformed, mTextPaint,
- w, alignment, mTextDir, mSpacingMult, mSpacingAdd,
+ wantWidth, alignment, mTextDir, mSpacingMult, mSpacingAdd,
mIncludePad);
}
} else if (shouldEllipsize) {
result = new StaticLayout(mTransformed,
0, mTransformed.length(),
- mTextPaint, w, alignment, mTextDir, mSpacingMult,
+ mTextPaint, wantWidth, alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, effectiveEllipsize,
ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
} else {
result = new StaticLayout(mTransformed, mTextPaint,
- w, alignment, mTextDir, mSpacingMult, mSpacingAdd,
+ wantWidth, alignment, mTextDir, mSpacingMult, mSpacingAdd,
mIncludePad);
}
}
@@ -7492,9 +7500,6 @@
*/
protected void onSelectionChanged(int selStart, int selEnd) {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED);
- if (mSpellChecker != null) {
- mSpellChecker.onSelectionChanged();
- }
}
/**
@@ -7553,6 +7558,8 @@
for (int i = 0; i < length; i++) {
final int s = text.getSpanStart(spans[i]);
final int e = text.getSpanEnd(spans[i]);
+ // Spans that are adjacent to the edited region will be handled in
+ // updateSpellCheckSpans. Result depends on what will be added (space or text)
if (e == start || s == end) break;
text.removeSpan(spans[i]);
}
@@ -7610,9 +7617,6 @@
sendOnTextChanged(buffer, start, before, after);
onTextChanged(buffer, start, before, after);
- // The WordIterator text change listener may be called after this one.
- // Make sure this changed text is rescanned before the iterator is used on it.
- getWordIterator().forceUpdate();
updateSpellCheckSpans(start, start + after);
// Hide the controllers if the amount of content changed
@@ -7735,12 +7739,8 @@
}
}
- if (what instanceof SpellCheckSpan) {
- if (newStart < 0) {
- getSpellChecker().removeSpellCheckSpan((SpellCheckSpan) what);
- } else if (oldStart < 0) {
- getSpellChecker().addSpellCheckSpan((SpellCheckSpan) what);
- }
+ if (newStart < 0 && what instanceof SpellCheckSpan) {
+ getSpellChecker().removeSpellCheckSpan((SpellCheckSpan) what);
}
}
@@ -7748,79 +7748,8 @@
* Create new SpellCheckSpans on the modified region.
*/
private void updateSpellCheckSpans(int start, int end) {
- if (!isTextEditable() || !isSuggestionsEnabled() || !getSpellChecker().isSessionActive())
- return;
- Editable text = (Editable) mText;
-
- WordIterator wordIterator = getWordIterator();
- wordIterator.setCharSequence(text);
-
- // Move back to the beginning of the current word, if any
- int wordStart = wordIterator.preceding(start);
- int wordEnd;
- if (wordStart == BreakIterator.DONE) {
- wordEnd = wordIterator.following(start);
- if (wordEnd != BreakIterator.DONE) {
- wordStart = wordIterator.getBeginning(wordEnd);
- }
- } else {
- wordEnd = wordIterator.getEnd(wordStart);
- }
- if (wordEnd == BreakIterator.DONE) {
- return;
- }
-
- // Iterate over the newly added text and schedule new SpellCheckSpans
- while (wordStart <= end) {
- if (wordEnd >= start) {
- // A word across the interval boundaries must remove boundary edition spans
- if (wordStart < start && wordEnd > start) {
- removeEditionSpansAt(start, text);
- }
-
- if (wordStart < end && wordEnd > end) {
- removeEditionSpansAt(end, text);
- }
-
- // Do not create new boundary spans if they already exist
- boolean createSpellCheckSpan = true;
- if (wordEnd == start) {
- SpellCheckSpan[] spellCheckSpans = text.getSpans(start, start,
- SpellCheckSpan.class);
- if (spellCheckSpans.length > 0) createSpellCheckSpan = false;
- }
-
- if (wordStart == end) {
- SpellCheckSpan[] spellCheckSpans = text.getSpans(end, end,
- SpellCheckSpan.class);
- if (spellCheckSpans.length > 0) createSpellCheckSpan = false;
- }
-
- if (createSpellCheckSpan) {
- text.setSpan(new SpellCheckSpan(), wordStart, wordEnd,
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- }
-
- // iterate word by word
- wordEnd = wordIterator.following(wordEnd);
- if (wordEnd == BreakIterator.DONE) return;
- wordStart = wordIterator.getBeginning(wordEnd);
- if (wordStart == BreakIterator.DONE) {
- Log.e(LOG_TAG, "Unable to find word beginning from " + wordEnd + "in " + mText);
- return;
- }
- }
- }
-
- private static void removeEditionSpansAt(int offset, Editable text) {
- SuggestionSpan[] suggestionSpans = text.getSpans(offset, offset, SuggestionSpan.class);
- for (int i = 0; i < suggestionSpans.length; i++) {
- text.removeSpan(suggestionSpans[i]);
- }
- SpellCheckSpan[] spellCheckSpans = text.getSpans(offset, offset, SpellCheckSpan.class);
- for (int i = 0; i < spellCheckSpans.length; i++) {
- text.removeSpan(spellCheckSpans[i]);
+ if (isTextEditable() && isSuggestionsEnabled()) {
+ getSpellChecker().spellCheck(start, end);
}
}
@@ -8381,6 +8310,10 @@
boolean selectAllGotFocus = mSelectAllOnFocus && didTouchFocusSelect();
hideControllers();
if (!selectAllGotFocus && mText.length() > 0) {
+ if (mSpellChecker != null) {
+ // When the cursor moves, the word that was typed may need spell check
+ mSpellChecker.onSelectionChanged();
+ }
if (isCursorInsideEasyCorrectionSpan()) {
showSuggestions();
} else if (hasInsertionController()) {
@@ -8446,24 +8379,6 @@
}
}
- /**
- * Removes the suggestion spans for misspelled words.
- */
- private void removeMisspelledSpans() {
- if (mText instanceof Spannable) {
- Spannable spannable = (Spannable) mText;
- SuggestionSpan[] suggestionSpans = spannable.getSpans(0,
- spannable.length(), SuggestionSpan.class);
- for (int i = 0; i < suggestionSpans.length; i++) {
- int flags = suggestionSpans[i].getFlags();
- if ((flags & SuggestionSpan.FLAG_EASY_CORRECT) != 0
- && (flags & SuggestionSpan.FLAG_MISSPELLED) != 0) {
- spannable.removeSpan(suggestionSpans[i]);
- }
- }
- }
- }
-
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
if (mMovement != null && mText instanceof Spannable && mLayout != null) {
@@ -8919,31 +8834,57 @@
// If a URLSpan (web address, email, phone...) is found at that position, select it.
URLSpan[] urlSpans = ((Spanned) mText).getSpans(minOffset, maxOffset, URLSpan.class);
- if (urlSpans.length == 1) {
- URLSpan url = urlSpans[0];
- selectionStart = ((Spanned) mText).getSpanStart(url);
- selectionEnd = ((Spanned) mText).getSpanEnd(url);
+ if (urlSpans.length >= 1) {
+ URLSpan urlSpan = urlSpans[0];
+ selectionStart = ((Spanned) mText).getSpanStart(urlSpan);
+ selectionEnd = ((Spanned) mText).getSpanEnd(urlSpan);
} else {
- WordIterator wordIterator = getWordIterator();
- // WordIterator handles text changes, this is a no-op if text in unchanged.
- wordIterator.setCharSequence(mText);
+ if (mWordIterator == null) {
+ mWordIterator = new WordIterator();
+ }
+ mWordIterator.setCharSequence(mText, minOffset, maxOffset);
- selectionStart = wordIterator.getBeginning(minOffset);
+ selectionStart = mWordIterator.getBeginning(minOffset);
if (selectionStart == BreakIterator.DONE) return false;
- selectionEnd = wordIterator.getEnd(maxOffset);
+ selectionEnd = mWordIterator.getEnd(maxOffset);
if (selectionEnd == BreakIterator.DONE) return false;
+
+ if (selectionStart == selectionEnd) {
+ // Possible when the word iterator does not properly handle the text's language
+ long range = getCharRange(selectionStart);
+ selectionStart = extractRangeStartFromLong(range);
+ selectionEnd = extractRangeEndFromLong(range);
+ }
}
Selection.setSelection((Spannable) mText, selectionStart, selectionEnd);
- return true;
+ return selectionEnd > selectionStart;
}
- WordIterator getWordIterator() {
- if (mWordIterator == null) {
- mWordIterator = new WordIterator();
+ private long getCharRange(int offset) {
+ final int textLength = mText.length();
+ if (offset + 1 < textLength) {
+ final char currentChar = mText.charAt(offset);
+ final char nextChar = mText.charAt(offset + 1);
+ if (Character.isSurrogatePair(currentChar, nextChar)) {
+ return packRangeInLong(offset, offset + 2);
+ }
}
- return mWordIterator;
+ if (offset < textLength) {
+ return packRangeInLong(offset, offset + 1);
+ }
+ if (offset - 2 >= 0) {
+ final char previousChar = mText.charAt(offset - 1);
+ final char previousPreviousChar = mText.charAt(offset - 2);
+ if (Character.isSurrogatePair(previousPreviousChar, previousChar)) {
+ return packRangeInLong(offset - 2, offset);
+ }
+ }
+ if (offset - 1 >= 0) {
+ return packRangeInLong(offset - 1, offset);
+ }
+ return packRangeInLong(offset, offset);
}
private SpellChecker getSpellChecker() {
@@ -9171,19 +9112,23 @@
return true;
case ID_CUT:
- setPrimaryClip(ClipData.newPlainText(null, mTransformed.subSequence(min, max)));
+ setPrimaryClip(ClipData.newPlainText(null, getTransformedText(min, max)));
((Editable) mText).delete(min, max);
stopSelectionActionMode();
return true;
case ID_COPY:
- setPrimaryClip(ClipData.newPlainText(null, mTransformed.subSequence(min, max)));
+ setPrimaryClip(ClipData.newPlainText(null, getTransformedText(min, max)));
stopSelectionActionMode();
return true;
}
return false;
}
+ private CharSequence getTransformedText(int start, int end) {
+ return removeSuggestionSpans(mTransformed.subSequence(start, end));
+ }
+
/**
* Prepare text so that there are not zero or two spaces at beginning and end of region defined
* by [min, max] when replacing this region by paste.
@@ -9300,7 +9245,7 @@
// Start a drag
final int start = getSelectionStart();
final int end = getSelectionEnd();
- CharSequence selectedText = mTransformed.subSequence(start, end);
+ CharSequence selectedText = getTransformedText(start, end);
ClipData data = ClipData.newPlainText(null, selectedText);
DragLocalState localState = new DragLocalState(this, start, end);
startDrag(data, getTextThumbnailBuilder(selectedText), localState, 0);
@@ -9315,7 +9260,7 @@
// Start a new selection
if (!handled) {
- handled = startSelectionActionMode();
+ vibrate = handled = startSelectionActionMode();
}
if (vibrate) {
@@ -9463,8 +9408,8 @@
return false;
}
- int posX = mPositionX + positionX;
- int posY = mPositionY + positionY;
+ int posX = mPositionX + positionX - getScrollX();
+ int posY = mPositionY + positionY - getScrollY();
// Offset by 1 to take into account 0.5 and int rounding around getPrimaryHorizontal.
return posX >= clip.left - 1 && posX <= clip.right + 1 &&
@@ -9596,6 +9541,8 @@
private class SuggestionsPopupWindow extends PinnedPopupWindow implements OnItemClickListener {
private static final int MAX_NUMBER_SUGGESTIONS = SuggestionSpan.SUGGESTIONS_MAX_SIZE;
+ private static final int ADD_TO_DICTIONARY = -1;
+ private static final int DELETE_TEXT = -2;
private SuggestionInfo[] mSuggestionInfos;
private int mNumberOfSuggestions;
private boolean mCursorWasVisibleBeforeSuggestions;
@@ -9647,9 +9594,9 @@
listView.setOnItemClickListener(this);
mContentView = listView;
- // Inflate the suggestion items once and for all. +1 for add to dictionary
- mSuggestionInfos = new SuggestionInfo[MAX_NUMBER_SUGGESTIONS + 1];
- for (int i = 0; i < MAX_NUMBER_SUGGESTIONS + 1; i++) {
+ // Inflate the suggestion items once and for all. + 2 for add to dictionary and delete
+ mSuggestionInfos = new SuggestionInfo[MAX_NUMBER_SUGGESTIONS + 2];
+ for (int i = 0; i < mSuggestionInfos.length; i++) {
mSuggestionInfos[i] = new SuggestionInfo();
}
}
@@ -9661,15 +9608,6 @@
SpannableStringBuilder text = new SpannableStringBuilder();
TextAppearanceSpan highlightSpan = new TextAppearanceSpan(mContext,
android.R.style.TextAppearance_SuggestionHighlight);
-
- void removeMisspelledFlag() {
- int suggestionSpanFlags = suggestionSpan.getFlags();
- if ((suggestionSpanFlags & SuggestionSpan.FLAG_MISSPELLED) > 0) {
- suggestionSpanFlags &= ~SuggestionSpan.FLAG_MISSPELLED;
- suggestionSpanFlags &= ~SuggestionSpan.FLAG_EASY_CORRECT;
- suggestionSpan.setFlags(suggestionSpanFlags);
- }
- }
}
private class SuggestionAdapter extends BaseAdapter {
@@ -9700,7 +9638,19 @@
false);
}
- textView.setText(mSuggestionInfos[position].text);
+ final SuggestionInfo suggestionInfo = mSuggestionInfos[position];
+ textView.setText(suggestionInfo.text);
+
+ if (suggestionInfo.suggestionIndex == ADD_TO_DICTIONARY) {
+ textView.setCompoundDrawablesWithIntrinsicBounds(
+ com.android.internal.R.drawable.ic_suggestions_add, 0, 0, 0);
+ } else if (suggestionInfo.suggestionIndex == DELETE_TEXT) {
+ textView.setCompoundDrawablesWithIntrinsicBounds(
+ com.android.internal.R.drawable.ic_suggestions_delete, 0, 0, 0);
+ } else {
+ textView.setCompoundDrawables(null, null, null, null);
+ }
+
return textView;
}
}
@@ -9751,11 +9701,10 @@
public void show() {
if (!(mText instanceof Editable)) return;
- if (updateSuggestions()) {
- mCursorWasVisibleBeforeSuggestions = mCursorVisible;
- setCursorVisible(false);
- super.show();
- }
+ updateSuggestions();
+ mCursorWasVisibleBeforeSuggestions = mCursorVisible;
+ setCursorVisible(false);
+ super.show();
}
@Override
@@ -9811,7 +9760,7 @@
super.hide();
}
- private boolean updateSuggestions() {
+ private void updateSuggestions() {
Spannable spannable = (Spannable) TextView.this.mText;
SuggestionSpan[] suggestionSpans = getSuggestionSpans();
@@ -9860,28 +9809,39 @@
highlightTextDifferences(mSuggestionInfos[i], spanUnionStart, spanUnionEnd);
}
+ // Add to dictionary item is there a span with the misspelled flag
if (misspelledSpan != null) {
final int misspelledStart = spannable.getSpanStart(misspelledSpan);
final int misspelledEnd = spannable.getSpanEnd(misspelledSpan);
if (misspelledStart >= 0 && misspelledEnd > misspelledStart) {
SuggestionInfo suggestionInfo = mSuggestionInfos[mNumberOfSuggestions];
suggestionInfo.suggestionSpan = misspelledSpan;
- suggestionInfo.suggestionIndex = -1;
+ suggestionInfo.suggestionIndex = ADD_TO_DICTIONARY;
suggestionInfo.text.replace(0, suggestionInfo.text.length(),
getContext().getString(com.android.internal.R.string.addToDictionary));
+ suggestionInfo.text.setSpan(suggestionInfo.highlightSpan, 0, 0,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mNumberOfSuggestions++;
}
}
- if (mNumberOfSuggestions == 0) return false;
+ // Delete item
+ SuggestionInfo suggestionInfo = mSuggestionInfos[mNumberOfSuggestions];
+ suggestionInfo.suggestionSpan = null;
+ suggestionInfo.suggestionIndex = DELETE_TEXT;
+ suggestionInfo.text.replace(0, suggestionInfo.text.length(),
+ getContext().getString(com.android.internal.R.string.deleteText));
+ suggestionInfo.text.setSpan(suggestionInfo.highlightSpan, 0, 0,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ mNumberOfSuggestions++;
if (mSuggestionRangeSpan == null) mSuggestionRangeSpan = new SuggestionRangeSpan();
if (underlineColor == 0) {
// Fallback on the default highlight color when the first span does not provide one
mSuggestionRangeSpan.setBackgroundColor(mHighlightColor);
} else {
- final float BACKGROUND_TRANSPARENCY = 0.3f;
+ final float BACKGROUND_TRANSPARENCY = 0.4f;
final int newAlpha = (int) (Color.alpha(underlineColor) * BACKGROUND_TRANSPARENCY);
mSuggestionRangeSpan.setBackgroundColor(
(underlineColor & 0x00FFFFFF) + (newAlpha << 24));
@@ -9890,8 +9850,6 @@
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mSuggestionsAdapter.notifyDataSetChanged();
-
- return true;
}
private void highlightTextDifferences(SuggestionInfo suggestionInfo, int unionStart,
@@ -9904,89 +9862,115 @@
suggestionInfo.suggestionStart = spanStart - unionStart;
suggestionInfo.suggestionEnd = suggestionInfo.suggestionStart
+ suggestionInfo.text.length();
-
- suggestionInfo.text.clearSpans();
+
suggestionInfo.text.setSpan(suggestionInfo.highlightSpan, 0,
suggestionInfo.text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// Add the text before and after the span.
- suggestionInfo.text.insert(0, mText.subSequence(unionStart, spanStart).toString());
- suggestionInfo.text.append(mText.subSequence(spanEnd, unionEnd).toString());
+ suggestionInfo.text.insert(0, mText.toString().substring(unionStart, spanStart));
+ suggestionInfo.text.append(mText.toString().substring(spanEnd, unionEnd));
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- hide();
+ TextView textView = (TextView) view;
+ Editable editable = (Editable) mText;
- if (view instanceof TextView) {
- TextView textView = (TextView) view;
- Editable editable = (Editable) mText;
+ SuggestionInfo suggestionInfo = mSuggestionInfos[position];
- SuggestionInfo suggestionInfo = mSuggestionInfos[position];
- final int spanStart = editable.getSpanStart(suggestionInfo.suggestionSpan);
- final int spanEnd = editable.getSpanEnd(suggestionInfo.suggestionSpan);
- if (spanStart < 0 || spanEnd < 0) return; // Span has been removed
- final String originalText = mText.subSequence(spanStart, spanEnd).toString();
+ if (suggestionInfo.suggestionIndex == DELETE_TEXT) {
+ final int spanUnionStart = editable.getSpanStart(mSuggestionRangeSpan);
+ int spanUnionEnd = editable.getSpanEnd(mSuggestionRangeSpan);
+ // Do not leave two adjacent spaces after deletion, or one at beginning of text
+ if (spanUnionEnd < editable.length() &&
+ Character.isSpaceChar(editable.charAt(spanUnionEnd)) &&
+ (spanUnionStart == 0 ||
+ Character.isSpaceChar(editable.charAt(spanUnionStart - 1)))) {
+ spanUnionEnd = spanUnionEnd + 1;
+ }
+ editable.replace(spanUnionStart, spanUnionEnd, "");
+ hide();
+ return;
+ }
- if (suggestionInfo.suggestionIndex < 0) {
- Intent intent = new Intent(Settings.ACTION_USER_DICTIONARY_INSERT);
- intent.putExtra("word", originalText);
- intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
- getContext().startActivity(intent);
- suggestionInfo.removeMisspelledFlag();
- } else {
- // SuggestionSpans are removed by replace: save them before
- SuggestionSpan[] suggestionSpans = editable.getSpans(spanStart, spanEnd,
- SuggestionSpan.class);
- final int length = suggestionSpans.length;
- int[] suggestionSpansStarts = new int[length];
- int[] suggestionSpansEnds = new int[length];
- int[] suggestionSpansFlags = new int[length];
- for (int i = 0; i < length; i++) {
- final SuggestionSpan suggestionSpan = suggestionSpans[i];
- suggestionSpansStarts[i] = editable.getSpanStart(suggestionSpan);
- suggestionSpansEnds[i] = editable.getSpanEnd(suggestionSpan);
- suggestionSpansFlags[i] = editable.getSpanFlags(suggestionSpan);
+ final int spanStart = editable.getSpanStart(suggestionInfo.suggestionSpan);
+ final int spanEnd = editable.getSpanEnd(suggestionInfo.suggestionSpan);
+ if (spanStart < 0 || spanEnd < 0) {
+ // Span has been removed
+ hide();
+ return;
+ }
+ final String originalText = mText.toString().substring(spanStart, spanEnd);
+
+ if (suggestionInfo.suggestionIndex == ADD_TO_DICTIONARY) {
+ Intent intent = new Intent(Settings.ACTION_USER_DICTIONARY_INSERT);
+ intent.putExtra("word", originalText);
+ intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
+ getContext().startActivity(intent);
+ // There is no way to know if the word was indeed added. Re-check.
+ editable.removeSpan(suggestionInfo.suggestionSpan);
+ updateSpellCheckSpans(spanStart, spanEnd);
+ } else {
+ // SuggestionSpans are removed by replace: save them before
+ SuggestionSpan[] suggestionSpans = editable.getSpans(spanStart, spanEnd,
+ SuggestionSpan.class);
+ final int length = suggestionSpans.length;
+ int[] suggestionSpansStarts = new int[length];
+ int[] suggestionSpansEnds = new int[length];
+ int[] suggestionSpansFlags = new int[length];
+ for (int i = 0; i < length; i++) {
+ final SuggestionSpan suggestionSpan = suggestionSpans[i];
+ suggestionSpansStarts[i] = editable.getSpanStart(suggestionSpan);
+ suggestionSpansEnds[i] = editable.getSpanEnd(suggestionSpan);
+ suggestionSpansFlags[i] = editable.getSpanFlags(suggestionSpan);
+
+ // Remove potential misspelled flags
+ int suggestionSpanFlags = suggestionSpan.getFlags();
+ if ((suggestionSpanFlags & SuggestionSpan.FLAG_MISSPELLED) > 0) {
+ suggestionSpanFlags &= ~SuggestionSpan.FLAG_MISSPELLED;
+ suggestionSpanFlags &= ~SuggestionSpan.FLAG_EASY_CORRECT;
+ suggestionSpan.setFlags(suggestionSpanFlags);
}
+ }
- final int suggestionStart = suggestionInfo.suggestionStart;
- final int suggestionEnd = suggestionInfo.suggestionEnd;
- final String suggestion = textView.getText().subSequence(
- suggestionStart, suggestionEnd).toString();
- editable.replace(spanStart, spanEnd, suggestion);
+ final int suggestionStart = suggestionInfo.suggestionStart;
+ final int suggestionEnd = suggestionInfo.suggestionEnd;
+ final String suggestion = textView.getText().subSequence(
+ suggestionStart, suggestionEnd).toString();
+ editable.replace(spanStart, spanEnd, suggestion);
- suggestionInfo.removeMisspelledFlag();
-
- // Notify source IME of the suggestion pick. Do this before swaping texts.
- if (!TextUtils.isEmpty(
- suggestionInfo.suggestionSpan.getNotificationTargetClassName())) {
- InputMethodManager imm = InputMethodManager.peekInstance();
+ // Notify source IME of the suggestion pick. Do this before swaping texts.
+ if (!TextUtils.isEmpty(
+ suggestionInfo.suggestionSpan.getNotificationTargetClassName())) {
+ InputMethodManager imm = InputMethodManager.peekInstance();
+ if (imm != null) {
imm.notifySuggestionPicked(suggestionInfo.suggestionSpan, originalText,
suggestionInfo.suggestionIndex);
}
-
- // Swap text content between actual text and Suggestion span
- String[] suggestions = suggestionInfo.suggestionSpan.getSuggestions();
- suggestions[suggestionInfo.suggestionIndex] = originalText;
-
- // Restore previous SuggestionSpans
- final int lengthDifference = suggestion.length() - (spanEnd - spanStart);
- for (int i = 0; i < length; i++) {
- // Only spans that include the modified region make sense after replacement
- // Spans partially included in the replaced region are removed, there is no
- // way to assign them a valid range after replacement
- if (suggestionSpansStarts[i] <= spanStart &&
- suggestionSpansEnds[i] >= spanEnd) {
- editable.setSpan(suggestionSpans[i], suggestionSpansStarts[i],
- suggestionSpansEnds[i] + lengthDifference,
- suggestionSpansFlags[i]);
- }
- }
-
- // Move cursor at the end of the replacement word
- Selection.setSelection(editable, spanEnd + lengthDifference);
}
+
+ // Swap text content between actual text and Suggestion span
+ String[] suggestions = suggestionInfo.suggestionSpan.getSuggestions();
+ suggestions[suggestionInfo.suggestionIndex] = originalText;
+
+ // Restore previous SuggestionSpans
+ final int lengthDifference = suggestion.length() - (spanEnd - spanStart);
+ for (int i = 0; i < length; i++) {
+ // Only spans that include the modified region make sense after replacement
+ // Spans partially included in the replaced region are removed, there is no
+ // way to assign them a valid range after replacement
+ if (suggestionSpansStarts[i] <= spanStart &&
+ suggestionSpansEnds[i] >= spanEnd) {
+ editable.setSpan(suggestionSpans[i], suggestionSpansStarts[i],
+ suggestionSpansEnds[i] + lengthDifference, suggestionSpansFlags[i]);
+ }
+ }
+
+ // Move cursor at the end of the replaced word
+ Selection.setSelection(editable, spanEnd + lengthDifference);
}
+
+ hide();
}
}
@@ -10111,8 +10095,7 @@
if (!hasSelection()) {
// There may already be a selection on device rotation
- boolean currentWordSelected = selectCurrentWord();
- if (!currentWordSelected) {
+ if (!selectCurrentWord()) {
// No word found under cursor or text selection not permitted.
return false;
}
@@ -10193,7 +10176,8 @@
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- TypedArray styledAttributes = mContext.obtainStyledAttributes(R.styleable.Theme);
+ TypedArray styledAttributes = mContext.obtainStyledAttributes(
+ com.android.internal.R.styleable.SelectionModeDrawables);
boolean allowText = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
@@ -10206,7 +10190,7 @@
if (!allowText) {
// Provide an icon, text will not be displayed on smaller screens.
selectAllIconId = styledAttributes.getResourceId(
- R.styleable.Theme_actionModeSelectAllDrawable, 0);
+ R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0);
}
menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
@@ -10218,7 +10202,7 @@
if (canCut()) {
menu.add(0, ID_CUT, 0, com.android.internal.R.string.cut).
setIcon(styledAttributes.getResourceId(
- R.styleable.Theme_actionModeCutDrawable, 0)).
+ R.styleable.SelectionModeDrawables_actionModeCutDrawable, 0)).
setAlphabeticShortcut('x').
setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
@@ -10227,7 +10211,7 @@
if (canCopy()) {
menu.add(0, ID_COPY, 0, com.android.internal.R.string.copy).
setIcon(styledAttributes.getResourceId(
- R.styleable.Theme_actionModeCopyDrawable, 0)).
+ R.styleable.SelectionModeDrawables_actionModeCopyDrawable, 0)).
setAlphabeticShortcut('c').
setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
@@ -10236,7 +10220,7 @@
if (canPaste()) {
menu.add(0, ID_PASTE, 0, com.android.internal.R.string.paste).
setIcon(styledAttributes.getResourceId(
- R.styleable.Theme_actionModePasteDrawable, 0)).
+ R.styleable.SelectionModeDrawables_actionModePasteDrawable, 0)).
setAlphabeticShortcut('v').
setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
@@ -11516,7 +11500,7 @@
private static final RectF sTempRect = new RectF();
// XXX should be much larger
- private static final int VERY_WIDE = 16384;
+ private static final int VERY_WIDE = 1024*1024;
private static final int BLINK = 500;
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index 7444d46..f52e773 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -237,9 +237,7 @@
}
// set the content descriptions
- if (AccessibilityManager.getInstance(mContext).isEnabled()) {
- setContentDescriptions();
- }
+ setContentDescriptions();
}
@Override
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 351714e..6a0cd36 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -68,6 +68,7 @@
void noteScanWifiLockReleasedFromSource(in WorkSource ws);
void noteWifiMulticastEnabledFromSource(in WorkSource ws);
void noteWifiMulticastDisabledFromSource(in WorkSource ws);
+ void noteNetworkInterfaceType(String iface, int type);
void setBatteryState(int status, int health, int plugType, int level, int temp, int volt);
long getAwakeTimeBattery();
long getAwakeTimePlugged();
diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java
index 9fbbb3d..a0e125a 100644
--- a/core/java/com/android/internal/app/PlatLogoActivity.java
+++ b/core/java/com/android/internal/app/PlatLogoActivity.java
@@ -17,32 +17,79 @@
package com.android.internal.app;
import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Vibrator;
import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
import android.widget.ImageView;
import android.widget.Toast;
public class PlatLogoActivity extends Activity {
Toast mToast;
+ ImageView mContent;
+ Vibrator mZzz = new Vibrator();
+ int mCount;
+ final Handler mHandler = new Handler();
+
+ Runnable mSuperLongPress = new Runnable() {
+ public void run() {
+ mCount++;
+ mZzz.vibrate(50 * mCount);
+ final float scale = 1f + 0.25f * mCount * mCount;
+ mContent.setScaleX(scale);
+ mContent.setScaleY(scale);
+
+ if (mCount <= 3) {
+ mHandler.postDelayed(mSuperLongPress, ViewConfiguration.getLongPressTimeout());
+ } else {
+ try {
+ startActivity(new Intent(Intent.ACTION_MAIN)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK
+ | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .setClassName("com.android.systemui","com.android.systemui.Nyandroid"));
+ } catch (ActivityNotFoundException ex) {
+ android.util.Log.e("PlatLogoActivity", "Couldn't find platlogo screensaver.");
+ }
+ finish();
+ }
+ }
+ };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mToast = Toast.makeText(this, "REZZZZZZZ...", Toast.LENGTH_SHORT);
+ mToast = Toast.makeText(this, "Android 4.0: Ice Cream Sandwich", Toast.LENGTH_SHORT);
- ImageView content = new ImageView(this);
- content.setImageResource(com.android.internal.R.drawable.platlogo);
- content.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+ mContent = new ImageView(this);
+ mContent.setImageResource(com.android.internal.R.drawable.platlogo);
+ mContent.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+
+ mContent.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ final int action = event.getAction();
+ if (action == MotionEvent.ACTION_DOWN) {
+ mContent.setPressed(true);
+ mHandler.removeCallbacks(mSuperLongPress);
+ mCount = 0;
+ mHandler.postDelayed(mSuperLongPress, 2*ViewConfiguration.getLongPressTimeout());
+ } else if (action == MotionEvent.ACTION_UP) {
+ if (mContent.isPressed()) {
+ mContent.setPressed(false);
+ mHandler.removeCallbacks(mSuperLongPress);
+ mToast.show();
+ }
+ }
+ return true;
+ }
+ });
- setContentView(content);
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_UP) {
- mToast.show();
- }
- return super.dispatchTouchEvent(ev);
+ setContentView(mContent);
}
}
diff --git a/core/java/com/android/internal/app/RingtonePickerActivity.java b/core/java/com/android/internal/app/RingtonePickerActivity.java
index 719847e..36fc24e 100644
--- a/core/java/com/android/internal/app/RingtonePickerActivity.java
+++ b/core/java/com/android/internal/app/RingtonePickerActivity.java
@@ -47,7 +47,9 @@
private static final String TAG = "RingtonePickerActivity";
private static final int DELAY_MS_SELECTION_PLAYED = 300;
-
+
+ private static final String SAVE_CLICKED_POS = "clicked_pos";
+
private RingtoneManager mRingtoneManager;
private Cursor mCursor;
@@ -120,7 +122,10 @@
if (mUriForDefaultItem == null) {
mUriForDefaultItem = Settings.System.DEFAULT_RINGTONE_URI;
}
-
+
+ if (savedInstanceState != null) {
+ mClickedPos = savedInstanceState.getInt(SAVE_CLICKED_POS, -1);
+ }
// Get whether to show the 'Silent' item
mHasSilentItem = intent.getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
@@ -167,6 +172,12 @@
setupAlert();
}
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(SAVE_CLICKED_POS, mClickedPos);
+ }
+
public void onPrepareListView(ListView listView) {
if (mHasDefaultItem) {
diff --git a/core/java/com/android/internal/app/ShutdownThread.java b/core/java/com/android/internal/app/ShutdownThread.java
index daabf42..77d0c97 100644
--- a/core/java/com/android/internal/app/ShutdownThread.java
+++ b/core/java/com/android/internal/app/ShutdownThread.java
@@ -109,7 +109,6 @@
if (confirm) {
final CloseDialogReceiver closer = new CloseDialogReceiver(context);
final AlertDialog dialog = new AlertDialog.Builder(context)
- .setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(com.android.internal.R.string.power_off)
.setMessage(resourceId)
.setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
diff --git a/core/java/com/android/internal/net/NetworkStatsFactory.java b/core/java/com/android/internal/net/NetworkStatsFactory.java
new file mode 100644
index 0000000..ee3f23b
--- /dev/null
+++ b/core/java/com/android/internal/net/NetworkStatsFactory.java
@@ -0,0 +1,379 @@
+/*
+ * 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.net;
+
+import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.TAG_NONE;
+import static android.net.NetworkStats.UID_ALL;
+import static com.android.server.NetworkManagementSocketTagger.kernelToTag;
+
+import android.net.NetworkStats;
+import android.os.SystemClock;
+import android.util.Slog;
+
+import com.google.android.collect.Lists;
+import com.google.android.collect.Maps;
+import com.google.android.collect.Sets;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.StringTokenizer;
+
+import libcore.io.IoUtils;
+
+/**
+ * Creates {@link NetworkStats} instances by parsing various {@code /proc/}
+ * files as needed.
+ */
+public class NetworkStatsFactory {
+ private static final String TAG = "NetworkStatsFactory";
+
+ // TODO: consider moving parsing to native code
+
+ /** Path to {@code /proc/net/dev}. */
+ @Deprecated
+ private final File mStatsIface;
+ /** Path to {@code /proc/net/xt_qtaguid/iface_stat}. */
+ @Deprecated
+ private final File mStatsXtIface;
+ /** Path to {@code /proc/net/xt_qtaguid/iface_stat_all}. */
+ private final File mStatsXtIfaceAll;
+ /** Path to {@code /proc/net/xt_qtaguid/stats}. */
+ private final File mStatsXtUid;
+
+ /** {@link #mStatsXtUid} and {@link #mStatsXtIfaceAll} headers. */
+ private static final String KEY_IDX = "idx";
+ private static final String KEY_IFACE = "iface";
+ private static final String KEY_ACTIVE = "active";
+ private static final String KEY_UID = "uid_tag_int";
+ private static final String KEY_COUNTER_SET = "cnt_set";
+ private static final String KEY_TAG_HEX = "acct_tag_hex";
+ private static final String KEY_SNAP_RX_BYTES = "snap_rx_bytes";
+ private static final String KEY_SNAP_RX_PACKETS = "snap_rx_packets";
+ private static final String KEY_SNAP_TX_BYTES = "snap_tx_bytes";
+ private static final String KEY_SNAP_TX_PACKETS = "snap_tx_packets";
+ private static final String KEY_RX_BYTES = "rx_bytes";
+ private static final String KEY_RX_PACKETS = "rx_packets";
+ private static final String KEY_TX_BYTES = "tx_bytes";
+ private static final String KEY_TX_PACKETS = "tx_packets";
+
+ public NetworkStatsFactory() {
+ this(new File("/proc/"));
+ }
+
+ // @VisibleForTesting
+ public NetworkStatsFactory(File procRoot) {
+ mStatsIface = new File(procRoot, "net/dev");
+ mStatsXtUid = new File(procRoot, "net/xt_qtaguid/stats");
+ mStatsXtIface = new File(procRoot, "net/xt_qtaguid/iface_stat");
+ mStatsXtIfaceAll = new File(procRoot, "net/xt_qtaguid/iface_stat_all");
+ }
+
+ /**
+ * Parse and return interface-level summary {@link NetworkStats}. Values
+ * monotonically increase since device boot, and may include details about
+ * inactive interfaces.
+ *
+ * @throws IllegalStateException when problem parsing stats.
+ */
+ public NetworkStats readNetworkStatsSummary() throws IllegalStateException {
+ if (mStatsXtIfaceAll.exists()) {
+ return readNetworkStatsSummarySingleFile();
+ } else {
+ return readNetworkStatsSummaryMultipleFiles();
+ }
+ }
+
+ private NetworkStats readNetworkStatsSummarySingleFile() {
+ final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
+ final NetworkStats.Entry entry = new NetworkStats.Entry();
+
+ // TODO: read directly from proc once headers are added
+ final ArrayList<String> keys = Lists.newArrayList(KEY_IFACE, KEY_ACTIVE, KEY_SNAP_RX_BYTES,
+ KEY_SNAP_RX_PACKETS, KEY_SNAP_TX_BYTES, KEY_SNAP_TX_PACKETS, KEY_RX_BYTES,
+ KEY_RX_PACKETS, KEY_TX_BYTES, KEY_TX_PACKETS);
+ final ArrayList<String> values = Lists.newArrayList();
+ final HashMap<String, String> parsed = Maps.newHashMap();
+
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(mStatsXtIfaceAll));
+
+ String line;
+ while ((line = reader.readLine()) != null) {
+ splitLine(line, values);
+ parseLine(keys, values, parsed);
+
+ entry.iface = parsed.get(KEY_IFACE);
+ entry.uid = UID_ALL;
+ entry.set = SET_DEFAULT;
+ entry.tag = TAG_NONE;
+
+ // always include snapshot values
+ entry.rxBytes = getParsedLong(parsed, KEY_SNAP_RX_BYTES);
+ entry.rxPackets = getParsedLong(parsed, KEY_SNAP_RX_PACKETS);
+ entry.txBytes = getParsedLong(parsed, KEY_SNAP_TX_BYTES);
+ entry.txPackets = getParsedLong(parsed, KEY_SNAP_TX_PACKETS);
+
+ // fold in active numbers, but only when active
+ final boolean active = getParsedInt(parsed, KEY_ACTIVE) != 0;
+ if (active) {
+ entry.rxBytes += getParsedLong(parsed, KEY_RX_BYTES);
+ entry.rxPackets += getParsedLong(parsed, KEY_RX_PACKETS);
+ entry.txBytes += getParsedLong(parsed, KEY_TX_BYTES);
+ entry.txPackets += getParsedLong(parsed, KEY_TX_PACKETS);
+ }
+
+ stats.addValues(entry);
+ }
+ } catch (NullPointerException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } catch (IOException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } finally {
+ IoUtils.closeQuietly(reader);
+ }
+ return stats;
+ }
+
+ /**
+ * @deprecated remove once {@code iface_stat_all} is merged to all kernels.
+ */
+ @Deprecated
+ private NetworkStats readNetworkStatsSummaryMultipleFiles() {
+ final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
+ final NetworkStats.Entry entry = new NetworkStats.Entry();
+
+ final HashSet<String> knownIfaces = Sets.newHashSet();
+ final HashSet<String> activeIfaces = Sets.newHashSet();
+
+ // collect any historical stats and active state
+ for (String iface : fileListWithoutNull(mStatsXtIface)) {
+ final File ifacePath = new File(mStatsXtIface, iface);
+
+ final long active = readSingleLongFromFile(new File(ifacePath, "active"));
+ if (active == 1) {
+ knownIfaces.add(iface);
+ activeIfaces.add(iface);
+ } else if (active == 0) {
+ knownIfaces.add(iface);
+ } else {
+ continue;
+ }
+
+ entry.iface = iface;
+ entry.uid = UID_ALL;
+ entry.set = SET_DEFAULT;
+ entry.tag = TAG_NONE;
+ entry.rxBytes = readSingleLongFromFile(new File(ifacePath, "rx_bytes"));
+ entry.rxPackets = readSingleLongFromFile(new File(ifacePath, "rx_packets"));
+ entry.txBytes = readSingleLongFromFile(new File(ifacePath, "tx_bytes"));
+ entry.txPackets = readSingleLongFromFile(new File(ifacePath, "tx_packets"));
+
+ stats.addValues(entry);
+ }
+
+ final ArrayList<String> values = Lists.newArrayList();
+
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(mStatsIface));
+
+ // skip first two header lines
+ reader.readLine();
+ reader.readLine();
+
+ // parse remaining lines
+ String line;
+ while ((line = reader.readLine()) != null) {
+ splitLine(line, values);
+
+ try {
+ entry.iface = values.get(0);
+ entry.uid = UID_ALL;
+ entry.set = SET_DEFAULT;
+ entry.tag = TAG_NONE;
+ entry.rxBytes = Long.parseLong(values.get(1));
+ entry.rxPackets = Long.parseLong(values.get(2));
+ entry.txBytes = Long.parseLong(values.get(9));
+ entry.txPackets = Long.parseLong(values.get(10));
+
+ if (activeIfaces.contains(entry.iface)) {
+ // combine stats when iface is active
+ stats.combineValues(entry);
+ } else if (!knownIfaces.contains(entry.iface)) {
+ // add stats when iface is unknown
+ stats.addValues(entry);
+ }
+ } catch (NumberFormatException e) {
+ Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
+ }
+ }
+ } catch (NullPointerException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } catch (IOException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } finally {
+ IoUtils.closeQuietly(reader);
+ }
+
+ return stats;
+ }
+
+ public NetworkStats readNetworkStatsDetail() {
+ return readNetworkStatsDetail(UID_ALL);
+ }
+
+ /**
+ * Parse and return {@link NetworkStats} with UID-level details. Values
+ * monotonically increase since device boot.
+ *
+ * @throws IllegalStateException when problem parsing stats.
+ */
+ public NetworkStats readNetworkStatsDetail(int limitUid) throws IllegalStateException {
+ final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 24);
+ final NetworkStats.Entry entry = new NetworkStats.Entry();
+
+ // TODO: remove knownLines check once 5087722 verified
+ final HashSet<String> knownLines = Sets.newHashSet();
+ // TODO: remove lastIdx check once 5270106 verified
+ int lastIdx;
+
+ final ArrayList<String> keys = Lists.newArrayList();
+ final ArrayList<String> values = Lists.newArrayList();
+ final HashMap<String, String> parsed = Maps.newHashMap();
+
+ BufferedReader reader = null;
+ String line = null;
+ try {
+ reader = new BufferedReader(new FileReader(mStatsXtUid));
+
+ // parse first line as header
+ line = reader.readLine();
+ splitLine(line, keys);
+ lastIdx = 1;
+
+ // parse remaining lines
+ while ((line = reader.readLine()) != null) {
+ splitLine(line, values);
+ parseLine(keys, values, parsed);
+
+ if (!knownLines.add(line)) {
+ throw new IllegalStateException("duplicate proc entry: " + line);
+ }
+
+ final int idx = getParsedInt(parsed, KEY_IDX);
+ if (idx != lastIdx + 1) {
+ throw new IllegalStateException(
+ "inconsistent idx=" + idx + " after lastIdx=" + lastIdx);
+ }
+ lastIdx = idx;
+
+ entry.iface = parsed.get(KEY_IFACE);
+ entry.uid = getParsedInt(parsed, KEY_UID);
+ entry.set = getParsedInt(parsed, KEY_COUNTER_SET);
+ entry.tag = kernelToTag(parsed.get(KEY_TAG_HEX));
+ entry.rxBytes = getParsedLong(parsed, KEY_RX_BYTES);
+ entry.rxPackets = getParsedLong(parsed, KEY_RX_PACKETS);
+ entry.txBytes = getParsedLong(parsed, KEY_TX_BYTES);
+ entry.txPackets = getParsedLong(parsed, KEY_TX_PACKETS);
+
+ if (limitUid == UID_ALL || limitUid == entry.uid) {
+ stats.addValues(entry);
+ }
+ }
+ } catch (NullPointerException e) {
+ throw new IllegalStateException("problem parsing line: " + line, e);
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException("problem parsing line: " + line, e);
+ } catch (IOException e) {
+ throw new IllegalStateException("problem parsing line: " + line, e);
+ } finally {
+ IoUtils.closeQuietly(reader);
+ }
+ return stats;
+ }
+
+ private static int getParsedInt(HashMap<String, String> parsed, String key) {
+ final String value = parsed.get(key);
+ return value != null ? Integer.parseInt(value) : 0;
+ }
+
+ private static long getParsedLong(HashMap<String, String> parsed, String key) {
+ final String value = parsed.get(key);
+ return value != null ? Long.parseLong(value) : 0;
+ }
+
+ /**
+ * Split given line into {@link ArrayList}.
+ */
+ private static void splitLine(String line, ArrayList<String> outSplit) {
+ outSplit.clear();
+
+ final StringTokenizer t = new StringTokenizer(line, " \t\n\r\f:");
+ while (t.hasMoreTokens()) {
+ outSplit.add(t.nextToken());
+ }
+ }
+
+ /**
+ * Zip the two given {@link ArrayList} as key and value pairs into
+ * {@link HashMap}.
+ */
+ private static void parseLine(
+ ArrayList<String> keys, ArrayList<String> values, HashMap<String, String> outParsed) {
+ outParsed.clear();
+
+ final int size = Math.min(keys.size(), values.size());
+ for (int i = 0; i < size; i++) {
+ outParsed.put(keys.get(i), values.get(i));
+ }
+ }
+
+ /**
+ * Utility method to read a single plain-text {@link Long} from the given
+ * {@link File}, usually from a {@code /proc/} filesystem.
+ */
+ private static long readSingleLongFromFile(File file) {
+ try {
+ final byte[] buffer = IoUtils.readFileAsByteArray(file.toString());
+ return Long.parseLong(new String(buffer).trim());
+ } catch (NumberFormatException e) {
+ return -1;
+ } catch (IOException e) {
+ return -1;
+ }
+ }
+
+ /**
+ * Wrapper for {@link File#list()} that returns empty array instead of
+ * {@code null}.
+ */
+ private static String[] fileListWithoutNull(File file) {
+ final String[] list = file.list();
+ return list != null ? list : new String[0];
+ }
+}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index df5071f..e2a2566 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -16,11 +16,15 @@
package com.android.internal.os;
-import com.android.internal.util.JournaledFile;
+import static android.net.NetworkStats.IFACE_ALL;
+import static android.net.NetworkStats.UID_ALL;
+import static android.text.format.DateUtils.SECOND_IN_MILLIS;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
-import android.net.TrafficStats;
+import android.content.res.Resources;
+import android.net.ConnectivityManager;
+import android.net.NetworkStats;
import android.os.BatteryManager;
import android.os.BatteryStats;
import android.os.FileUtils;
@@ -43,6 +47,11 @@
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;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
@@ -52,6 +61,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -69,6 +79,8 @@
private static final boolean DEBUG_HISTORY = false;
private static final boolean USE_OLD_HISTORY = false; // for debugging.
+ // TODO: remove "tcp" from network methods, since we measure total stats.
+
// In-memory Parcel magic number, used to detect attempts to unmarshall bad data
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
@@ -314,6 +326,11 @@
private HashMap<String, Integer> mUidCache = new HashMap<String, Integer>();
+ private final NetworkStatsFactory mNetworkStatsFactory = new NetworkStatsFactory();
+
+ /** Network ifaces that {@link ConnectivityManager} has claimed as mobile. */
+ private HashSet<String> mMobileIfaces = Sets.newHashSet();
+
// For debugging
public BatteryStatsImpl() {
mFile = null;
@@ -1036,7 +1053,8 @@
String name;
int count;
long totalTime;
- int startIndex, endIndex;
+ int startIndex;
+ int endIndex;
int numUpdatedWlNames = 0;
// Advance past the first line.
@@ -1390,30 +1408,48 @@
}
public void doUnplugLocked(long batteryUptime, long batteryRealtime) {
- for (int iu = mUidStats.size() - 1; iu >= 0; iu--) {
- Uid u = mUidStats.valueAt(iu);
- u.mStartedTcpBytesReceived = TrafficStats.getUidRxBytes(u.mUid);
- u.mStartedTcpBytesSent = TrafficStats.getUidTxBytes(u.mUid);
+ NetworkStats.Entry entry = null;
+
+ // Track UID data usage
+ final NetworkStats uidStats = getNetworkStatsDetailGroupedByUid();
+ final int size = uidStats.size();
+ for (int i = 0; i < size; i++) {
+ entry = uidStats.getValues(i, entry);
+
+ final Uid u = mUidStats.get(entry.uid);
+ if (u == null) continue;
+
+ u.mStartedTcpBytesReceived = entry.rxBytes;
+ u.mStartedTcpBytesSent = entry.txBytes;
u.mTcpBytesReceivedAtLastUnplug = u.mCurrentTcpBytesReceived;
u.mTcpBytesSentAtLastUnplug = u.mCurrentTcpBytesSent;
}
+
for (int i = mUnpluggables.size() - 1; i >= 0; i--) {
mUnpluggables.get(i).unplug(batteryUptime, batteryRealtime);
}
- // Track total mobile data
- doDataUnplug(mMobileDataRx, TrafficStats.getMobileRxBytes());
- doDataUnplug(mMobileDataTx, TrafficStats.getMobileTxBytes());
- doDataUnplug(mTotalDataRx, TrafficStats.getTotalRxBytes());
- doDataUnplug(mTotalDataTx, TrafficStats.getTotalTxBytes());
+
+ // Track both mobile and total overall data
+ final NetworkStats ifaceStats = getNetworkStatsSummary();
+ entry = ifaceStats.getTotal(entry, mMobileIfaces);
+ doDataUnplug(mMobileDataRx, entry.rxBytes);
+ doDataUnplug(mMobileDataTx, entry.txBytes);
+ entry = ifaceStats.getTotal(entry);
+ doDataUnplug(mTotalDataRx, entry.rxBytes);
+ doDataUnplug(mTotalDataTx, entry.txBytes);
+
// Track radio awake time
mRadioDataStart = getCurrentRadioDataUptime();
mRadioDataUptime = 0;
+
// Track bt headset ping count
mBluetoothPingStart = getCurrentBluetoothPingCount();
mBluetoothPingCount = 0;
}
public void doPlugLocked(long batteryUptime, long batteryRealtime) {
+ NetworkStats.Entry entry = null;
+
for (int iu = mUidStats.size() - 1; iu >= 0; iu--) {
Uid u = mUidStats.valueAt(iu);
if (u.mStartedTcpBytesReceived >= 0) {
@@ -1428,10 +1464,16 @@
for (int i = mUnpluggables.size() - 1; i >= 0; i--) {
mUnpluggables.get(i).plug(batteryUptime, batteryRealtime);
}
- doDataPlug(mMobileDataRx, TrafficStats.getMobileRxBytes());
- doDataPlug(mMobileDataTx, TrafficStats.getMobileTxBytes());
- doDataPlug(mTotalDataRx, TrafficStats.getTotalRxBytes());
- doDataPlug(mTotalDataTx, TrafficStats.getTotalTxBytes());
+
+ // Track both mobile and total overall data
+ final NetworkStats ifaceStats = getNetworkStatsSummary();
+ entry = ifaceStats.getTotal(entry, mMobileIfaces);
+ doDataPlug(mMobileDataRx, entry.rxBytes);
+ doDataPlug(mMobileDataTx, entry.txBytes);
+ entry = ifaceStats.getTotal(entry);
+ doDataPlug(mTotalDataRx, entry.rxBytes);
+ doDataPlug(mTotalDataTx, entry.txBytes);
+
// Track radio awake time
mRadioDataUptime = getRadioDataUptime();
mRadioDataStart = -1;
@@ -2216,6 +2258,14 @@
}
}
+ public void noteNetworkInterfaceTypeLocked(String iface, int networkType) {
+ if (ConnectivityManager.isNetworkTypeMobile(networkType)) {
+ mMobileIfaces.add(iface);
+ } else {
+ mMobileIfaces.remove(iface);
+ }
+ }
+
@Override public long getScreenOnTime(long batteryRealtime, int which) {
return mScreenOnTimer.getTotalTimeLocked(batteryRealtime, which);
}
@@ -2400,8 +2450,10 @@
}
public long computeCurrentTcpBytesReceived() {
+ final long uidRxBytes = getNetworkStatsDetailGroupedByUid().getTotal(
+ null, mUid).rxBytes;
return mCurrentTcpBytesReceived + (mStartedTcpBytesReceived >= 0
- ? (TrafficStats.getUidRxBytes(mUid) - mStartedTcpBytesReceived) : 0);
+ ? (uidRxBytes - mStartedTcpBytesReceived) : 0);
}
@Override
@@ -2619,8 +2671,10 @@
}
public long computeCurrentTcpBytesSent() {
+ final long uidTxBytes = getNetworkStatsDetailGroupedByUid().getTotal(
+ null, mUid).txBytes;
return mCurrentTcpBytesSent + (mStartedTcpBytesSent >= 0
- ? (TrafficStats.getUidTxBytes(mUid) - mStartedTcpBytesSent) : 0);
+ ? (uidTxBytes - mStartedTcpBytesSent) : 0);
}
/**
@@ -4518,22 +4572,26 @@
/** Only STATS_UNPLUGGED works properly */
public long getMobileTcpBytesSent(int which) {
- return getTcpBytes(TrafficStats.getMobileTxBytes(), mMobileDataTx, which);
+ final long mobileTxBytes = getNetworkStatsSummary().getTotal(null, mMobileIfaces).txBytes;
+ return getTcpBytes(mobileTxBytes, mMobileDataTx, which);
}
/** Only STATS_UNPLUGGED works properly */
public long getMobileTcpBytesReceived(int which) {
- return getTcpBytes(TrafficStats.getMobileRxBytes(), mMobileDataRx, which);
+ final long mobileRxBytes = getNetworkStatsSummary().getTotal(null, mMobileIfaces).rxBytes;
+ return getTcpBytes(mobileRxBytes, mMobileDataRx, which);
}
/** Only STATS_UNPLUGGED works properly */
public long getTotalTcpBytesSent(int which) {
- return getTcpBytes(TrafficStats.getTotalTxBytes(), mTotalDataTx, which);
+ final long totalTxBytes = getNetworkStatsSummary().getTotal(null).txBytes;
+ return getTcpBytes(totalTxBytes, mTotalDataTx, which);
}
/** Only STATS_UNPLUGGED works properly */
public long getTotalTcpBytesReceived(int which) {
- return getTcpBytes(TrafficStats.getTotalRxBytes(), mTotalDataRx, which);
+ final long totalRxBytes = getNetworkStatsSummary().getTotal(null).rxBytes;
+ return getTcpBytes(totalRxBytes, mTotalDataRx, which);
}
@Override
@@ -5637,7 +5695,47 @@
mGlobalWifiRunningTimer.logState(pr, " ");
pr.println("*** Bluetooth timer:");
mBluetoothOnTimer.logState(pr, " ");
+ pr.println("*** Mobile ifaces:");
+ pr.println(mMobileIfaces.toString());
}
super.dumpLocked(pw);
}
+
+ private NetworkStats mNetworkSummaryCache;
+ private NetworkStats mNetworkDetailCache;
+
+ private NetworkStats getNetworkStatsSummary() {
+ // NOTE: calls from BatteryStatsService already hold this lock
+ synchronized (this) {
+ if (mNetworkSummaryCache == null
+ || mNetworkSummaryCache.getElapsedRealtimeAge() > SECOND_IN_MILLIS) {
+ try {
+ mNetworkSummaryCache = mNetworkStatsFactory.readNetworkStatsSummary();
+ } catch (IllegalStateException e) {
+ // log problem and return empty object
+ Log.wtf(TAG, "problem reading network stats", e);
+ mNetworkSummaryCache = new NetworkStats(SystemClock.elapsedRealtime(), 0);
+ }
+ }
+ return mNetworkSummaryCache;
+ }
+ }
+
+ private NetworkStats getNetworkStatsDetailGroupedByUid() {
+ // NOTE: calls from BatteryStatsService already hold this lock
+ synchronized (this) {
+ if (mNetworkDetailCache == null
+ || mNetworkDetailCache.getElapsedRealtimeAge() > SECOND_IN_MILLIS) {
+ try {
+ mNetworkDetailCache = mNetworkStatsFactory
+ .readNetworkStatsDetail().groupedByUid();
+ } catch (IllegalStateException e) {
+ // log problem and return empty object
+ Log.wtf(TAG, "problem reading network stats", e);
+ mNetworkDetailCache = new NetworkStats(SystemClock.elapsedRealtime(), 0);
+ }
+ }
+ return mNetworkDetailCache;
+ }
+ }
}
diff --git a/core/java/com/android/internal/policy/IFaceLockCallback.aidl b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
index 4f76c71..add3f1c 100644
--- a/core/java/com/android/internal/policy/IFaceLockCallback.aidl
+++ b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
@@ -21,4 +21,5 @@
oneway interface IFaceLockCallback {
void unlock();
void cancel();
+ void pokeWakelock();
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 3916e86..aca1fa2 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -34,7 +34,6 @@
void topAppWindowChanged(boolean menuVisible);
void setImeWindowStatus(in IBinder token, int vis, int backDisposition);
void setHardKeyboardStatus(boolean available, boolean enabled);
- void userActivity();
void toggleRecentApps();
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 07430e7..ecebfc0 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -46,6 +46,5 @@
void onNotificationClear(String pkg, String tag, int id);
void setSystemUiVisibility(int vis);
void setHardKeyboardEnabled(boolean enabled);
- void userActivity();
void toggleRecentApps();
}
diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java
index b9948fe..b227700 100644
--- a/core/java/com/android/internal/view/BaseIWindow.java
+++ b/core/java/com/android/internal/view/BaseIWindow.java
@@ -27,6 +27,7 @@
public class BaseIWindow extends IWindow.Stub {
private IWindowSession mSession;
+ public int mSeq;
public void setSession(IWindowSession session) {
mSession = session;
@@ -69,7 +70,9 @@
public void dispatchDragEvent(DragEvent event) {
}
- public void dispatchSystemUiVisibilityChanged(int visibility) {
+ public void dispatchSystemUiVisibilityChanged(int seq, int globalUi,
+ int localValue, int localChanges) {
+ mSeq = seq;
}
public void dispatchWallpaperCommand(String action, int x, int y,
diff --git a/core/java/com/android/internal/view/StandaloneActionMode.java b/core/java/com/android/internal/view/StandaloneActionMode.java
index ecda47e..edf4443 100644
--- a/core/java/com/android/internal/view/StandaloneActionMode.java
+++ b/core/java/com/android/internal/view/StandaloneActionMode.java
@@ -36,17 +36,19 @@
private ActionMode.Callback mCallback;
private WeakReference<View> mCustomView;
private boolean mFinished;
+ private boolean mFocusable;
private MenuBuilder mMenu;
public StandaloneActionMode(Context context, ActionBarContextView view,
- ActionMode.Callback callback) {
+ ActionMode.Callback callback, boolean isFocusable) {
mContext = context;
mContextView = view;
mCallback = callback;
mMenu = new MenuBuilder(context).setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
mMenu.setCallback(this);
+ mFocusable = isFocusable;
}
@Override
@@ -139,4 +141,8 @@
invalidate();
mContextView.showOverflowMenu();
}
+
+ public boolean isUiFocusable() {
+ return mFocusable;
+ }
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index aabea2c..f25d65f 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -31,9 +31,6 @@
import android.view.View.MeasureSpec;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ImageButton;
import java.util.ArrayList;
@@ -71,8 +68,8 @@
final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
int mOpenSubMenuId;
- public ActionMenuPresenter() {
- super(com.android.internal.R.layout.action_menu_layout,
+ public ActionMenuPresenter(Context context) {
+ super(context, com.android.internal.R.layout.action_menu_layout,
com.android.internal.R.layout.action_menu_item_layout);
}
@@ -98,7 +95,7 @@
int width = mWidthLimit;
if (mReserveOverflow) {
if (mOverflowButton == null) {
- mOverflowButton = new OverflowMenuButton(mContext);
+ mOverflowButton = new OverflowMenuButton(mSystemContext);
final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
mOverflowButton.measure(spec, spec);
}
@@ -215,7 +212,7 @@
if (hasOverflow) {
if (mOverflowButton == null) {
- mOverflowButton = new OverflowMenuButton(mContext);
+ mOverflowButton = new OverflowMenuButton(mSystemContext);
}
ViewGroup parent = (ViewGroup) mOverflowButton.getParent();
if (parent != mMenuView) {
diff --git a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
index bec437a..1e06b5a 100644
--- a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
@@ -29,8 +29,10 @@
* be reused if possible when items change.
*/
public abstract class BaseMenuPresenter implements MenuPresenter {
+ protected Context mSystemContext;
protected Context mContext;
protected MenuBuilder mMenu;
+ protected LayoutInflater mSystemInflater;
protected LayoutInflater mInflater;
private Callback mCallback;
@@ -44,10 +46,13 @@
/**
* Construct a new BaseMenuPresenter.
*
+ * @param context Context for generating system-supplied views
* @param menuLayoutRes Layout resource ID for the menu container view
* @param itemLayoutRes Layout resource ID for a single item view
*/
- public BaseMenuPresenter(int menuLayoutRes, int itemLayoutRes) {
+ public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) {
+ mSystemContext = context;
+ mSystemInflater = LayoutInflater.from(context);
mMenuLayoutRes = menuLayoutRes;
mItemLayoutRes = itemLayoutRes;
}
@@ -62,7 +67,7 @@
@Override
public MenuView getMenuView(ViewGroup root) {
if (mMenuView == null) {
- mMenuView = (MenuView) mInflater.inflate(mMenuLayoutRes, root, false);
+ mMenuView = (MenuView) mSystemInflater.inflate(mMenuLayoutRes, root, false);
mMenuView.initialize(mMenu);
updateMenuView(true);
}
@@ -138,7 +143,7 @@
* @return The new item view
*/
public MenuView.ItemView createItemView(ViewGroup parent) {
- return (MenuView.ItemView) mInflater.inflate(mItemLayoutRes, parent, false);
+ return (MenuView.ItemView) mSystemInflater.inflate(mItemLayoutRes, parent, false);
}
/**
diff --git a/core/java/com/android/internal/view/menu/ExpandedMenuView.java b/core/java/com/android/internal/view/menu/ExpandedMenuView.java
index 723ece4..47058ad 100644
--- a/core/java/com/android/internal/view/menu/ExpandedMenuView.java
+++ b/core/java/com/android/internal/view/menu/ExpandedMenuView.java
@@ -63,11 +63,6 @@
setChildrenDrawingCacheEnabled(false);
}
- @Override
- protected boolean recycleOnMeasure() {
- return false;
- }
-
public boolean invokeItem(MenuItemImpl item) {
return mMenu.performItemAction(item, 0);
}
diff --git a/core/java/com/android/internal/view/menu/IconMenuPresenter.java b/core/java/com/android/internal/view/menu/IconMenuPresenter.java
index 24ddad6..2439b5d 100644
--- a/core/java/com/android/internal/view/menu/IconMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/IconMenuPresenter.java
@@ -22,7 +22,6 @@
import android.os.Parcelable;
import android.util.SparseArray;
import android.view.ContextThemeWrapper;
-import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -43,16 +42,15 @@
private static final String VIEWS_TAG = "android:menu:icon";
private static final String OPEN_SUBMENU_KEY = "android:menu:icon:submenu";
- public IconMenuPresenter() {
- super(com.android.internal.R.layout.icon_menu_layout,
+ public IconMenuPresenter(Context context) {
+ super(new ContextThemeWrapper(context, com.android.internal.R.style.Theme_IconMenu),
+ com.android.internal.R.layout.icon_menu_layout,
com.android.internal.R.layout.icon_menu_item_layout);
}
@Override
public void initForMenu(Context context, MenuBuilder menu) {
- mContext = new ContextThemeWrapper(context, com.android.internal.R.style.Theme_IconMenu);
- mInflater = LayoutInflater.from(mContext);
- mMenu = menu;
+ super.initForMenu(context, menu);
mMaxItems = -1;
}
diff --git a/core/java/com/android/internal/view/menu/ListMenuItemView.java b/core/java/com/android/internal/view/menu/ListMenuItemView.java
index a1e16d4..df579c6 100644
--- a/core/java/com/android/internal/view/menu/ListMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ListMenuItemView.java
@@ -34,6 +34,7 @@
* The item view for each item in the ListView-based MenuViews.
*/
public class ListMenuItemView extends LinearLayout implements MenuView.ItemView {
+ private static final String TAG = "ListMenuItemView";
private MenuItemImpl mItemData;
private ImageView mIconView;
@@ -121,27 +122,25 @@
}
public void setCheckable(boolean checkable) {
-
if (!checkable && mRadioButton == null && mCheckBox == null) {
return;
}
- if (mRadioButton == null) {
- insertRadioButton();
- }
- if (mCheckBox == null) {
- insertCheckBox();
- }
-
// Depending on whether its exclusive check or not, the checkbox or
// radio button will be the one in use (and the other will be otherCompoundButton)
final CompoundButton compoundButton;
final CompoundButton otherCompoundButton;
if (mItemData.isExclusiveCheckable()) {
+ if (mRadioButton == null) {
+ insertRadioButton();
+ }
compoundButton = mRadioButton;
otherCompoundButton = mCheckBox;
} else {
+ if (mCheckBox == null) {
+ insertCheckBox();
+ }
compoundButton = mCheckBox;
otherCompoundButton = mRadioButton;
}
@@ -155,12 +154,12 @@
}
// Make sure the other compound button isn't visible
- if (otherCompoundButton.getVisibility() != GONE) {
+ if (otherCompoundButton != null && otherCompoundButton.getVisibility() != GONE) {
otherCompoundButton.setVisibility(GONE);
}
} else {
- mCheckBox.setVisibility(GONE);
- mRadioButton.setVisibility(GONE);
+ if (mCheckBox != null) mCheckBox.setVisibility(GONE);
+ if (mRadioButton != null) mRadioButton.setVisibility(GONE);
}
}
diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java
index f95de62..0c572705 100644
--- a/core/java/com/android/internal/widget/ActionBarContainer.java
+++ b/core/java/com/android/internal/widget/ActionBarContainer.java
@@ -118,6 +118,14 @@
return true;
}
+ @Override
+ public boolean onHoverEvent(MotionEvent ev) {
+ super.onHoverEvent(ev);
+
+ // An action bar always eats hover events.
+ return true;
+ }
+
public void setTabContainer(ScrollingTabContainerView tabView) {
if (mTabContainer != null) {
removeView(mTabContainer);
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index acffa5c..446dab1 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -207,7 +207,7 @@
});
final MenuBuilder menu = (MenuBuilder) mode.getMenu();
- mActionMenuPresenter = new ActionMenuPresenter();
+ mActionMenuPresenter = new ActionMenuPresenter(mContext);
mActionMenuPresenter.setReserveOverflow(true);
final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 6d2e823..61bce60 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -373,7 +373,7 @@
}
}
if (mActionMenuPresenter == null) {
- mActionMenuPresenter = new ActionMenuPresenter();
+ mActionMenuPresenter = new ActionMenuPresenter(mContext);
mActionMenuPresenter.setCallback(cb);
mActionMenuPresenter.setId(com.android.internal.R.id.action_menu_presenter);
mExpandedMenuPresenter = new ExpandedActionViewMenuPresenter();
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 81e7c34..d5450e4 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -23,11 +23,16 @@
import android.app.admin.DevicePolicyManager;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.hardware.Camera;
+import android.hardware.Camera.CameraInfo;
import android.os.FileObserver;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
+import android.os.SystemProperties;
import android.os.storage.IMountService;
import android.provider.Settings;
import android.security.KeyStore;
@@ -54,6 +59,8 @@
*/
public class LockPatternUtils {
+ private static final String OPTION_ENABLE_FACELOCK = "enable_facelock";
+
private static final String TAG = "LockPatternUtils";
private static final String SYSTEM_DIRECTORY = "/system/";
@@ -109,8 +116,11 @@
public static final String PASSWORD_TYPE_ALTERNATE_KEY = "lockscreen.password_type_alternate";
private final static String LOCK_PASSWORD_SALT_KEY = "lockscreen.password_salt";
private final static String DISABLE_LOCKSCREEN_KEY = "lockscreen.disabled";
+ private final static String LOCKSCREEN_OPTIONS = "lockscreen.options";
public final static String LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK
= "lockscreen.biometric_weak_fallback";
+ public final static String BIOMETRIC_WEAK_EVER_CHOSEN_KEY
+ = "lockscreen.biometricweakeverchosen";
private final static String PASSWORD_HISTORY_KEY = "lockscreen.passwordhistory";
@@ -333,17 +343,36 @@
}
/**
+ * Return true if the user has ever chosen biometric weak. This is true even if biometric
+ * weak is not current set.
+ *
+ * @return True if the user has ever chosen biometric weak.
+ */
+ public boolean isBiometricWeakEverChosen() {
+ return getBoolean(BIOMETRIC_WEAK_EVER_CHOSEN_KEY);
+ }
+
+ /**
* Used by device policy manager to validate the current password
* information it has.
*/
public int getActivePasswordQuality() {
int activePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
- switch (getKeyguardStoredPasswordQuality()) {
+ // Note we don't want to use getKeyguardStoredPasswordQuality() because we want this to
+ // return biometric_weak if that is being used instead of the backup
+ int quality =
+ (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+ switch (quality) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
if (isLockPatternEnabled()) {
activePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
}
break;
+ case DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK:
+ if (isBiometricWeakInstalled()) {
+ activePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
+ }
+ break;
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
if (isLockPasswordEnabled()) {
activePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
@@ -365,13 +394,15 @@
}
break;
}
+
return activePasswordQuality;
}
/**
* Clear any lock pattern or password.
*/
- public void clearLock() {
+ public void clearLock(boolean isFallback) {
+ if(!isFallback) deleteGallery();
saveLockPassword(null, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
setLockPatternEnabled(false);
saveLockPattern(null);
@@ -408,6 +439,39 @@
}
/**
+ * Calls back SetupFaceLock to save the temporary gallery file if this is the backup lock.
+ * This doesn't have to verify that biometric is enabled because it's only called in that case
+ */
+ void moveTempGallery() {
+ Intent intent = new Intent().setClassName("com.android.facelock",
+ "com.android.facelock.SetupFaceLock");
+ intent.putExtra("moveTempGallery", true);
+ mContext.startActivity(intent);
+ }
+
+ /**
+ * Calls back SetupFaceLock to delete the temporary gallery file
+ */
+ public void deleteTempGallery() {
+ Intent intent = new Intent().setClassName("com.android.facelock",
+ "com.android.facelock.SetupFaceLock");
+ intent.putExtra("deleteTempGallery", true);
+ mContext.startActivity(intent);
+ }
+
+ /**
+ * Calls back SetupFaceLock to delete the gallery file when the lock type is changed
+ */
+ void deleteGallery() {
+ if(usingBiometricWeak()) {
+ Intent intent = new Intent().setClassName("com.android.facelock",
+ "com.android.facelock.SetupFaceLock");
+ intent.putExtra("deleteGallery", true);
+ mContext.startActivity(intent);
+ }
+ }
+
+ /**
* Save a lock pattern.
* @param pattern The new pattern to save.
* @param isFallback Specifies if this is a fallback to biometric weak
@@ -431,11 +495,14 @@
keyStore.password(patternToString(pattern));
setBoolean(PATTERN_EVER_CHOSEN_KEY, true);
if (!isFallback) {
+ deleteGallery();
setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
} else {
setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK);
setLong(PASSWORD_TYPE_ALTERNATE_KEY,
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+ setBoolean(BIOMETRIC_WEAK_EVER_CHOSEN_KEY, true);
+ moveTempGallery();
}
dpm.setActivePasswordState(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, pattern
.size(), 0, 0, 0, 0, 0, 0);
@@ -547,10 +614,13 @@
int computedQuality = computePasswordQuality(password);
if (!isFallback) {
+ deleteGallery();
setLong(PASSWORD_TYPE_KEY, Math.max(quality, computedQuality));
} else {
setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK);
setLong(PASSWORD_TYPE_ALTERNATE_KEY, Math.max(quality, computedQuality));
+ setBoolean(BIOMETRIC_WEAK_EVER_CHOSEN_KEY, true);
+ moveTempGallery();
}
if (computedQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
int letters = 0;
@@ -638,6 +708,9 @@
return quality;
}
+ /**
+ * @return true if the lockscreen method is set to biometric weak
+ */
public boolean usingBiometricWeak() {
int quality =
(int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
@@ -771,7 +844,7 @@
|| backupMode == DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
return savedPasswordExists() && (passwordEnabled ||
- (isBiometricEnabled() && backupEnabled));
+ (usingBiometricWeak() && backupEnabled));
}
/**
@@ -785,16 +858,36 @@
return getBoolean(Settings.Secure.LOCK_PATTERN_ENABLED)
&& (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
== DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ||
- (isBiometricEnabled() && backupEnabled));
+ (usingBiometricWeak() && backupEnabled));
}
/**
- * @return Whether biometric weak lock is enabled.
+ * @return Whether biometric weak lock is installed and that the front facing camera exists
*/
- public boolean isBiometricEnabled() {
- // TODO: check if it's installed
- return getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
- == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
+ public boolean isBiometricWeakInstalled() {
+ // Check that the system flag was set
+ if (!OPTION_ENABLE_FACELOCK.equals(getString(LOCKSCREEN_OPTIONS))) {
+ return false;
+ }
+
+ // Check that it's installed
+ PackageManager pm = mContext.getPackageManager();
+ try {
+ pm.getPackageInfo("com.android.facelock", PackageManager.GET_ACTIVITIES);
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+
+ // Check that the camera is enabled
+ if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {
+ return false;
+ }
+ if (getDevicePolicyManager().getCameraDisabled(null)) {
+ return false;
+ }
+
+
+ return true;
}
/**
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index 97bbe52..a2fc6e2 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -17,8 +17,6 @@
package com.android.internal.widget;
-import com.android.internal.R;
-
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -34,11 +32,15 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
-import android.os.Vibrator;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
+
+import com.android.internal.R;
import java.util.ArrayList;
import java.util.List;
@@ -57,9 +59,6 @@
private static final int ASPECT_LOCK_WIDTH = 1; // Fixed width; height will be minimum of (w,h)
private static final int ASPECT_LOCK_HEIGHT = 2; // Fixed height; width will be minimum of (w,h)
- // Vibrator pattern for creating a tactile bump
- private static final long[] DEFAULT_VIBE_PATTERN = {0, 1, 40, 41};
-
private static final boolean PROFILE_DRAWING = false;
private boolean mDrawingProfilingStarted = false;
@@ -100,7 +99,7 @@
private DisplayMode mPatternDisplayMode = DisplayMode.Correct;
private boolean mInputEnabled = true;
private boolean mInStealthMode = false;
- private boolean mTactileFeedbackEnabled = true;
+ private boolean mEnableHapticFeedback = true;
private boolean mPatternInProgress = false;
private float mDiameterFactor = 0.10f; // TODO: move to attrs
@@ -125,11 +124,6 @@
private int mBitmapWidth;
private int mBitmapHeight;
-
- private Vibrator vibe; // Vibrator for creating tactile feedback
-
- private long[] mVibePattern;
-
private int mAspect;
private final Matrix mArrowMatrix = new Matrix();
private final Matrix mCircleMatrix = new Matrix();
@@ -248,7 +242,6 @@
public LockPatternView(Context context, AttributeSet attrs) {
super(context, attrs);
- vibe = new Vibrator();
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LockPatternView);
@@ -293,26 +286,6 @@
mBitmapHeight = Math.max(mBitmapHeight, bitmap.getHeight());
}
- // allow vibration pattern to be customized
- mVibePattern = loadVibratePattern(com.android.internal.R.array.config_virtualKeyVibePattern);
- }
-
- private long[] loadVibratePattern(int id) {
- int[] pattern = null;
- try {
- pattern = getResources().getIntArray(id);
- } catch (Resources.NotFoundException e) {
- Log.e(TAG, "Vibrate pattern missing, using default", e);
- }
- if (pattern == null) {
- return DEFAULT_VIBE_PATTERN;
- }
-
- long[] tmpPattern = new long[pattern.length];
- for (int i = 0; i < pattern.length; i++) {
- tmpPattern[i] = pattern[i];
- }
- return tmpPattern;
}
private Bitmap getBitmapFor(int resId) {
@@ -330,7 +303,7 @@
* @return Whether the view has tactile feedback enabled.
*/
public boolean isTactileFeedbackEnabled() {
- return mTactileFeedbackEnabled;
+ return mEnableHapticFeedback;
}
/**
@@ -350,7 +323,7 @@
* @param tactileFeedbackEnabled Whether tactile feedback is enabled
*/
public void setTactileFeedbackEnabled(boolean tactileFeedbackEnabled) {
- mTactileFeedbackEnabled = tactileFeedbackEnabled;
+ mEnableHapticFeedback = tactileFeedbackEnabled;
}
/**
@@ -401,6 +374,34 @@
invalidate();
}
+ private void notifyCellAdded() {
+ if (mOnPatternListener != null) {
+ mOnPatternListener.onPatternCellAdded(mPattern);
+ }
+ sendAccessEvent(R.string.lockscreen_access_pattern_cell_added);
+ }
+
+ private void notifyPatternStarted() {
+ if (mOnPatternListener != null) {
+ mOnPatternListener.onPatternStart();
+ }
+ sendAccessEvent(R.string.lockscreen_access_pattern_start);
+ }
+
+ private void notifyPatternDetected() {
+ if (mOnPatternListener != null) {
+ mOnPatternListener.onPatternDetected(mPattern);
+ }
+ sendAccessEvent(R.string.lockscreen_access_pattern_detected);
+ }
+
+ private void notifyPatternCleared() {
+ if (mOnPatternListener != null) {
+ mOnPatternListener.onPatternCleared();
+ }
+ sendAccessEvent(R.string.lockscreen_access_pattern_cleared);
+ }
+
/**
* Clear the pattern.
*/
@@ -543,8 +544,10 @@
addCellToPattern(fillInGapCell);
}
addCellToPattern(cell);
- if (mTactileFeedbackEnabled){
- vibe.vibrate(mVibePattern, -1); // Generate tactile feedback
+ if (mEnableHapticFeedback) {
+ performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY,
+ HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING
+ | HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
return cell;
}
@@ -554,9 +557,7 @@
private void addCellToPattern(Cell newCell) {
mPatternDrawLookup[newCell.getRow()][newCell.getColumn()] = true;
mPattern.add(newCell);
- if (mOnPatternListener != null) {
- mOnPatternListener.onPatternCellAdded(mPattern);
- }
+ notifyCellAdded();
}
// helper method to find which cell a point maps to
@@ -619,6 +620,27 @@
}
@Override
+ public boolean onHoverEvent(MotionEvent event) {
+ if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) {
+ final int action = event.getAction();
+ switch (action) {
+ case MotionEvent.ACTION_HOVER_ENTER:
+ event.setAction(MotionEvent.ACTION_DOWN);
+ break;
+ case MotionEvent.ACTION_HOVER_MOVE:
+ event.setAction(MotionEvent.ACTION_MOVE);
+ break;
+ case MotionEvent.ACTION_HOVER_EXIT:
+ event.setAction(MotionEvent.ACTION_UP);
+ break;
+ }
+ onTouchEvent(event);
+ event.setAction(action);
+ }
+ return super.onHoverEvent(event);
+ }
+
+ @Override
public boolean onTouchEvent(MotionEvent event) {
if (!mInputEnabled || !isEnabled()) {
return false;
@@ -636,10 +658,8 @@
return true;
case MotionEvent.ACTION_CANCEL:
resetPattern();
- if (mOnPatternListener != null) {
- mPatternInProgress = false;
- mOnPatternListener.onPatternCleared();
- }
+ mPatternInProgress = false;
+ notifyPatternCleared();
if (PROFILE_DRAWING) {
if (mDrawingProfilingStarted) {
Debug.stopMethodTracing();
@@ -661,9 +681,9 @@
final int patternSizePreHitDetect = mPattern.size();
Cell hitCell = detectAndAddHit(x, y);
final int patternSize = mPattern.size();
- if (hitCell != null && (mOnPatternListener != null) && (patternSize == 1)) {
+ if (hitCell != null && patternSize == 1) {
mPatternInProgress = true;
- mOnPatternListener.onPatternStart();
+ notifyPatternStarted();
}
// note current x and y for rubber banding of in progress patterns
final float dx = Math.abs(x - mInProgressX);
@@ -778,11 +798,17 @@
}
}
+ private void sendAccessEvent(int resId) {
+ setContentDescription(mContext.getString(resId));
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ setContentDescription(null);
+ }
+
private void handleActionUp(MotionEvent event) {
// report pattern detected
- if (!mPattern.isEmpty() && mOnPatternListener != null) {
+ if (!mPattern.isEmpty()) {
mPatternInProgress = false;
- mOnPatternListener.onPatternDetected(mPattern);
+ notifyPatternDetected();
invalidate();
}
if (PROFILE_DRAWING) {
@@ -798,13 +824,13 @@
final float x = event.getX();
final float y = event.getY();
final Cell hitCell = detectAndAddHit(x, y);
- if (hitCell != null && mOnPatternListener != null) {
+ if (hitCell != null) {
mPatternInProgress = true;
mPatternDisplayMode = DisplayMode.Correct;
- mOnPatternListener.onPatternStart();
- } else if (mOnPatternListener != null) {
+ notifyPatternStarted();
+ } else {
mPatternInProgress = false;
- mOnPatternListener.onPatternCleared();
+ notifyPatternCleared();
}
if (hitCell != null) {
final float startX = getCenterXForColumn(hitCell.column);
@@ -1061,7 +1087,7 @@
return new SavedState(superState,
LockPatternUtils.patternToString(mPattern),
mPatternDisplayMode.ordinal(),
- mInputEnabled, mInStealthMode, mTactileFeedbackEnabled);
+ mInputEnabled, mInStealthMode, mEnableHapticFeedback);
}
@Override
@@ -1074,7 +1100,7 @@
mPatternDisplayMode = DisplayMode.values()[ss.getDisplayMode()];
mInputEnabled = ss.isInputEnabled();
mInStealthMode = ss.isInStealthMode();
- mTactileFeedbackEnabled = ss.isTactileFeedbackEnabled();
+ mEnableHapticFeedback = ss.isTactileFeedbackEnabled();
}
/**
diff --git a/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java b/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java
index 366b983..2e7810f 100644
--- a/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java
+++ b/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java
@@ -26,6 +26,7 @@
import android.os.Vibrator;
import android.provider.Settings;
import android.util.Log;
+import android.view.HapticFeedbackConstants;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.View;
@@ -48,11 +49,11 @@
private PasswordEntryKeyboard mSymbolsKeyboard;
private PasswordEntryKeyboard mSymbolsKeyboardShifted;
private PasswordEntryKeyboard mNumericKeyboard;
- private Context mContext;
- private View mTargetView;
- private KeyboardView mKeyboardView;
+ private final Context mContext;
+ private final View mTargetView;
+ private final KeyboardView mKeyboardView;
private long[] mVibratePattern;
- private Vibrator mVibrator;
+ private boolean mEnableHaptics = false;
public PasswordEntryKeyboardHelper(Context context, KeyboardView keyboardView, View targetView) {
this(context, keyboardView, targetView, true);
@@ -71,7 +72,10 @@
mKeyboardView.getLayoutParams().height);
}
mKeyboardView.setOnKeyboardActionListener(this);
- mVibrator = new Vibrator();
+ }
+
+ public void setEnableHaptics(boolean enabled) {
+ mEnableHaptics = enabled;
}
public boolean isAlpha() {
@@ -228,8 +232,9 @@
}
}
- private void handleBackspace() {
+ public void handleBackspace() {
sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
+ performHapticFeedback();
}
private void handleShift() {
@@ -272,8 +277,14 @@
}
public void onPress(int primaryCode) {
- if (mVibratePattern != null) {
- mVibrator.vibrate(mVibratePattern, -1);
+ performHapticFeedback();
+ }
+
+ private void performHapticFeedback() {
+ if (mEnableHaptics) {
+ mKeyboardView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY,
+ HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING
+ | HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
}
diff --git a/core/java/com/android/internal/widget/TransportControlView.java b/core/java/com/android/internal/widget/TransportControlView.java
index 1042a59..73d9f10 100644
--- a/core/java/com/android/internal/widget/TransportControlView.java
+++ b/core/java/com/android/internal/widget/TransportControlView.java
@@ -336,20 +336,27 @@
if (state == mPlayState) {
return;
}
+ final int imageResId;
+ final int imageDescId;
switch (state) {
case RemoteControlClient.PLAYSTATE_PLAYING:
- mBtnPlay.setImageResource(com.android.internal.R.drawable.ic_media_pause);
+ imageResId = com.android.internal.R.drawable.ic_media_pause;
+ imageDescId = com.android.internal.R.string.lockscreen_transport_pause_description;
break;
case RemoteControlClient.PLAYSTATE_BUFFERING:
- mBtnPlay.setImageResource(com.android.internal.R.drawable.ic_media_stop);
+ imageResId = com.android.internal.R.drawable.ic_media_stop;
+ imageDescId = com.android.internal.R.string.lockscreen_transport_stop_description;
break;
case RemoteControlClient.PLAYSTATE_PAUSED:
default:
- mBtnPlay.setImageResource(com.android.internal.R.drawable.ic_media_play);
+ imageResId = com.android.internal.R.drawable.ic_media_play;
+ imageDescId = com.android.internal.R.string.lockscreen_transport_play_description;
break;
}
+ mBtnPlay.setImageResource(imageResId);
+ mBtnPlay.setContentDescription(getResources().getString(imageDescId));
mPlayState = state;
}
diff --git a/core/java/com/google/android/mms/pdu/PduPersister.java b/core/java/com/google/android/mms/pdu/PduPersister.java
index 4d2d535..c4be513 100644
--- a/core/java/com/google/android/mms/pdu/PduPersister.java
+++ b/core/java/com/google/android/mms/pdu/PduPersister.java
@@ -667,6 +667,13 @@
String contentType = null;
if (part.getContentType() != null) {
contentType = toIsoString(part.getContentType());
+
+ // There is no "image/jpg" in Android (and it's an invalid mimetype).
+ // Change it to "image/jpeg"
+ if (ContentType.IMAGE_JPG.equals(contentType)) {
+ contentType = ContentType.IMAGE_JPEG;
+ }
+
values.put(Part.CONTENT_TYPE, contentType);
// To ensure the SMIL part is always the first part.
if (ContentType.APP_SMIL.equals(contentType)) {
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 18bd754..da055fc 100644
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -392,10 +392,20 @@
SkSafeUnref(ctable);
size_t size = bitmap->getSize();
+
+ android::Parcel::ReadableBlob blob;
+ android::status_t status = p->readBlob(size, &blob);
+ if (status) {
+ doThrowRE(env, "Could not read bitmap from parcel blob.");
+ delete bitmap;
+ return NULL;
+ }
+
bitmap->lockPixels();
- memcpy(bitmap->getPixels(), p->readInplace(size), size);
+ memcpy(bitmap->getPixels(), blob.data(), size);
bitmap->unlockPixels();
+ blob.release();
return GraphicsJNI::createBitmap(env, bitmap, buffer, isMutable, NULL, density);
}
@@ -431,17 +441,24 @@
}
size_t size = bitmap->getSize();
+
+ android::Parcel::WritableBlob blob;
+ android::status_t status = p->writeBlob(size, &blob);
+ if (status) {
+ doThrowRE(env, "Could not write bitmap to parcel blob.");
+ return false;
+ }
+
bitmap->lockPixels();
- void* pDst = p->writeInplace(size);
-
const void* pSrc = bitmap->getPixels();
-
if (pSrc == NULL) {
- memset(pDst, 0, size);
+ memset(blob.data(), 0, size);
} else {
- memcpy(pDst, pSrc, size);
+ memcpy(blob.data(), pSrc, size);
}
bitmap->unlockPixels();
+
+ blob.release();
return true;
}
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index 02c5bb3..7724646 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -767,20 +767,17 @@
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, textArray, contextCount, flags);
+ value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count,
+ contextCount, flags);
if (value == NULL) {
LOGE("Cannot get TextLayoutCache value");
return ;
}
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, textArray, contextCount, flags);
+ value->computeValues(paint, textArray, start, count, contextCount, flags);
#endif
- size_t startIndex = 0;
- size_t glyphsCount = 0;
- value->getGlyphsIndexAndCount(start, count, &startIndex, &glyphsCount);
- const jchar* glyphs = value->getGlyphs(startIndex, glyphsCount);
- doDrawGlyphs(canvas, glyphs, 0, glyphsCount, x, y, flags, paint);
+ doDrawGlyphs(canvas, value->getGlyphs(), 0, value->getGlyphsCount(), x, y, flags, paint);
}
static void doDrawGlyphs(SkCanvas* canvas, const jchar* glyphArray, int index, int count,
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 3daf7d0..2ab7da9 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -483,18 +483,15 @@
}
jchar* glyphsArray = env->GetCharArrayElements(glyphs, NULL);
- HB_ShaperItem shaperItem;
- HB_FontRec font;
- FontData fontData;
- TextLayoutCacheValue::shapeWithHarfbuzz(&shaperItem, &font, &fontData, paint, text,
- start, count, contextCount, flags);
- int glyphCount = shaperItem.num_glyphs;
- for (int i = 0; i < glyphCount; i++) {
- glyphsArray[i] = (jchar) shaperItem.glyphs[i];
- }
+ TextLayoutCacheValue value;
+ value.computeValues(paint, text, start, count, contextCount, flags);
+ const jchar* shapedGlyphs = value.getGlyphs();
+ size_t glyphsCount = value.getGlyphsCount();
+ memcpy(glyphsArray, shapedGlyphs, sizeof(jchar) * glyphsCount);
+
env->ReleaseCharArrayElements(glyphs, glyphsArray, JNI_ABORT);
- return glyphCount;
+ return glyphsCount;
}
static int getTextGlyphs__StringIIIII_C(JNIEnv* env, jobject clazz, SkPaint* paint,
diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp
index ae17aed..9b424f2 100644
--- a/core/jni/android/graphics/TextLayout.cpp
+++ b/core/jni/android/graphics/TextLayout.cpp
@@ -257,17 +257,18 @@
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
// Return advances from the cache. Compute them if needed
- value = TextLayoutCache::getInstance().getValue(paint, chars, contextCount, dirFlags);
+ value = TextLayoutCache::getInstance().getValue(paint, chars, start, count,
+ contextCount, dirFlags);
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, chars, contextCount, dirFlags);
+ value->computeValues(paint, chars, start, count, contextCount, dirFlags);
#endif
if (value != NULL) {
- if (resultAdvances != NULL) {
- value->getAdvances(start, count, resultAdvances);
+ if (resultAdvances) {
+ memcpy(resultAdvances, value->getAdvances(), value->getAdvancesCount() * sizeof(jfloat));
}
if (resultTotalAdvance) {
- *resultTotalAdvance = value->getTotalAdvance(start, count);
+ *resultTotalAdvance = value->getTotalAdvance();
}
}
}
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 86ae7d2..0b53850 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -106,7 +106,7 @@
* Caching
*/
sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint,
- const jchar* text, jint count, jint dirFlags) {
+ const jchar* text, jint start, jint count, jint contextCount, jint dirFlags) {
AutoMutex _l(mLock);
nsecs_t startTime = 0;
if (mDebugEnabled) {
@@ -114,7 +114,7 @@
}
// Create the key
- TextLayoutCacheKey key(paint, text, count, dirFlags);
+ TextLayoutCacheKey key(paint, text, start, count, contextCount, dirFlags);
// Get value from cache if possible
sp<TextLayoutCacheValue> value = mCache.get(key);
@@ -128,7 +128,7 @@
value = new TextLayoutCacheValue();
// Compute advances and store them
- value->computeValues(paint, text, count, dirFlags);
+ value->computeValues(paint, text, start, count, contextCount, dirFlags);
nsecs_t endTime = systemTime(SYSTEM_TIME_MONOTONIC);
@@ -166,10 +166,10 @@
} else {
if (mDebugEnabled) {
LOGD("CACHE MISS: Calculated but not storing entry because it is too big "
- "with count=%d, "
+ "with start=%d count=%d contextCount=%d, "
"entry size %d bytes, remaining space %d bytes"
" - Compute time in nanos: %lld - Text='%s'",
- count, size, mMaxSize - mSize, endTime,
+ start, count, contextCount, size, mMaxSize - mSize, endTime,
String8(text, count).string());
}
value.clear();
@@ -184,10 +184,10 @@
if (value->getElapsedTime() > 0) {
float deltaPercent = 100 * ((value->getElapsedTime() - elapsedTimeThruCacheGet)
/ ((float)value->getElapsedTime()));
- LOGD("CACHE HIT #%d with count=%d "
+ LOGD("CACHE HIT #%d with start=%d count=%d contextCount=%d"
"- Compute time in nanos: %d - "
"Cache get time in nanos: %lld - Gain in percent: %2.2f - Text='%s' ",
- mCacheHitCount, count,
+ mCacheHitCount, start, count, contextCount,
value->getElapsedTime(), elapsedTimeThruCacheGet, deltaPercent,
String8(text, count).string());
}
@@ -218,14 +218,14 @@
/**
* TextLayoutCacheKey
*/
-TextLayoutCacheKey::TextLayoutCacheKey(): text(NULL), count(0),
+TextLayoutCacheKey::TextLayoutCacheKey(): text(NULL), start(0), count(0), contextCount(0),
dirFlags(0), typeface(NULL), textSize(0), textSkewX(0), textScaleX(0), flags(0),
hinting(SkPaint::kNo_Hinting) {
}
-TextLayoutCacheKey::TextLayoutCacheKey(const SkPaint* paint,
- const UChar* text, size_t count, int dirFlags) :
- text(text), count(count),
+TextLayoutCacheKey::TextLayoutCacheKey(const SkPaint* paint, const UChar* text,
+ size_t start, size_t count, size_t contextCount, int dirFlags) :
+ text(text), start(start), count(count), contextCount(contextCount),
dirFlags(dirFlags) {
typeface = paint->getTypeface();
textSize = paint->getTextSize();
@@ -238,7 +238,9 @@
TextLayoutCacheKey::TextLayoutCacheKey(const TextLayoutCacheKey& other) :
text(NULL),
textCopy(other.textCopy),
+ start(other.start),
count(other.count),
+ contextCount(other.contextCount),
dirFlags(other.dirFlags),
typeface(other.typeface),
textSize(other.textSize),
@@ -251,35 +253,47 @@
}
}
-bool TextLayoutCacheKey::operator<(const TextLayoutCacheKey& rhs) const {
- LTE_INT(count) {
- LTE_INT(typeface) {
- LTE_FLOAT(textSize) {
- LTE_FLOAT(textSkewX) {
- LTE_FLOAT(textScaleX) {
- LTE_INT(flags) {
- LTE_INT(hinting) {
- LTE_INT(dirFlags) {
- return memcmp(getText(), rhs.getText(),
- count * sizeof(UChar)) < 0;
- }
- }
- }
- }
- }
- }
- }
- }
- return false;
+int TextLayoutCacheKey::compare(const TextLayoutCacheKey& lhs, const TextLayoutCacheKey& rhs) {
+ int deltaInt = lhs.start - rhs.start;
+ if (deltaInt != 0) return (deltaInt);
+
+ deltaInt = lhs.count - rhs.count;
+ if (deltaInt != 0) return (deltaInt);
+
+ deltaInt = lhs.contextCount - rhs.contextCount;
+ if (deltaInt != 0) return (deltaInt);
+
+ if (lhs.typeface < rhs.typeface) return -1;
+ if (lhs.typeface > rhs.typeface) return +1;
+
+ if (lhs.textSize < rhs.textSize) return -1;
+ if (lhs.textSize > rhs.textSize) return +1;
+
+ if (lhs.textSkewX < rhs.textSkewX) return -1;
+ if (lhs.textSkewX > rhs.textSkewX) return +1;
+
+ if (lhs.textScaleX < rhs.textScaleX) return -1;
+ if (lhs.textScaleX > rhs.textScaleX) return +1;
+
+ deltaInt = lhs.flags - rhs.flags;
+ if (deltaInt != 0) return (deltaInt);
+
+ deltaInt = lhs.hinting - rhs.hinting;
+ if (deltaInt != 0) return (deltaInt);
+
+ deltaInt = lhs.dirFlags - rhs.dirFlags;
+ if (deltaInt) return (deltaInt);
+
+ return memcmp(lhs.getText(), rhs.getText(), lhs.contextCount * sizeof(UChar));
}
void TextLayoutCacheKey::internalTextCopy() {
- textCopy.setTo(text, count);
+ textCopy.setTo(text, contextCount);
text = NULL;
}
size_t TextLayoutCacheKey::getSize() {
- return sizeof(TextLayoutCacheKey) + sizeof(UChar) * count;
+ return sizeof(TextLayoutCacheKey) + sizeof(UChar) * contextCount;
}
/**
@@ -298,29 +312,32 @@
}
void TextLayoutCacheValue::computeValues(SkPaint* paint, const UChar* chars,
- size_t contextCount, int dirFlags) {
+ size_t start, size_t count, size_t contextCount, int dirFlags) {
// Give a hint for advances, glyphs and log clusters vectors size
mAdvances.setCapacity(contextCount);
mGlyphs.setCapacity(contextCount);
- mLogClusters.setCapacity(contextCount);
- computeValuesWithHarfbuzz(paint, chars, contextCount, dirFlags,
- &mAdvances, &mTotalAdvance, &mGlyphs, &mLogClusters);
+ computeValuesWithHarfbuzz(paint, chars, start, count, contextCount, dirFlags,
+ &mAdvances, &mTotalAdvance, &mGlyphs);
#if DEBUG_ADVANCES
- LOGD("Advances - countextCount=%d - totalAdvance=%f", contextCount, mTotalAdvance);
+ LOGD("Advances - start=%d, count=%d, countextCount=%d, totalAdvance=%f", start, count,
+ contextCount, mTotalAdvance);
#endif
}
size_t TextLayoutCacheValue::getSize() {
return sizeof(TextLayoutCacheValue) + sizeof(jfloat) * mAdvances.capacity() +
- sizeof(jchar) * mGlyphs.capacity() + sizeof(unsigned short) * mLogClusters.capacity();
+ sizeof(jchar) * mGlyphs.capacity();
}
-void TextLayoutCacheValue::setupShaperItem(HB_ShaperItem* shaperItem, HB_FontRec* font,
- FontData* fontData, SkPaint* paint, const UChar* chars, size_t start, size_t count,
- size_t contextCount, bool isRTL) {
+void TextLayoutCacheValue::initShaperItem(HB_ShaperItem& shaperItem, HB_FontRec* font,
+ FontData* fontData, SkPaint* paint, const UChar* chars, size_t contextCount) {
+ // Zero the Shaper struct
+ memset(&shaperItem, 0, sizeof(shaperItem));
+
font->klass = &harfbuzzSkiaClass;
font->userData = 0;
+
// The values which harfbuzzSkiaClass returns are already scaled to
// pixel units, so we just set all these to one to disable further
// scaling.
@@ -329,33 +346,13 @@
font->x_scale = 1;
font->y_scale = 1;
- memset(shaperItem, 0, sizeof(*shaperItem));
- shaperItem->font = font;
- shaperItem->face = HB_NewFace(shaperItem->font, harfbuzzSkiaGetTable);
+ shaperItem.font = font;
+ shaperItem.face = HB_NewFace(shaperItem.font, harfbuzzSkiaGetTable);
- shaperItem->kerning_applied = false;
+ // Reset kerning
+ shaperItem.kerning_applied = false;
- // We cannot know, ahead of time, how many glyphs a given script run
- // will produce. We take a guess that script runs will not produce more
- // than twice as many glyphs as there are code points plus a bit of
- // padding and fallback if we find that we are wrong.
- createGlyphArrays(shaperItem, (contextCount + 2) * 2);
-
- // Free memory for clusters if needed and recreate the clusters array
- if (shaperItem->log_clusters) {
- delete shaperItem->log_clusters;
- }
- shaperItem->log_clusters = new unsigned short[contextCount];
-
- shaperItem->item.pos = start;
- shaperItem->item.length = count;
- shaperItem->item.bidiLevel = isRTL;
-
- shaperItem->item.script = isRTL ? HB_Script_Arabic : HB_Script_Common;
-
- shaperItem->string = chars;
- shaperItem->stringLength = contextCount;
-
+ // Define font data
fontData->typeFace = paint->getTypeface();
fontData->textSize = paint->getTextSize();
fontData->textSkewX = paint->getTextSkewX();
@@ -363,31 +360,50 @@
fontData->flags = paint->getFlags();
fontData->hinting = paint->getHinting();
- shaperItem->font->userData = fontData;
+ shaperItem.font->userData = fontData;
+
+ // We cannot know, ahead of time, how many glyphs a given script run
+ // will produce. We take a guess that script runs will not produce more
+ // than twice as many glyphs as there are code points plus a bit of
+ // padding and fallback if we find that we are wrong.
+ createGlyphArrays(shaperItem, (contextCount + 2) * 2);
+
+ // Create log clusters array
+ shaperItem.log_clusters = new unsigned short[contextCount];
+
+ // Set the string properties
+ shaperItem.string = chars;
+ shaperItem.stringLength = contextCount;
}
-void TextLayoutCacheValue::shapeWithHarfbuzz(HB_ShaperItem* shaperItem, HB_FontRec* font,
- FontData* fontData, SkPaint* paint, const UChar* chars, size_t start, size_t count,
- size_t contextCount, bool isRTL) {
- // Setup Harfbuzz Shaper
- setupShaperItem(shaperItem, font, fontData, paint, chars, start, count,
- contextCount, isRTL);
+void TextLayoutCacheValue::freeShaperItem(HB_ShaperItem& shaperItem) {
+ deleteGlyphArrays(shaperItem);
+ delete[] shaperItem.log_clusters;
+ HB_FreeFace(shaperItem.face);
+}
+
+void TextLayoutCacheValue::shapeRun(HB_ShaperItem& shaperItem, size_t start, size_t count,
+ bool isRTL) {
+ // Update Harfbuzz Shaper
+ shaperItem.item.pos = start;
+ shaperItem.item.length = count;
+ shaperItem.item.bidiLevel = isRTL;
+
+ shaperItem.item.script = isRTL ? HB_Script_Arabic : HB_Script_Common;
// Shape
- resetGlyphArrays(shaperItem);
- while (!HB_ShapeItem(shaperItem)) {
+ while (!HB_ShapeItem(&shaperItem)) {
// We overflowed our arrays. Resize and retry.
// HB_ShapeItem fills in shaperItem.num_glyphs with the needed size.
deleteGlyphArrays(shaperItem);
- createGlyphArrays(shaperItem, shaperItem->num_glyphs << 1);
- resetGlyphArrays(shaperItem);
+ createGlyphArrays(shaperItem, shaperItem.num_glyphs << 1);
}
}
void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
- size_t contextCount, int dirFlags,
+ size_t start, size_t count, size_t contextCount, int dirFlags,
Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
- Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters) {
+ Vector<jchar>* const outGlyphs) {
UBiDiLevel bidiReq = 0;
bool forceLTR = false;
@@ -402,13 +418,21 @@
case kBidi_Force_RTL: forceRTL = true; break; // every char is RTL
}
+ HB_ShaperItem shaperItem;
+ HB_FontRec font;
+ FontData fontData;
+
+ // Initialize Harfbuzz Shaper
+ initShaperItem(shaperItem, &font, &fontData, paint, chars, contextCount);
+
if (forceLTR || forceRTL) {
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- forcing run with LTR=%d RTL=%d",
forceLTR, forceRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, 0, contextCount, contextCount, forceRTL,
- outAdvances, outTotalAdvance, outGlyphs, outLogClusters);
+ computeRunValuesWithHarfbuzz(shaperItem, paint,
+ start, count, forceRTL,
+ outAdvances, outTotalAdvance, outGlyphs);
} else {
UBiDi* bidi = ubidi_open();
if (bidi) {
@@ -421,32 +445,49 @@
int paraDir = ubidi_getParaLevel(bidi) & kDirection_Mask; // 0 if ltr, 1 if rtl
size_t rc = ubidi_countRuns(bidi, &status);
#if DEBUG_GLYPHS
- LOGD("computeValuesWithHarfbuzz -- dirFlags=%d run-count=%d paraDir=%d", dirFlags, rc, paraDir);
+ LOGD("computeValuesWithHarfbuzz -- dirFlags=%d run-count=%d paraDir=%d",
+ dirFlags, rc, paraDir);
#endif
if (rc == 1 || !U_SUCCESS(status)) {
bool isRTL = (paraDir == 1);
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- processing SINGLE run "
- "-- run-start=%d run-len=%d isRTL=%d", 0, contextCount, isRTL);
+ "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, 0, contextCount, contextCount,
- isRTL, outAdvances, outTotalAdvance, outGlyphs, outLogClusters);
+ computeRunValuesWithHarfbuzz(shaperItem, paint,
+ start, count, isRTL,
+ outAdvances, outTotalAdvance, outGlyphs);
} else {
+ int32_t end = start + count;
for (size_t i = 0; i < rc; ++i) {
int32_t startRun;
int32_t lengthRun;
UBiDiDirection runDir = ubidi_getVisualRun(bidi, i, &startRun, &lengthRun);
+ if (startRun >= end) {
+ continue;
+ }
+ int32_t endRun = startRun + lengthRun;
+ if (endRun <= start) {
+ continue;
+ }
+ if (startRun < start) {
+ startRun = start;
+ }
+ if (endRun > end) {
+ endRun = end;
+ }
+
+ lengthRun = endRun - startRun;
bool isRTL = (runDir == UBIDI_RTL);
jfloat runTotalAdvance = 0;
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- run-start=%d run-len=%d isRTL=%d",
startRun, lengthRun, isRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, startRun,
- lengthRun, contextCount, isRTL,
- outAdvances, &runTotalAdvance,
- outGlyphs, outLogClusters);
+ computeRunValuesWithHarfbuzz(shaperItem, paint,
+ startRun, lengthRun, isRTL,
+ outAdvances, &runTotalAdvance, outGlyphs);
*outTotalAdvance += runTotalAdvance;
}
@@ -458,12 +499,17 @@
bool isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL);
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- cannot run BiDi, considering a SINGLE Run "
- "-- run-start=%d run-len=%d isRTL=%d", 0, contextCount, isRTL);
+ "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, 0, contextCount, contextCount, isRTL,
- outAdvances, outTotalAdvance, outGlyphs, outLogClusters);
+ computeRunValuesWithHarfbuzz(shaperItem, paint,
+ start, count, isRTL,
+ outAdvances, outTotalAdvance, outGlyphs);
}
}
+
+ // Cleaning
+ freeShaperItem(shaperItem);
+
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- total-glyphs-count=%d", outGlyphs->size());
#endif
@@ -478,17 +524,12 @@
}
}
-void TextLayoutCacheValue::computeRunValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
- size_t start, size_t count, size_t contextCount, bool isRTL,
+void TextLayoutCacheValue::computeRunValuesWithHarfbuzz(HB_ShaperItem& shaperItem, SkPaint* paint,
+ size_t start, size_t count, bool isRTL,
Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
- Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters) {
+ Vector<jchar>* const outGlyphs) {
- HB_ShaperItem shaperItem;
- HB_FontRec font;
- FontData fontData;
-
- shapeWithHarfbuzz(&shaperItem, &font, &fontData, paint, chars, start, count,
- contextCount, isRTL);
+ shapeRun(shaperItem, start, count, isRTL);
#if DEBUG_GLYPHS
LOGD("HARFBUZZ -- num_glypth=%d - kerning_applied=%d", shaperItem.num_glyphs,
@@ -505,10 +546,6 @@
#endif
outAdvances->insertAt(0, outAdvances->size(), count);
*outTotalAdvance = 0;
-
- // Cleaning
- deleteGlyphArrays(&shaperItem);
- HB_FreeFace(shaperItem.face);
return;
}
@@ -547,101 +584,21 @@
outGlyphs->add(glyph);
}
}
-
- // Get LogClusters
- if (outLogClusters) {
- size_t countLogClusters = outLogClusters->size();
- for (size_t i = 0; i < count; i++) {
- // As there may be successive runs, we need to shift the log clusters
- unsigned short logCluster = shaperItem.log_clusters[i] + countLogClusters;
-#if DEBUG_GLYPHS
- LOGD("HARFBUZZ -- logCluster[%d] relative=%d - absolute=%d", i, shaperItem.log_clusters[i], logCluster);
-#endif
- outLogClusters->add(logCluster);
- }
- }
-
- // Cleaning
- deleteGlyphArrays(&shaperItem);
- HB_FreeFace(shaperItem.face);
}
-void TextLayoutCacheValue::deleteGlyphArrays(HB_ShaperItem* shaperItem) {
- delete[] shaperItem->glyphs;
- delete[] shaperItem->attributes;
- delete[] shaperItem->advances;
- delete[] shaperItem->offsets;
+void TextLayoutCacheValue::deleteGlyphArrays(HB_ShaperItem& shaperItem) {
+ delete[] shaperItem.glyphs;
+ delete[] shaperItem.attributes;
+ delete[] shaperItem.advances;
+ delete[] shaperItem.offsets;
}
-void TextLayoutCacheValue::createGlyphArrays(HB_ShaperItem* shaperItem, int size) {
- shaperItem->glyphs = new HB_Glyph[size];
- shaperItem->attributes = new HB_GlyphAttributes[size];
- shaperItem->advances = new HB_Fixed[size];
- shaperItem->offsets = new HB_FixedPoint[size];
- shaperItem->num_glyphs = size;
-}
-
-void TextLayoutCacheValue::resetGlyphArrays(HB_ShaperItem* shaperItem) {
- int size = shaperItem->num_glyphs;
- // All the types here don't have pointers. It is safe to reset to
- // zero unless Harfbuzz breaks the compatibility in the future.
- memset(shaperItem->glyphs, 0, size * sizeof(shaperItem->glyphs[0]));
- memset(shaperItem->attributes, 0, size * sizeof(shaperItem->attributes[0]));
- memset(shaperItem->advances, 0, size * sizeof(shaperItem->advances[0]));
- memset(shaperItem->offsets, 0, size * sizeof(shaperItem->offsets[0]));
-}
-
-void TextLayoutCacheValue::getAdvances(size_t start, size_t count, jfloat* outAdvances) const {
- memcpy(outAdvances, mAdvances.array() + start, count * sizeof(jfloat));
-#if DEBUG_ADVANCES
- LOGD("getAdvances - start=%d count=%d", start, count);
- for (size_t i = 0; i < count; i++) {
- LOGD(" adv[%d] = %f", i, outAdvances[i]);
- }
-#endif
-}
-
-jfloat TextLayoutCacheValue::getTotalAdvance(size_t start, size_t count) const {
- jfloat outTotalAdvance = 0;
- for (size_t i = start; i < start + count; i++) {
- outTotalAdvance += mAdvances[i];
- }
-#if DEBUG_ADVANCES
- LOGD("getTotalAdvance - start=%d count=%d - total=%f", start, count, outTotalAdvance);
-#endif
- return outTotalAdvance;
-}
-
-void TextLayoutCacheValue::getGlyphsIndexAndCount(size_t start, size_t count, size_t* outStartIndex,
- size_t* outGlyphsCount) const {
- *outStartIndex = 0;
- if (count == 0) {
- *outGlyphsCount = 0;
- return;
- }
- *outStartIndex = mLogClusters[start];
- *outGlyphsCount = mLogClusters[start + count - 1] - mLogClusters[start] + 1;
-#if DEBUG_GLYPHS
- LOGD("getGlyphsIndexes - start=%d count=%d - startIndex=%d count=%d", start, count,
- *outStartIndex, *outGlyphsCount);
- for(size_t i = 0; i < mGlyphs.size(); i++) {
- LOGD("getGlyphs - all - glyph[%d] = %d", i, mGlyphs[i]);
- }
- for(size_t i = 0; i < mAdvances.size(); i++) {
- LOGD("getGlyphs - all - logcl[%d] = %d", i, mLogClusters[i]);
- }
-#endif
-}
-
-const jchar* TextLayoutCacheValue::getGlyphs(size_t startIndex, size_t count) {
- const jchar* glyphs = mGlyphs.array() + startIndex;
-#if DEBUG_GLYPHS
- LOGD("getGlyphs - with startIndex = %d count = %d", startIndex, count);
- for (size_t i = 0; i < count; i++) {
- LOGD("getGlyphs - result - glyph[%d] = %d", i, glyphs[i]);
- }
-#endif
- return glyphs;
+void TextLayoutCacheValue::createGlyphArrays(HB_ShaperItem& shaperItem, int size) {
+ shaperItem.glyphs = new HB_Glyph[size];
+ shaperItem.attributes = new HB_GlyphAttributes[size];
+ shaperItem.advances = new HB_Fixed[size];
+ shaperItem.offsets = new HB_FixedPoint[size];
+ shaperItem.num_glyphs = size;
}
} // namespace android
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 35dd6fd..580079d 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -68,12 +68,11 @@
public:
TextLayoutCacheKey();
- TextLayoutCacheKey(const SkPaint* paint, const UChar* text, size_t count, int dirFlags);
+ TextLayoutCacheKey(const SkPaint* paint, const UChar* text, size_t start, size_t count,
+ size_t contextCount, int dirFlags);
TextLayoutCacheKey(const TextLayoutCacheKey& other);
- bool operator<(const TextLayoutCacheKey& rhs) const;
-
/**
* We need to copy the text when we insert the key into the cache itself.
* We don't need to copy the text when we are only comparing keys.
@@ -85,10 +84,14 @@
*/
size_t getSize();
+ static int compare(const TextLayoutCacheKey& lhs, const TextLayoutCacheKey& rhs);
+
private:
const UChar* text; // if text is NULL, use textCopy
String16 textCopy;
+ size_t start;
size_t count;
+ size_t contextCount;
int dirFlags;
SkTypeface* typeface;
SkScalar textSize;
@@ -97,11 +100,18 @@
uint32_t flags;
SkPaint::Hinting hinting;
- inline const UChar* getText() const {
- return text ? text : textCopy.string();
- }
+ inline const UChar* getText() const { return text ? text : textCopy.string(); }
+
}; // TextLayoutCacheKey
+inline int strictly_order_type(const TextLayoutCacheKey& lhs, const TextLayoutCacheKey& rhs) {
+ return TextLayoutCacheKey::compare(lhs, rhs) < 0;
+}
+
+inline int compare_type(const TextLayoutCacheKey& lhs, const TextLayoutCacheKey& rhs) {
+ return TextLayoutCacheKey::compare(lhs, rhs);
+}
+
/*
* TextLayoutCacheValue is the Cache value
*/
@@ -112,32 +122,20 @@
void setElapsedTime(uint32_t time);
uint32_t getElapsedTime();
- void computeValues(SkPaint* paint, const UChar* chars, size_t contextCount, int dirFlags);
+ void computeValues(SkPaint* paint, const UChar* chars, size_t start, size_t count,
+ size_t contextCount, int dirFlags);
- void getAdvances(size_t start, size_t count, jfloat* outAdvances) const;
- jfloat getTotalAdvance(size_t start, size_t count) const;
- void getGlyphsIndexAndCount(size_t start, size_t count, size_t* outStartIndex,
- size_t* outGlyphsCount) const;
- const jchar* getGlyphs(size_t startIndex, size_t count);
+ inline const jfloat* getAdvances() const { return mAdvances.array(); }
+ inline size_t getAdvancesCount() const { return mAdvances.size(); }
+ inline jfloat getTotalAdvance() const { return mTotalAdvance; }
+ inline const jchar* getGlyphs() const { return mGlyphs.array(); }
+ inline size_t getGlyphsCount() const { return mGlyphs.size(); }
/**
* Get the size of the Cache entry
*/
size_t getSize();
- static void setupShaperItem(HB_ShaperItem* shaperItem, HB_FontRec* font, FontData* fontData,
- SkPaint* paint, const UChar* chars, size_t start, size_t count, size_t contextCount,
- bool isRTL);
-
- static void shapeWithHarfbuzz(HB_ShaperItem* shaperItem, HB_FontRec* font, FontData* fontData,
- SkPaint* paint, const UChar* chars, size_t start, size_t count, size_t contextCount,
- bool isRTL);
-
- static void computeValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
- size_t contextCount, int dirFlags,
- Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
- Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters);
-
private:
/**
* Advances vector
@@ -155,23 +153,31 @@
Vector<jchar> mGlyphs;
/**
- * Harfbuzz Log Clusters
- */
- Vector<unsigned short> mLogClusters;
-
- /**
* Time for computing the values (in milliseconds)
*/
uint32_t mElapsedTime;
- static void deleteGlyphArrays(HB_ShaperItem* shaperItem);
- static void createGlyphArrays(HB_ShaperItem* shaperItem, int size);
- static void resetGlyphArrays(HB_ShaperItem* shaperItem);
-
- static void computeRunValuesWithHarfbuzz(SkPaint* paint, const UChar* chars, size_t start,
- size_t count, size_t contextCount, bool isRTL,
+ static void computeValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
+ size_t start, size_t count, size_t contextCount, int dirFlags,
Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
- Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters);
+ Vector<jchar>* const outGlyphs);
+
+ static void computeRunValuesWithHarfbuzz(HB_ShaperItem& shaperItem, SkPaint* paint,
+ size_t start, size_t count, bool isRTL,
+ Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+ Vector<jchar>* const outGlyphs);
+
+ static void initShaperItem(HB_ShaperItem& shaperItem, HB_FontRec* font, FontData* fontData,
+ SkPaint* paint, const UChar* chars, size_t contextCount);
+
+ static void freeShaperItem(HB_ShaperItem& shaperItem);
+
+ static void shapeRun(HB_ShaperItem& shaperItem, size_t start, size_t count, bool isRTL);
+
+ static void deleteGlyphArrays(HB_ShaperItem& shaperItem);
+
+ static void createGlyphArrays(HB_ShaperItem& shaperItem, int size);
+
}; // TextLayoutCacheValue
/**
@@ -195,8 +201,8 @@
*/
void operator()(TextLayoutCacheKey& text, sp<TextLayoutCacheValue>& desc);
- sp<TextLayoutCacheValue> getValue(SkPaint* paint, const jchar* text, jint count,
- jint dirFlags);
+ sp<TextLayoutCacheValue> getValue(SkPaint* paint, const jchar* text, jint start, jint count,
+ jint contextCount, jint dirFlags);
/**
* Clear the cache
@@ -249,6 +255,7 @@
* Dump Cache statistics
*/
void dumpCacheStats();
+
}; // TextLayoutCache
} // namespace android
diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp
index 419e464..722aeea 100644
--- a/core/jni/android_database_CursorWindow.cpp
+++ b/core/jni/android_database_CursorWindow.cpp
@@ -24,6 +24,7 @@
#include <utils/Log.h>
#include <utils/String8.h>
#include <utils/String16.h>
+#include <utils/Unicode.h>
#include <stdio.h>
#include <string.h>
@@ -33,641 +34,511 @@
#include "sqlite3_exception.h"
#include "android_util_Binder.h"
-
namespace android {
-static jfieldID gWindowField;
-static jfieldID gBufferField;
-static jfieldID gSizeCopiedField;
+static struct {
+ jfieldID data;
+ jfieldID sizeCopied;
+} gCharArrayBufferClassInfo;
-#define GET_WINDOW(env, object) ((CursorWindow *)env->GetIntField(object, gWindowField))
-#define SET_WINDOW(env, object, window) (env->SetIntField(object, gWindowField, (int)window))
-#define SET_BUFFER(env, object, buf) (env->SetObjectField(object, gBufferField, buf))
-#define SET_SIZE_COPIED(env, object, size) (env->SetIntField(object, gSizeCopiedField, size))
+static jstring gEmptyString;
-CursorWindow * get_window_from_object(JNIEnv * env, jobject javaWindow)
-{
- return GET_WINDOW(env, javaWindow);
-}
-
-static jint native_init_empty(JNIEnv * env, jobject object, jint cursorWindowSize,
- jboolean localOnly)
-{
- uint8_t * data;
- size_t size;
- CursorWindow * window;
-
- window = new CursorWindow(cursorWindowSize);
- if (!window) {
- return 1;
- }
- if (!window->initBuffer(localOnly)) {
- delete window;
- return 1;
- }
-
- LOG_WINDOW("native_init_empty: window = %p", window);
- SET_WINDOW(env, object, window);
- return 0;
-}
-
-static jint native_init_memory(JNIEnv * env, jobject object, jobject memObj)
-{
- sp<IMemory> memory = interface_cast<IMemory>(ibinderForJavaObject(env, memObj));
- if (memory == NULL) {
- jniThrowException(env, "java/lang/IllegalStateException", "Couldn't get native binder");
- return 1;
- }
-
- CursorWindow * window = new CursorWindow();
- if (!window) {
- return 1;
- }
- if (!window->setMemory(memory)) {
- delete window;
- return 1;
- }
-
- LOG_WINDOW("native_init_memory: numRows = %d, numColumns = %d, window = %p", window->getNumRows(), window->getNumColumns(), window);
- SET_WINDOW(env, object, window);
- return 0;
-}
-
-static jobject native_getBinder(JNIEnv * env, jobject object)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (window) {
- sp<IMemory> memory = window->getMemory();
- if (memory != NULL) {
- sp<IBinder> binder = memory->asBinder();
- return javaObjectForIBinder(env, binder);
- }
- }
- return NULL;
-}
-
-static void native_clear(JNIEnv * env, jobject object)
-{
- CursorWindow * window = GET_WINDOW(env, object);
-LOG_WINDOW("Clearing window %p", window);
- if (window == NULL) {
- jniThrowException(env, "java/lang/IllegalStateException", "clear() called after close()");
- return;
- }
- window->clear();
-}
-
-static void native_close(JNIEnv * env, jobject object)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (window) {
-LOG_WINDOW("Closing window %p", window);
- delete window;
- SET_WINDOW(env, object, 0);
- }
-}
-
-static void throwExceptionWithRowCol(JNIEnv * env, jint row, jint column)
-{
- char buf[200];
- snprintf(buf, sizeof(buf), "Couldn't read row %d, col %d from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it",
+static void throwExceptionWithRowCol(JNIEnv* env, jint row, jint column) {
+ String8 msg;
+ msg.appendFormat("Couldn't read row %d, col %d from CursorWindow. "
+ "Make sure the Cursor is initialized correctly before accessing data from it.",
row, column);
- jniThrowException(env, "java/lang/IllegalStateException", buf);
+ jniThrowException(env, "java/lang/IllegalStateException", msg.string());
}
-static void throwUnknowTypeException(JNIEnv * env, jint type)
-{
- char buf[80];
- snprintf(buf, sizeof(buf), "UNKNOWN type %d", type);
- jniThrowException(env, "java/lang/IllegalStateException", buf);
+static void throwUnknownTypeException(JNIEnv * env, jint type) {
+ String8 msg;
+ msg.appendFormat("UNKNOWN type %d", type);
+ jniThrowException(env, "java/lang/IllegalStateException", msg.string());
}
-static jlong getLong_native(JNIEnv * env, jobject object, jint row, jint column)
-{
- int32_t err;
- CursorWindow * window = GET_WINDOW(env, object);
-LOG_WINDOW("Getting long for %d,%d from %p", row, column, window);
+static jint nativeCreate(JNIEnv* env, jclass clazz,
+ jstring nameObj, jint cursorWindowSize, jboolean localOnly) {
+ String8 name;
+ if (nameObj) {
+ const char* nameStr = env->GetStringUTFChars(nameObj, NULL);
+ name.setTo(nameStr);
+ env->ReleaseStringUTFChars(nameObj, nameStr);
+ }
+ if (name.size() == 0) {
+ name.setTo("<unnamed>");
+ }
- field_slot_t field;
- err = window->read_field_slot(row, column, &field);
- if (err != 0) {
- throwExceptionWithRowCol(env, row, column);
+ CursorWindow* window;
+ status_t status = CursorWindow::create(name, cursorWindowSize, localOnly, &window);
+ if (status || !window) {
+ LOGE("Could not allocate CursorWindow '%s' of size %d due to error %d.",
+ name.string(), cursorWindowSize, status);
return 0;
}
- uint8_t type = field.type;
- if (type == FIELD_TYPE_INTEGER) {
- int64_t value;
- if (window->getLong(row, column, &value)) {
- return value;
- }
- return 0;
- } else if (type == FIELD_TYPE_STRING) {
- uint32_t size = field.data.buffer.size;
- if (size > 0) {
-#if WINDOW_STORAGE_UTF8
- return strtoll((char const *)window->offsetToPtr(field.data.buffer.offset), NULL, 0);
-#else
- String8 ascii((char16_t *) window->offsetToPtr(field.data.buffer.offset), size / 2);
- char const * str = ascii.string();
- return strtoll(str, NULL, 0);
-#endif
- } else {
- return 0;
- }
- } else if (type == FIELD_TYPE_FLOAT) {
- double value;
- if (window->getDouble(row, column, &value)) {
- return value;
- }
- return 0;
- } else if (type == FIELD_TYPE_NULL) {
- return 0;
- } else if (type == FIELD_TYPE_BLOB) {
- throw_sqlite3_exception(env, "Unable to convert BLOB to long");
- return 0;
- } else {
- throwUnknowTypeException(env, type);
+ LOG_WINDOW("nativeInitializeEmpty: window = %p", window);
+ return reinterpret_cast<jint>(window);
+}
+
+static jint nativeCreateFromParcel(JNIEnv* env, jclass clazz, jobject parcelObj) {
+ Parcel* parcel = parcelForJavaObject(env, parcelObj);
+
+ CursorWindow* window;
+ status_t status = CursorWindow::createFromParcel(parcel, &window);
+ if (status || !window) {
+ LOGE("Could not create CursorWindow from Parcel due to error %d.", status);
return 0;
}
+
+ LOG_WINDOW("nativeInitializeFromBinder: numRows = %d, numColumns = %d, window = %p",
+ window->getNumRows(), window->getNumColumns(), window);
+ return reinterpret_cast<jint>(window);
}
-static jbyteArray getBlob_native(JNIEnv* env, jobject object, jint row, jint column)
-{
- int32_t err;
- CursorWindow * window = GET_WINDOW(env, object);
-LOG_WINDOW("Getting blob for %d,%d from %p", row, column, window);
-
- field_slot_t field;
- err = window->read_field_slot(row, column, &field);
- if (err != 0) {
- throwExceptionWithRowCol(env, row, column);
- return NULL;
- }
-
- uint8_t type = field.type;
- if (type == FIELD_TYPE_BLOB || type == FIELD_TYPE_STRING) {
- jbyteArray byteArray = env->NewByteArray(field.data.buffer.size);
- if (!byteArray) {
- throw_sqlite3_exception(env, "Native could not create new byte[]");
- return NULL;
- }
- env->SetByteArrayRegion(byteArray, 0, field.data.buffer.size,
- (const jbyte*)window->offsetToPtr(field.data.buffer.offset));
- return byteArray;
- } else if (type == FIELD_TYPE_INTEGER) {
- throw_sqlite3_exception(env, "INTEGER data in getBlob_native ");
- } else if (type == FIELD_TYPE_FLOAT) {
- throw_sqlite3_exception(env, "FLOAT data in getBlob_native ");
- } else if (type == FIELD_TYPE_NULL) {
- // do nothing
- } else {
- throwUnknowTypeException(env, type);
- }
- return NULL;
-}
-
-static jstring getString_native(JNIEnv* env, jobject object, jint row, jint column)
-{
- int32_t err;
- CursorWindow * window = GET_WINDOW(env, object);
-LOG_WINDOW("Getting string for %d,%d from %p", row, column, window);
-
- field_slot_t field;
- err = window->read_field_slot(row, column, &field);
- if (err != 0) {
- throwExceptionWithRowCol(env, row, column);
- return NULL;
- }
-
- uint8_t type = field.type;
- if (type == FIELD_TYPE_STRING) {
- uint32_t size = field.data.buffer.size;
- if (size > 0) {
-#if WINDOW_STORAGE_UTF8
- // Pass size - 1 since the UTF8 is null terminated and we don't want a null terminator on the UTF16 string
- String16 utf16((char const *)window->offsetToPtr(field.data.buffer.offset), size - 1);
- return env->NewString((jchar const *)utf16.string(), utf16.size());
-#else
- return env->NewString((jchar const *)window->offsetToPtr(field.data.buffer.offset), size / 2);
-#endif
- } else {
- return env->NewStringUTF("");
- }
- } else if (type == FIELD_TYPE_INTEGER) {
- int64_t value;
- if (window->getLong(row, column, &value)) {
- char buf[32];
- snprintf(buf, sizeof(buf), "%lld", value);
- return env->NewStringUTF(buf);
- }
- return NULL;
- } else if (type == FIELD_TYPE_FLOAT) {
- double value;
- if (window->getDouble(row, column, &value)) {
- char buf[32];
- snprintf(buf, sizeof(buf), "%g", value);
- return env->NewStringUTF(buf);
- }
- return NULL;
- } else if (type == FIELD_TYPE_NULL) {
- return NULL;
- } else if (type == FIELD_TYPE_BLOB) {
- throw_sqlite3_exception(env, "Unable to convert BLOB to string");
- return NULL;
- } else {
- throwUnknowTypeException(env, type);
- return NULL;
+static void nativeDispose(JNIEnv* env, jclass clazz, jint windowPtr) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ if (window) {
+ LOG_WINDOW("Closing window %p", window);
+ delete window;
}
}
-/**
- * Use this only to convert characters that are known to be within the
- * 0-127 range for direct conversion to UTF-16
- */
-static jint charToJchar(const char* src, jchar* dst, jint bufferSize)
-{
- int32_t len = strlen(src);
+static void nativeWriteToParcel(JNIEnv * env, jclass clazz, jint windowPtr,
+ jobject parcelObj) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ Parcel* parcel = parcelForJavaObject(env, parcelObj);
- if (bufferSize < len) {
- len = bufferSize;
- }
-
- for (int i = 0; i < len; i++) {
- *dst++ = (*src++ & 0x7F);
- }
- return len;
-}
-
-static jcharArray copyStringToBuffer_native(JNIEnv* env, jobject object, jint row,
- jint column, jint bufferSize, jobject buf)
-{
- int32_t err;
- CursorWindow * window = GET_WINDOW(env, object);
-LOG_WINDOW("Copying string for %d,%d from %p", row, column, window);
-
- field_slot_t field;
- err = window->read_field_slot(row, column, &field);
- if (err != 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "Unable to get field slot");
- return NULL;
- }
-
- jcharArray buffer = (jcharArray)env->GetObjectField(buf, gBufferField);
- if (buffer == NULL) {
- jniThrowException(env, "java/lang/IllegalStateException", "buf should not be null");
- return NULL;
- }
- jchar* dst = env->GetCharArrayElements(buffer, NULL);
- uint8_t type = field.type;
- uint32_t sizeCopied = 0;
- jcharArray newArray = NULL;
- if (type == FIELD_TYPE_STRING) {
- uint32_t size = field.data.buffer.size;
- if (size > 0) {
-#if WINDOW_STORAGE_UTF8
- // Pass size - 1 since the UTF8 is null terminated and we don't want a null terminator on the UTF16 string
- String16 utf16((char const *)window->offsetToPtr(field.data.buffer.offset), size - 1);
- int32_t strSize = utf16.size();
- if (strSize > bufferSize || dst == NULL) {
- newArray = env->NewCharArray(strSize);
- env->SetCharArrayRegion(newArray, 0, strSize, (jchar const *)utf16.string());
- } else {
- memcpy(dst, (jchar const *)utf16.string(), strSize * 2);
- }
- sizeCopied = strSize;
-#else
- sizeCopied = size/2 + size % 2;
- if (size > bufferSize * 2 || dst == NULL) {
- newArray = env->NewCharArray(sizeCopied);
- memcpy(newArray, (jchar const *)window->offsetToPtr(field.data.buffer.offset), size);
- } else {
- memcpy(dst, (jchar const *)window->offsetToPtr(field.data.buffer.offset), size);
- }
-#endif
- }
- } else if (type == FIELD_TYPE_INTEGER) {
- int64_t value;
- if (window->getLong(row, column, &value)) {
- char buf[32];
- int len;
- snprintf(buf, sizeof(buf), "%lld", value);
- sizeCopied = charToJchar(buf, dst, bufferSize);
- }
- } else if (type == FIELD_TYPE_FLOAT) {
- double value;
- if (window->getDouble(row, column, &value)) {
- char tempbuf[32];
- snprintf(tempbuf, sizeof(tempbuf), "%g", value);
- sizeCopied = charToJchar(tempbuf, dst, bufferSize);
- }
- } else if (type == FIELD_TYPE_NULL) {
- } else if (type == FIELD_TYPE_BLOB) {
- throw_sqlite3_exception(env, "Unable to convert BLOB to string");
- } else {
- LOGE("Unknown field type %d", type);
- throw_sqlite3_exception(env, "UNKNOWN type in copyStringToBuffer_native()");
- }
- SET_SIZE_COPIED(env, buf, sizeCopied);
- env->ReleaseCharArrayElements(buffer, dst, JNI_OK);
- return newArray;
-}
-
-static jdouble getDouble_native(JNIEnv* env, jobject object, jint row, jint column)
-{
- int32_t err;
- CursorWindow * window = GET_WINDOW(env, object);
-LOG_WINDOW("Getting double for %d,%d from %p", row, column, window);
-
- field_slot_t field;
- err = window->read_field_slot(row, column, &field);
- if (err != 0) {
- throwExceptionWithRowCol(env, row, column);
- return 0.0;
- }
-
- uint8_t type = field.type;
- if (type == FIELD_TYPE_FLOAT) {
- double value;
- if (window->getDouble(row, column, &value)) {
- return value;
- }
- return 0.0;
- } else if (type == FIELD_TYPE_STRING) {
- uint32_t size = field.data.buffer.size;
- if (size > 0) {
-#if WINDOW_STORAGE_UTF8
- return strtod((char const *)window->offsetToPtr(field.data.buffer.offset), NULL);
-#else
- String8 ascii((char16_t *) window->offsetToPtr(field.data.buffer.offset), size / 2);
- char const * str = ascii.string();
- return strtod(str, NULL);
-#endif
- } else {
- return 0.0;
- }
- } else if (type == FIELD_TYPE_INTEGER) {
- int64_t value;
- if (window->getLong(row, column, &value)) {
- return (double) value;
- }
- return 0.0;
- } else if (type == FIELD_TYPE_NULL) {
- return 0.0;
- } else if (type == FIELD_TYPE_BLOB) {
- throw_sqlite3_exception(env, "Unable to convert BLOB to double");
- return 0.0;
- } else {
- throwUnknowTypeException(env, type);
- return 0.0;
+ status_t status = window->writeToParcel(parcel);
+ if (status) {
+ String8 msg;
+ msg.appendFormat("Could not write CursorWindow to Parcel due to error %d.", status);
+ jniThrowRuntimeException(env, msg.string());
}
}
-bool isNull_native(CursorWindow *window, jint row, jint column)
-{
- LOG_WINDOW("Checking for NULL at %d,%d from %p", row, column, window);
-
- bool isNull;
- if (window->getNull(row, column, &isNull)) {
- return isNull;
+static void nativeClear(JNIEnv * env, jclass clazz, jint windowPtr) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ LOG_WINDOW("Clearing window %p", window);
+ status_t status = window->clear();
+ if (status) {
+ LOG_WINDOW("Could not clear window. error=%d", status);
}
-
- //TODO throw execption?
- return true;
}
-static jint getNumRows(JNIEnv * env, jobject object)
-{
- CursorWindow * window = GET_WINDOW(env, object);
+static jint nativeGetNumRows(JNIEnv* env, jclass clazz, jint windowPtr) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
return window->getNumRows();
}
-static jboolean setNumColumns(JNIEnv * env, jobject object, jint columnNum)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- return window->setNumColumns(columnNum);
+static jboolean nativeSetNumColumns(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint columnNum) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ status_t status = window->setNumColumns(columnNum);
+ return status == OK;
}
-static jboolean allocRow(JNIEnv * env, jobject object)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- return window->allocRow() != NULL;
+static jboolean nativeAllocRow(JNIEnv* env, jclass clazz, jint windowPtr) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ status_t status = window->allocRow();
+ return status == OK;
}
-static jboolean putBlob_native(JNIEnv * env, jobject object, jbyteArray value, jint row, jint col)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (!value) {
- LOG_WINDOW("How did a null value send to here");
- return false;
- }
- field_slot_t * fieldSlot = window->getFieldSlotWithCheck(row, col);
- if (fieldSlot == NULL) {
- LOG_WINDOW(" getFieldSlotWithCheck error ");
- return false;
- }
-
- jint len = env->GetArrayLength(value);
- int offset = window->alloc(len);
- if (!offset) {
- LOG_WINDOW("Failed allocating %u bytes", len);
- return false;
- }
- jbyte * bytes = env->GetByteArrayElements(value, NULL);
- window->copyIn(offset, (uint8_t const *)bytes, len);
-
- // This must be updated after the call to alloc(), since that
- // may move the field around in the window
- fieldSlot->type = FIELD_TYPE_BLOB;
- fieldSlot->data.buffer.offset = offset;
- fieldSlot->data.buffer.size = len;
- env->ReleaseByteArrayElements(value, bytes, JNI_ABORT);
- LOG_WINDOW("%d,%d is BLOB with %u bytes @ %d", row, col, len, offset);
- return true;
-}
-
-static jboolean putString_native(JNIEnv * env, jobject object, jstring value, jint row, jint col)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (!value) {
- LOG_WINDOW("How did a null value send to here");
- return false;
- }
- field_slot_t * fieldSlot = window->getFieldSlotWithCheck(row, col);
- if (fieldSlot == NULL) {
- LOG_WINDOW(" getFieldSlotWithCheck error ");
- return false;
- }
-
-#if WINDOW_STORAGE_UTF8
- int len = env->GetStringUTFLength(value) + 1;
- char const * valStr = env->GetStringUTFChars(value, NULL);
-#else
- int len = env->GetStringLength(value);
- // GetStringLength return number of chars and one char takes 2 bytes
- len *= 2;
- const jchar* valStr = env->GetStringChars(value, NULL);
-#endif
- if (!valStr) {
- LOG_WINDOW("value can't be transfer to UTFChars");
- return false;
- }
-
- int offset = window->alloc(len);
- if (!offset) {
- LOG_WINDOW("Failed allocating %u bytes", len);
-#if WINDOW_STORAGE_UTF8
- env->ReleaseStringUTFChars(value, valStr);
-#else
- env->ReleaseStringChars(value, valStr);
-#endif
- return false;
- }
-
- window->copyIn(offset, (uint8_t const *)valStr, len);
-
- // This must be updated after the call to alloc(), since that
- // may move the field around in the window
- fieldSlot->type = FIELD_TYPE_STRING;
- fieldSlot->data.buffer.offset = offset;
- fieldSlot->data.buffer.size = len;
-
- LOG_WINDOW("%d,%d is TEXT with %u bytes @ %d", row, col, len, offset);
-#if WINDOW_STORAGE_UTF8
- env->ReleaseStringUTFChars(value, valStr);
-#else
- env->ReleaseStringChars(value, valStr);
-#endif
-
- return true;
-}
-
-static jboolean putLong_native(JNIEnv * env, jobject object, jlong value, jint row, jint col)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (!window->putLong(row, col, value)) {
- LOG_WINDOW(" getFieldSlotWithCheck error ");
- return false;
- }
-
- LOG_WINDOW("%d,%d is INTEGER 0x%016llx", row, col, value);
-
- return true;
-}
-
-static jboolean putDouble_native(JNIEnv * env, jobject object, jdouble value, jint row, jint col)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (!window->putDouble(row, col, value)) {
- LOG_WINDOW(" getFieldSlotWithCheck error ");
- return false;
- }
-
- LOG_WINDOW("%d,%d is FLOAT %lf", row, col, value);
-
- return true;
-}
-
-static jboolean putNull_native(JNIEnv * env, jobject object, jint row, jint col)
-{
- CursorWindow * window = GET_WINDOW(env, object);
- if (!window->putNull(row, col)) {
- LOG_WINDOW(" getFieldSlotWithCheck error ");
- return false;
- }
-
- LOG_WINDOW("%d,%d is NULL", row, col);
-
- return true;
-}
-
-// free the last row
-static void freeLastRow(JNIEnv * env, jobject object) {
- CursorWindow * window = GET_WINDOW(env, object);
+static void nativeFreeLastRow(JNIEnv* env, jclass clazz, jint windowPtr) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
window->freeLastRow();
}
-static jint getType_native(JNIEnv* env, jobject object, jint row, jint column)
-{
- int32_t err;
- CursorWindow * window = GET_WINDOW(env, object);
+static jint nativeGetType(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
LOG_WINDOW("returning column type affinity for %d,%d from %p", row, column, window);
- if (isNull_native(window, row, column)) {
- return FIELD_TYPE_NULL;
+ CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
+ if (!fieldSlot) {
+ // FIXME: This is really broken but we have CTS tests that depend
+ // on this legacy behavior.
+ //throwExceptionWithRowCol(env, row, column);
+ return CursorWindow::FIELD_TYPE_NULL;
}
+ return window->getFieldSlotType(fieldSlot);
+}
- field_slot_t field;
- err = window->read_field_slot(row, column, &field);
- if (err != 0) {
+static jbyteArray nativeGetBlob(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ LOG_WINDOW("Getting blob for %d,%d from %p", row, column, window);
+
+ CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
+ if (!fieldSlot) {
throwExceptionWithRowCol(env, row, column);
return NULL;
}
- return field.type;
+ int32_t type = window->getFieldSlotType(fieldSlot);
+ if (type == CursorWindow::FIELD_TYPE_BLOB || type == CursorWindow::FIELD_TYPE_STRING) {
+ size_t size;
+ const void* value = window->getFieldSlotValueBlob(fieldSlot, &size);
+ jbyteArray byteArray = env->NewByteArray(size);
+ if (!byteArray) {
+ env->ExceptionClear();
+ throw_sqlite3_exception(env, "Native could not create new byte[]");
+ return NULL;
+ }
+ env->SetByteArrayRegion(byteArray, 0, size, static_cast<const jbyte*>(value));
+ return byteArray;
+ } else if (type == CursorWindow::FIELD_TYPE_INTEGER) {
+ throw_sqlite3_exception(env, "INTEGER data in nativeGetBlob ");
+ } else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
+ throw_sqlite3_exception(env, "FLOAT data in nativeGetBlob ");
+ } else if (type == CursorWindow::FIELD_TYPE_NULL) {
+ // do nothing
+ } else {
+ throwUnknownTypeException(env, type);
+ }
+ return NULL;
+}
+
+static jstring nativeGetString(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ LOG_WINDOW("Getting string for %d,%d from %p", row, column, window);
+
+ CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
+ if (!fieldSlot) {
+ throwExceptionWithRowCol(env, row, column);
+ return NULL;
+ }
+
+ int32_t type = window->getFieldSlotType(fieldSlot);
+ if (type == CursorWindow::FIELD_TYPE_STRING) {
+ size_t sizeIncludingNull;
+ const char* value = window->getFieldSlotValueString(fieldSlot, &sizeIncludingNull);
+ if (sizeIncludingNull <= 1) {
+ return gEmptyString;
+ }
+ // Convert to UTF-16 here instead of calling NewStringUTF. NewStringUTF
+ // doesn't like UTF-8 strings with high codepoints. It actually expects
+ // Modified UTF-8 with encoded surrogate pairs.
+ String16 utf16(value, sizeIncludingNull - 1);
+ return env->NewString(reinterpret_cast<const jchar*>(utf16.string()), utf16.size());
+ } else if (type == CursorWindow::FIELD_TYPE_INTEGER) {
+ int64_t value = window->getFieldSlotValueLong(fieldSlot);
+ char buf[32];
+ snprintf(buf, sizeof(buf), "%lld", value);
+ return env->NewStringUTF(buf);
+ } else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
+ double value = window->getFieldSlotValueDouble(fieldSlot);
+ char buf[32];
+ snprintf(buf, sizeof(buf), "%g", value);
+ return env->NewStringUTF(buf);
+ } else if (type == CursorWindow::FIELD_TYPE_NULL) {
+ return NULL;
+ } else if (type == CursorWindow::FIELD_TYPE_BLOB) {
+ throw_sqlite3_exception(env, "Unable to convert BLOB to string");
+ return NULL;
+ } else {
+ throwUnknownTypeException(env, type);
+ return NULL;
+ }
+}
+
+static jcharArray allocCharArrayBuffer(JNIEnv* env, jobject bufferObj, size_t size) {
+ jcharArray dataObj = jcharArray(env->GetObjectField(bufferObj,
+ gCharArrayBufferClassInfo.data));
+ if (dataObj && size) {
+ jsize capacity = env->GetArrayLength(dataObj);
+ if (size_t(capacity) < size) {
+ env->DeleteLocalRef(dataObj);
+ dataObj = NULL;
+ }
+ }
+ if (!dataObj) {
+ jsize capacity = size;
+ if (capacity < 64) {
+ capacity = 64;
+ }
+ dataObj = env->NewCharArray(capacity); // might throw OOM
+ if (dataObj) {
+ env->SetObjectField(bufferObj, gCharArrayBufferClassInfo.data, dataObj);
+ }
+ }
+ return dataObj;
+}
+
+static void fillCharArrayBufferUTF(JNIEnv* env, jobject bufferObj,
+ const char* str, size_t len) {
+ ssize_t size = utf8_to_utf16_length(reinterpret_cast<const uint8_t*>(str), len);
+ if (size < 0) {
+ size = 0; // invalid UTF8 string
+ }
+ jcharArray dataObj = allocCharArrayBuffer(env, bufferObj, size);
+ if (dataObj) {
+ if (size) {
+ jchar* data = static_cast<jchar*>(env->GetPrimitiveArrayCritical(dataObj, NULL));
+ utf8_to_utf16_no_null_terminator(reinterpret_cast<const uint8_t*>(str), len,
+ reinterpret_cast<char16_t*>(data));
+ env->ReleasePrimitiveArrayCritical(dataObj, data, 0);
+ }
+ env->SetIntField(bufferObj, gCharArrayBufferClassInfo.sizeCopied, size);
+ }
+}
+
+static void clearCharArrayBuffer(JNIEnv* env, jobject bufferObj) {
+ jcharArray dataObj = allocCharArrayBuffer(env, bufferObj, 0);
+ if (dataObj) {
+ env->SetIntField(bufferObj, gCharArrayBufferClassInfo.sizeCopied, 0);
+ }
+}
+
+static void nativeCopyStringToBuffer(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column, jobject bufferObj) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ LOG_WINDOW("Copying string for %d,%d from %p", row, column, window);
+
+ CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
+ if (!fieldSlot) {
+ throwExceptionWithRowCol(env, row, column);
+ return;
+ }
+
+ int32_t type = window->getFieldSlotType(fieldSlot);
+ if (type == CursorWindow::FIELD_TYPE_STRING) {
+ size_t sizeIncludingNull;
+ const char* value = window->getFieldSlotValueString(fieldSlot, &sizeIncludingNull);
+ if (sizeIncludingNull > 1) {
+ fillCharArrayBufferUTF(env, bufferObj, value, sizeIncludingNull - 1);
+ } else {
+ clearCharArrayBuffer(env, bufferObj);
+ }
+ } else if (type == CursorWindow::FIELD_TYPE_INTEGER) {
+ int64_t value = window->getFieldSlotValueLong(fieldSlot);
+ char buf[32];
+ snprintf(buf, sizeof(buf), "%lld", value);
+ fillCharArrayBufferUTF(env, bufferObj, buf, strlen(buf));
+ } else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
+ double value = window->getFieldSlotValueDouble(fieldSlot);
+ char buf[32];
+ snprintf(buf, sizeof(buf), "%g", value);
+ fillCharArrayBufferUTF(env, bufferObj, buf, strlen(buf));
+ } else if (type == CursorWindow::FIELD_TYPE_NULL) {
+ clearCharArrayBuffer(env, bufferObj);
+ } else if (type == CursorWindow::FIELD_TYPE_BLOB) {
+ throw_sqlite3_exception(env, "Unable to convert BLOB to string");
+ } else {
+ throwUnknownTypeException(env, type);
+ }
+}
+
+static jlong nativeGetLong(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ LOG_WINDOW("Getting long for %d,%d from %p", row, column, window);
+
+ CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
+ if (!fieldSlot) {
+ throwExceptionWithRowCol(env, row, column);
+ return 0;
+ }
+
+ int32_t type = window->getFieldSlotType(fieldSlot);
+ if (type == CursorWindow::FIELD_TYPE_INTEGER) {
+ return window->getFieldSlotValueLong(fieldSlot);
+ } else if (type == CursorWindow::FIELD_TYPE_STRING) {
+ size_t sizeIncludingNull;
+ const char* value = window->getFieldSlotValueString(fieldSlot, &sizeIncludingNull);
+ return sizeIncludingNull > 1 ? strtoll(value, NULL, 0) : 0L;
+ } else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
+ return jlong(window->getFieldSlotValueDouble(fieldSlot));
+ } else if (type == CursorWindow::FIELD_TYPE_NULL) {
+ return 0;
+ } else if (type == CursorWindow::FIELD_TYPE_BLOB) {
+ throw_sqlite3_exception(env, "Unable to convert BLOB to long");
+ return 0;
+ } else {
+ throwUnknownTypeException(env, type);
+ return 0;
+ }
+}
+
+static jdouble nativeGetDouble(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ LOG_WINDOW("Getting double for %d,%d from %p", row, column, window);
+
+ CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
+ if (!fieldSlot) {
+ throwExceptionWithRowCol(env, row, column);
+ return 0.0;
+ }
+
+ int32_t type = window->getFieldSlotType(fieldSlot);
+ if (type == CursorWindow::FIELD_TYPE_FLOAT) {
+ return window->getFieldSlotValueDouble(fieldSlot);
+ } else if (type == CursorWindow::FIELD_TYPE_STRING) {
+ size_t sizeIncludingNull;
+ const char* value = window->getFieldSlotValueString(fieldSlot, &sizeIncludingNull);
+ return sizeIncludingNull > 1 ? strtod(value, NULL) : 0.0;
+ } else if (type == CursorWindow::FIELD_TYPE_INTEGER) {
+ return jdouble(window->getFieldSlotValueLong(fieldSlot));
+ } else if (type == CursorWindow::FIELD_TYPE_NULL) {
+ return 0.0;
+ } else if (type == CursorWindow::FIELD_TYPE_BLOB) {
+ throw_sqlite3_exception(env, "Unable to convert BLOB to double");
+ return 0.0;
+ } else {
+ throwUnknownTypeException(env, type);
+ return 0.0;
+ }
+}
+
+static jboolean nativePutBlob(JNIEnv* env, jclass clazz, jint windowPtr,
+ jbyteArray valueObj, jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ jsize len = env->GetArrayLength(valueObj);
+
+ void* value = env->GetPrimitiveArrayCritical(valueObj, NULL);
+ status_t status = window->putBlob(row, column, value, len);
+ env->ReleasePrimitiveArrayCritical(valueObj, value, JNI_ABORT);
+
+ if (status) {
+ LOG_WINDOW("Failed to put blob. error=%d", status);
+ return false;
+ }
+
+ LOG_WINDOW("%d,%d is BLOB with %u bytes", row, column, len);
+ return true;
+}
+
+static jboolean nativePutString(JNIEnv* env, jclass clazz, jint windowPtr,
+ jstring valueObj, jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+
+ size_t sizeIncludingNull = env->GetStringUTFLength(valueObj) + 1;
+ const char* valueStr = env->GetStringUTFChars(valueObj, NULL);
+ if (!valueStr) {
+ LOG_WINDOW("value can't be transferred to UTFChars");
+ return false;
+ }
+ status_t status = window->putString(row, column, valueStr, sizeIncludingNull);
+ env->ReleaseStringUTFChars(valueObj, valueStr);
+
+ if (status) {
+ LOG_WINDOW("Failed to put string. error=%d", status);
+ return false;
+ }
+
+ LOG_WINDOW("%d,%d is TEXT with %u bytes", row, column, sizeIncludingNull);
+ return true;
+}
+
+static jboolean nativePutLong(JNIEnv* env, jclass clazz, jint windowPtr,
+ jlong value, jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ status_t status = window->putLong(row, column, value);
+
+ if (status) {
+ LOG_WINDOW("Failed to put long. error=%d", status);
+ return false;
+ }
+
+ LOG_WINDOW("%d,%d is INTEGER 0x%016llx", row, column, value);
+ return true;
+}
+
+static jboolean nativePutDouble(JNIEnv* env, jclass clazz, jint windowPtr,
+ jdouble value, jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ status_t status = window->putDouble(row, column, value);
+
+ if (status) {
+ LOG_WINDOW("Failed to put double. error=%d", status);
+ return false;
+ }
+
+ LOG_WINDOW("%d,%d is FLOAT %lf", row, column, value);
+ return true;
+}
+
+static jboolean nativePutNull(JNIEnv* env, jclass clazz, jint windowPtr,
+ jint row, jint column) {
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
+ status_t status = window->putNull(row, column);
+
+ if (status) {
+ LOG_WINDOW("Failed to put null. error=%d", status);
+ return false;
+ }
+
+ LOG_WINDOW("%d,%d is NULL", row, column);
+ return true;
}
static JNINativeMethod sMethods[] =
{
- /* name, signature, funcPtr */
- {"native_init", "(IZ)I", (void *)native_init_empty},
- {"native_init", "(Landroid/os/IBinder;)I", (void *)native_init_memory},
- {"native_getBinder", "()Landroid/os/IBinder;", (void *)native_getBinder},
- {"native_clear", "()V", (void *)native_clear},
- {"close_native", "()V", (void *)native_close},
- {"getLong_native", "(II)J", (void *)getLong_native},
- {"getBlob_native", "(II)[B", (void *)getBlob_native},
- {"getString_native", "(II)Ljava/lang/String;", (void *)getString_native},
- {"copyStringToBuffer_native", "(IIILandroid/database/CharArrayBuffer;)[C", (void *)copyStringToBuffer_native},
- {"getDouble_native", "(II)D", (void *)getDouble_native},
- {"getNumRows_native", "()I", (void *)getNumRows},
- {"setNumColumns_native", "(I)Z", (void *)setNumColumns},
- {"allocRow_native", "()Z", (void *)allocRow},
- {"putBlob_native", "([BII)Z", (void *)putBlob_native},
- {"putString_native", "(Ljava/lang/String;II)Z", (void *)putString_native},
- {"putLong_native", "(JII)Z", (void *)putLong_native},
- {"putDouble_native", "(DII)Z", (void *)putDouble_native},
- {"freeLastRow_native", "()V", (void *)freeLastRow},
- {"putNull_native", "(II)Z", (void *)putNull_native},
- {"getType_native", "(II)I", (void *)getType_native},
+ /* name, signature, funcPtr */
+ { "nativeCreate", "(Ljava/lang/String;IZ)I",
+ (void*)nativeCreate },
+ { "nativeCreateFromParcel", "(Landroid/os/Parcel;)I",
+ (void*)nativeCreateFromParcel },
+ { "nativeDispose", "(I)V",
+ (void*)nativeDispose },
+ { "nativeWriteToParcel", "(ILandroid/os/Parcel;)V",
+ (void*)nativeWriteToParcel },
+ { "nativeClear", "(I)V",
+ (void*)nativeClear },
+ { "nativeGetNumRows", "(I)I",
+ (void*)nativeGetNumRows },
+ { "nativeSetNumColumns", "(II)Z",
+ (void*)nativeSetNumColumns },
+ { "nativeAllocRow", "(I)Z",
+ (void*)nativeAllocRow },
+ { "nativeFreeLastRow", "(I)V",
+ (void*)nativeFreeLastRow },
+ { "nativeGetType", "(III)I",
+ (void*)nativeGetType },
+ { "nativeGetBlob", "(III)[B",
+ (void*)nativeGetBlob },
+ { "nativeGetString", "(III)Ljava/lang/String;",
+ (void*)nativeGetString },
+ { "nativeGetLong", "(III)J",
+ (void*)nativeGetLong },
+ { "nativeGetDouble", "(III)D",
+ (void*)nativeGetDouble },
+ { "nativeCopyStringToBuffer", "(IIILandroid/database/CharArrayBuffer;)V",
+ (void*)nativeCopyStringToBuffer },
+ { "nativePutBlob", "(I[BII)Z",
+ (void*)nativePutBlob },
+ { "nativePutString", "(ILjava/lang/String;II)Z",
+ (void*)nativePutString },
+ { "nativePutLong", "(IJII)Z",
+ (void*)nativePutLong },
+ { "nativePutDouble", "(IDII)Z",
+ (void*)nativePutDouble },
+ { "nativePutNull", "(III)Z",
+ (void*)nativePutNull },
};
+#define FIND_CLASS(var, className) \
+ var = env->FindClass(className); \
+ LOG_FATAL_IF(! var, "Unable to find class " className);
+
+#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
+ var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
+ LOG_FATAL_IF(! var, "Unable to find field " fieldName);
+
int register_android_database_CursorWindow(JNIEnv * env)
{
jclass clazz;
+ FIND_CLASS(clazz, "android/database/CharArrayBuffer");
- clazz = env->FindClass("android/database/CursorWindow");
- if (clazz == NULL) {
- LOGE("Can't find android/database/CursorWindow");
- return -1;
- }
+ GET_FIELD_ID(gCharArrayBufferClassInfo.data, clazz,
+ "data", "[C");
+ GET_FIELD_ID(gCharArrayBufferClassInfo.sizeCopied, clazz,
+ "sizeCopied", "I");
- gWindowField = env->GetFieldID(clazz, "nWindow", "I");
-
- if (gWindowField == NULL) {
- LOGE("Error locating fields");
- return -1;
- }
-
- clazz = env->FindClass("android/database/CharArrayBuffer");
- if (clazz == NULL) {
- LOGE("Can't find android/database/CharArrayBuffer");
- return -1;
- }
-
- gBufferField = env->GetFieldID(clazz, "data", "[C");
-
- if (gBufferField == NULL) {
- LOGE("Error locating fields data in CharArrayBuffer");
- return -1;
- }
-
- gSizeCopiedField = env->GetFieldID(clazz, "sizeCopied", "I");
-
- if (gSizeCopiedField == NULL) {
- LOGE("Error locating fields sizeCopied in CharArrayBuffer");
- return -1;
- }
+ gEmptyString = jstring(env->NewGlobalRef(env->NewStringUTF("")));
+ LOG_FATAL_IF(!gEmptyString, "Unable to create empty string");
return AndroidRuntime::registerNativeMethods(env, "android/database/CursorWindow",
sMethods, NELEM(sMethods));
diff --git a/core/jni/android_database_SQLiteQuery.cpp b/core/jni/android_database_SQLiteQuery.cpp
index 9e42189..8170f46 100644
--- a/core/jni/android_database_SQLiteQuery.cpp
+++ b/core/jni/android_database_SQLiteQuery.cpp
@@ -35,105 +35,20 @@
namespace android {
-sqlite3_stmt * compile(JNIEnv* env, jobject object,
- sqlite3 * handle, jstring sqlString);
-
-// From android_database_CursorWindow.cpp
-CursorWindow * get_window_from_object(JNIEnv * env, jobject javaWindow);
-
-static jfieldID gHandleField;
-static jfieldID gStatementField;
-
-
-#define GET_STATEMENT(env, object) \
- (sqlite3_stmt *)env->GetIntField(object, gStatementField)
-#define GET_HANDLE(env, object) \
- (sqlite3 *)env->GetIntField(object, gHandleField)
-
-static int skip_rows(sqlite3_stmt *statement, int maxRows) {
- int retryCount = 0;
- for (int i = 0; i < maxRows; i++) {
- int err = sqlite3_step(statement);
- if (err == SQLITE_ROW){
- // do nothing
- } else if (err == SQLITE_DONE) {
- return i;
- } else if (err == SQLITE_LOCKED || err == SQLITE_BUSY) {
- // The table is locked, retry
- LOG_WINDOW("Database locked, retrying");
- if (retryCount > 50) {
- LOGE("Bailing on database busy rety");
- break;
- }
- // Sleep to give the thread holding the lock a chance to finish
- usleep(1000);
- retryCount++;
- continue;
- } else {
- return -1;
- }
- }
- LOG_WINDOW("skip_rows row %d", maxRows);
- return maxRows;
-}
-
-static int finish_program_and_get_row_count(sqlite3_stmt *statement) {
- int numRows = 0;
- int retryCount = 0;
- while (true) {
- int err = sqlite3_step(statement);
- if (err == SQLITE_ROW){
- numRows++;
- } else if (err == SQLITE_LOCKED || err == SQLITE_BUSY) {
- // The table is locked, retry
- LOG_WINDOW("Database locked, retrying");
- if (retryCount > 50) {
- LOGE("Bailing on database busy rety");
- break;
- }
- // Sleep to give the thread holding the lock a chance to finish
- usleep(1000);
- retryCount++;
- continue;
- } else {
- // no need to throw exception
- break;
- }
- }
- sqlite3_reset(statement);
- LOG_WINDOW("finish_program_and_get_row_count row %d", numRows);
- return numRows;
-}
-
-static jint native_fill_window(JNIEnv* env, jobject object, jobject javaWindow,
- jint startPos, jint offsetParam, jint maxRead, jint lastPos)
-{
- int err;
- sqlite3_stmt * statement = GET_STATEMENT(env, object);
- int numRows = lastPos;
- maxRead += lastPos;
- int numColumns;
- int retryCount;
- int boundParams;
- CursorWindow * window;
- bool gotAllRows = true;
- bool gotException = false;
-
- if (statement == NULL) {
- LOGE("Invalid statement in fillWindow()");
- jniThrowException(env, "java/lang/IllegalStateException",
- "Attempting to access a deactivated, closed, or empty cursor");
- return 0;
- }
+static jint nativeFillWindow(JNIEnv* env, jclass clazz, jint databasePtr,
+ jint statementPtr, jint windowPtr, jint startPos, jint offsetParam) {
+ sqlite3* database = reinterpret_cast<sqlite3*>(databasePtr);
+ sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr);
+ CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
// Only do the binding if there is a valid offsetParam. If no binding needs to be done
- // offsetParam will be set to 0, an invliad value.
- if(offsetParam > 0) {
+ // offsetParam will be set to 0, an invalid value.
+ if (offsetParam > 0) {
// Bind the offset parameter, telling the program which row to start with
- err = sqlite3_bind_int(statement, offsetParam, startPos);
+ int err = sqlite3_bind_int(statement, offsetParam, startPos);
if (err != SQLITE_OK) {
LOGE("Unable to bind offset position, offsetParam = %d", offsetParam);
- throw_sqlite3_exception(env, GET_HANDLE(env, object));
+ throw_sqlite3_exception(env, database);
return 0;
}
LOG_WINDOW("Bound to startPos %d", startPos);
@@ -141,136 +56,113 @@
LOG_WINDOW("Not binding to startPos %d", startPos);
}
- // Get the native window
- window = get_window_from_object(env, javaWindow);
- if (!window) {
- LOGE("Invalid CursorWindow");
- jniThrowException(env, "java/lang/IllegalArgumentException",
- "Bad CursorWindow");
- return 0;
- }
- LOG_WINDOW("Window: numRows = %d, size = %d, freeSpace = %d", window->getNumRows(), window->size(), window->freeSpace());
+ // We assume numRows is initially 0.
+ LOG_WINDOW("Window: numRows = %d, size = %d, freeSpace = %d",
+ window->getNumRows(), window->size(), window->freeSpace());
- numColumns = sqlite3_column_count(statement);
- if (!window->setNumColumns(numColumns)) {
+ int numColumns = sqlite3_column_count(statement);
+ status_t status = window->setNumColumns(numColumns);
+ if (status) {
LOGE("Failed to change column count from %d to %d", window->getNumColumns(), numColumns);
jniThrowException(env, "java/lang/IllegalStateException", "numColumns mismatch");
return 0;
}
- retryCount = 0;
- if (startPos > 0) {
- int num = skip_rows(statement, startPos);
- if (num < 0) {
- throw_sqlite3_exception(env, GET_HANDLE(env, object));
- return 0;
- } else if (num < startPos) {
- LOGE("startPos %d > actual rows %d", startPos, num);
- return num;
- }
- }
-
- while(startPos != 0 || numRows < maxRead) {
- err = sqlite3_step(statement);
+ int retryCount = 0;
+ int totalRows = 0;
+ int addedRows = 0;
+ bool windowFull = false;
+ bool gotException = false;
+ const bool countAllRows = (startPos == 0); // when startPos is 0, we count all rows
+ while (!gotException && (!windowFull || countAllRows)) {
+ int err = sqlite3_step(statement);
if (err == SQLITE_ROW) {
- LOG_WINDOW("\nStepped statement %p to row %d", statement, startPos + numRows);
+ LOG_WINDOW("Stepped statement %p to row %d", statement, totalRows);
retryCount = 0;
+ totalRows += 1;
- // Allocate a new field directory for the row. This pointer is not reused
- // since it mey be possible for it to be relocated on a call to alloc() when
- // the field data is being allocated.
- {
- field_slot_t * fieldDir = window->allocRow();
- if (!fieldDir) {
- LOG_WINDOW("Failed allocating fieldDir at startPos %d row %d", startPos, numRows);
- gotAllRows = false;
- goto return_count;
- }
+ // Skip the row if the window is full or we haven't reached the start position yet.
+ if (startPos >= totalRows || windowFull) {
+ continue;
}
- // Pack the row into the window
- int i;
- for (i = 0; i < numColumns; i++) {
+ // Allocate a new field directory for the row. This pointer is not reused
+ // since it may be possible for it to be relocated on a call to alloc() when
+ // the field data is being allocated.
+ status = window->allocRow();
+ if (status) {
+ LOG_WINDOW("Failed allocating fieldDir at startPos %d row %d, error=%d",
+ startPos, addedRows, status);
+ windowFull = true;
+ continue;
+ }
+
+ // Pack the row into the window.
+ for (int i = 0; i < numColumns; i++) {
int type = sqlite3_column_type(statement, i);
if (type == SQLITE_TEXT) {
// TEXT data
-#if WINDOW_STORAGE_UTF8
- uint8_t const * text = (uint8_t const *)sqlite3_column_text(statement, i);
+ const char* text = reinterpret_cast<const char*>(
+ sqlite3_column_text(statement, i));
// SQLite does not include the NULL terminator in size, but does
// ensure all strings are NULL terminated, so increase size by
// one to make sure we store the terminator.
- size_t size = sqlite3_column_bytes(statement, i) + 1;
-#else
- uint8_t const * text = (uint8_t const *)sqlite3_column_text16(statement, i);
- size_t size = sqlite3_column_bytes16(statement, i);
-#endif
- int offset = window->alloc(size);
- if (!offset) {
- window->freeLastRow();
- LOG_WINDOW("Failed allocating %u bytes for text/blob at %d,%d", size,
- startPos + numRows, i);
- gotAllRows = false;
- goto return_count;
+ size_t sizeIncludingNull = sqlite3_column_bytes(statement, i) + 1;
+ status = window->putString(addedRows, i, text, sizeIncludingNull);
+ if (status) {
+ LOG_WINDOW("Failed allocating %u bytes for text at %d,%d, error=%d",
+ sizeIncludingNull, startPos + addedRows, i, status);
+ windowFull = true;
+ break;
}
-
- window->copyIn(offset, text, size);
-
- // This must be updated after the call to alloc(), since that
- // may move the field around in the window
- field_slot_t * fieldSlot = window->getFieldSlot(numRows, i);
- fieldSlot->type = FIELD_TYPE_STRING;
- fieldSlot->data.buffer.offset = offset;
- fieldSlot->data.buffer.size = size;
-
- LOG_WINDOW("%d,%d is TEXT with %u bytes", startPos + numRows, i, size);
+ LOG_WINDOW("%d,%d is TEXT with %u bytes",
+ startPos + addedRows, i, sizeIncludingNull);
} else if (type == SQLITE_INTEGER) {
// INTEGER data
int64_t value = sqlite3_column_int64(statement, i);
- if (!window->putLong(numRows, i, value)) {
- window->freeLastRow();
- LOG_WINDOW("Failed allocating space for a long in column %d", i);
- gotAllRows = false;
- goto return_count;
+ status = window->putLong(addedRows, i, value);
+ if (status) {
+ LOG_WINDOW("Failed allocating space for a long in column %d, error=%d",
+ i, status);
+ windowFull = true;
+ break;
}
- LOG_WINDOW("%d,%d is INTEGER 0x%016llx", startPos + numRows, i, value);
+ LOG_WINDOW("%d,%d is INTEGER 0x%016llx", startPos + addedRows, i, value);
} else if (type == SQLITE_FLOAT) {
// FLOAT data
double value = sqlite3_column_double(statement, i);
- if (!window->putDouble(numRows, i, value)) {
- window->freeLastRow();
- LOG_WINDOW("Failed allocating space for a double in column %d", i);
- gotAllRows = false;
- goto return_count;
+ status = window->putDouble(addedRows, i, value);
+ if (status) {
+ LOG_WINDOW("Failed allocating space for a double in column %d, error=%d",
+ i, status);
+ windowFull = true;
+ break;
}
- LOG_WINDOW("%d,%d is FLOAT %lf", startPos + numRows, i, value);
+ LOG_WINDOW("%d,%d is FLOAT %lf", startPos + addedRows, i, value);
} else if (type == SQLITE_BLOB) {
// BLOB data
- uint8_t const * blob = (uint8_t const *)sqlite3_column_blob(statement, i);
- size_t size = sqlite3_column_bytes16(statement, i);
- int offset = window->alloc(size);
- if (!offset) {
- window->freeLastRow();
- LOG_WINDOW("Failed allocating %u bytes for blob at %d,%d", size,
- startPos + numRows, i);
- gotAllRows = false;
- goto return_count;
+ const void* blob = sqlite3_column_blob(statement, i);
+ size_t size = sqlite3_column_bytes(statement, i);
+ status = window->putBlob(addedRows, i, blob, size);
+ if (status) {
+ LOG_WINDOW("Failed allocating %u bytes for blob at %d,%d, error=%d",
+ size, startPos + addedRows, i, status);
+ windowFull = true;
+ break;
}
-
- window->copyIn(offset, blob, size);
-
- // This must be updated after the call to alloc(), since that
- // may move the field around in the window
- field_slot_t * fieldSlot = window->getFieldSlot(numRows, i);
- fieldSlot->type = FIELD_TYPE_BLOB;
- fieldSlot->data.buffer.offset = offset;
- fieldSlot->data.buffer.size = size;
-
- LOG_WINDOW("%d,%d is Blob with %u bytes @ %d", startPos + numRows, i, size, offset);
+ LOG_WINDOW("%d,%d is Blob with %u bytes",
+ startPos + addedRows, i, size);
} else if (type == SQLITE_NULL) {
// NULL field
- window->putNull(numRows, i);
+ status = window->putNull(addedRows, i);
+ if (status) {
+ LOG_WINDOW("Failed allocating space for a null in column %d, error=%d",
+ i, status);
+ windowFull = true;
+ break;
+ }
- LOG_WINDOW("%d,%d is NULL", startPos + numRows, i);
+ LOG_WINDOW("%d,%d is NULL", startPos + addedRows, i);
} else {
// Unknown data
LOGE("Unknown column type when filling database window");
@@ -280,14 +172,12 @@
}
}
- if (i < numColumns) {
- // Not all the fields fit in the window
- // Unknown data error happened
- break;
+ // Update the final row tally.
+ if (windowFull || gotException) {
+ window->freeLastRow();
+ } else {
+ addedRows += 1;
}
-
- // Mark the row as complete in the window
- numRows++;
} else if (err == SQLITE_DONE) {
// All rows processed, bail
LOG_WINDOW("Processed all rows");
@@ -296,63 +186,41 @@
// The table is locked, retry
LOG_WINDOW("Database locked, retrying");
if (retryCount > 50) {
- LOGE("Bailing on database busy rety");
- throw_sqlite3_exception(env, GET_HANDLE(env, object), "retrycount exceeded");
+ LOGE("Bailing on database busy retry");
+ throw_sqlite3_exception(env, database, "retrycount exceeded");
gotException = true;
- break;
+ } else {
+ // Sleep to give the thread holding the lock a chance to finish
+ usleep(1000);
+ retryCount++;
}
-
- // Sleep to give the thread holding the lock a chance to finish
- usleep(1000);
-
- retryCount++;
- continue;
} else {
- throw_sqlite3_exception(env, GET_HANDLE(env, object));
+ throw_sqlite3_exception(env, database);
gotException = true;
- break;
}
}
- LOG_WINDOW("Resetting statement %p after fetching %d rows in %d bytes\n\n\n\n", statement,
- numRows, window->size() - window->freeSpace());
- LOG_WINDOW("Filled window with %d rows in %d bytes", numRows,
- window->size() - window->freeSpace());
- if (err == SQLITE_ROW) {
- // there is more data to be returned. let the caller know by returning -1
- return -1;
+ LOG_WINDOW("Resetting statement %p after fetching %d rows and adding %d rows"
+ "to the window in %d bytes",
+ statement, totalRows, addedRows, window->size() - window->freeSpace());
+ sqlite3_reset(statement);
+
+ // Report the total number of rows on request.
+ if (startPos > totalRows) {
+ LOGE("startPos %d > actual rows %d", startPos, totalRows);
}
- return_count:
- if (startPos) {
- sqlite3_reset(statement);
- LOG_WINDOW("Not doing count(*) because startPos %d is non-zero", startPos);
- return 0;
- } else if (gotAllRows) {
- sqlite3_reset(statement);
- LOG_WINDOW("Not doing count(*) because we already know the count(*)");
- return numRows;
- } else if (gotException) {
- return 0;
- } else {
- // since startPos == 0, we need to get the count(*) of the result set
- return numRows + 1 + finish_program_and_get_row_count(statement);
- }
+ return countAllRows ? totalRows : 0;
}
-static jint native_column_count(JNIEnv* env, jobject object)
-{
- sqlite3_stmt * statement = GET_STATEMENT(env, object);
-
+static jint nativeColumnCount(JNIEnv* env, jclass clazz, jint statementPtr) {
+ sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr);
return sqlite3_column_count(statement);
}
-static jstring native_column_name(JNIEnv* env, jobject object, jint columnIndex)
-{
- sqlite3_stmt * statement = GET_STATEMENT(env, object);
- char const * name;
-
- name = sqlite3_column_name(statement, columnIndex);
-
+static jstring nativeColumnName(JNIEnv* env, jclass clazz, jint statementPtr,
+ jint columnIndex) {
+ sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr);
+ const char* name = sqlite3_column_name(statement, columnIndex);
return env->NewStringUTF(name);
}
@@ -360,30 +228,16 @@
static JNINativeMethod sMethods[] =
{
/* name, signature, funcPtr */
- {"native_fill_window", "(Landroid/database/CursorWindow;IIII)I",
- (void *)native_fill_window},
- {"native_column_count", "()I", (void*)native_column_count},
- {"native_column_name", "(I)Ljava/lang/String;", (void *)native_column_name},
+ { "nativeFillWindow", "(IIIII)I",
+ (void*)nativeFillWindow },
+ { "nativeColumnCount", "(I)I",
+ (void*)nativeColumnCount},
+ { "nativeColumnName", "(II)Ljava/lang/String;",
+ (void*)nativeColumnName},
};
int register_android_database_SQLiteQuery(JNIEnv * env)
{
- jclass clazz;
-
- clazz = env->FindClass("android/database/sqlite/SQLiteQuery");
- if (clazz == NULL) {
- LOGE("Can't find android/database/sqlite/SQLiteQuery");
- return -1;
- }
-
- gHandleField = env->GetFieldID(clazz, "nHandle", "I");
- gStatementField = env->GetFieldID(clazz, "nStatement", "I");
-
- if (gHandleField == NULL || gStatementField == NULL) {
- LOGE("Error locating fields");
- return -1;
- }
-
return AndroidRuntime::registerNativeMethods(env,
"android/database/sqlite/SQLiteQuery", sMethods, NELEM(sMethods));
}
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 494a2b3..1718e74 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -697,6 +697,10 @@
LOGE("!!! FAILED BINDER TRANSACTION !!!");
//jniThrowException(env, "java/lang/OutOfMemoryError", "Binder transaction too large");
break;
+ case FDS_NOT_ALLOWED:
+ jniThrowException(env, "java/lang/RuntimeException",
+ "Not allowed to write file descriptors here");
+ break;
default:
LOGE("Unknown binder error code. 0x%x", err);
}
@@ -1275,7 +1279,7 @@
if (parcel != NULL) {
const status_t err = parcel->setDataSize(size);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1294,11 +1298,29 @@
if (parcel != NULL) {
const status_t err = parcel->setDataCapacity(size);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
+static jboolean android_os_Parcel_pushAllowFds(JNIEnv* env, jobject clazz, jboolean allowFds)
+{
+ Parcel* parcel = parcelForJavaObject(env, clazz);
+ jboolean ret = JNI_TRUE;
+ if (parcel != NULL) {
+ ret = (jboolean)parcel->pushAllowFds(allowFds);
+ }
+ return ret;
+}
+
+static void android_os_Parcel_restoreAllowFds(JNIEnv* env, jobject clazz, jboolean lastValue)
+{
+ Parcel* parcel = parcelForJavaObject(env, clazz);
+ if (parcel != NULL) {
+ parcel->restoreAllowFds((bool)lastValue);
+ }
+}
+
static void android_os_Parcel_writeNative(JNIEnv* env, jobject clazz,
jobject data, jint offset,
jint length)
@@ -1310,12 +1332,13 @@
const status_t err = parcel->writeInt32(length);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
+ return;
}
void* dest = parcel->writeInplace(length);
if (dest == NULL) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, NO_MEMORY);
return;
}
@@ -1333,7 +1356,7 @@
if (parcel != NULL) {
const status_t err = parcel->writeInt32(val);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1344,7 +1367,7 @@
if (parcel != NULL) {
const status_t err = parcel->writeInt64(val);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1355,7 +1378,7 @@
if (parcel != NULL) {
const status_t err = parcel->writeFloat(val);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1366,7 +1389,7 @@
if (parcel != NULL) {
const status_t err = parcel->writeDouble(val);
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1386,7 +1409,7 @@
err = parcel->writeString16(NULL, 0);
}
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1397,7 +1420,7 @@
if (parcel != NULL) {
const status_t err = parcel->writeStrongBinder(ibinderForJavaObject(env, object));
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1409,7 +1432,7 @@
const status_t err =
parcel->writeDupFileDescriptor(jniGetFDFromFileDescriptor(env, object));
if (err != NO_ERROR) {
- jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ signalExceptionForError(env, clazz, err);
}
}
}
@@ -1717,7 +1740,10 @@
return;
}
- (void) thisParcel->appendFrom(otherParcel, offset, length);
+ status_t err = thisParcel->appendFrom(otherParcel, offset, length);
+ if (err != NO_ERROR) {
+ signalExceptionForError(env, clazz, err);
+ }
}
static jboolean android_os_Parcel_hasFileDescriptors(JNIEnv* env, jobject clazz)
@@ -1792,6 +1818,8 @@
{"setDataSize", "(I)V", (void*)android_os_Parcel_setDataSize},
{"setDataPosition", "(I)V", (void*)android_os_Parcel_setDataPosition},
{"setDataCapacity", "(I)V", (void*)android_os_Parcel_setDataCapacity},
+ {"pushAllowFds", "(Z)Z", (void*)android_os_Parcel_pushAllowFds},
+ {"restoreAllowFds", "(Z)V", (void*)android_os_Parcel_restoreAllowFds},
{"writeNative", "([BII)V", (void*)android_os_Parcel_writeNative},
{"writeInt", "(I)V", (void*)android_os_Parcel_writeInt},
{"writeLong", "(J)V", (void*)android_os_Parcel_writeLong},
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index e542a47..e79de2d 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -477,19 +477,17 @@
#if RTL_USE_HARFBUZZ
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, count, flags);
+ value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, flags);
if (value == NULL) {
LOGE("Cannot get TextLayoutCache value");
return ;
}
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, text, count, flags);
+ value->computeValues(paint, text, 0, count, count, flags);
#endif
- size_t startIndex = 0;
- size_t glyphsCount = 0;
- value->getGlyphsIndexAndCount(0, count, &startIndex, &glyphsCount);
- const jchar* glyphs = value->getGlyphs(startIndex, glyphsCount);
+ const jchar* glyphs = value->getGlyphs();
+ size_t glyphsCount = value->getGlyphsCount();
int bytesCount = glyphsCount * sizeof(jchar);
renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y, paint);
#else
@@ -509,19 +507,17 @@
#if RTL_USE_HARFBUZZ
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, contextCount, flags);
+ value = TextLayoutCache::getInstance().getValue(paint, text, start, count, contextCount, flags);
if (value == NULL) {
LOGE("Cannot get TextLayoutCache value");
return ;
}
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, text, contextCount, flags);
+ value->computeValues(paint, text, start, count, contextCount, flags);
#endif
- size_t startIndex = 0;
- size_t glyphsCount = 0;
- value->getGlyphsIndexAndCount(start, count, &startIndex, &glyphsCount);
- const jchar* glyphs = value->getGlyphs(startIndex, glyphsCount);
+ const jchar* glyphs = value->getGlyphs();
+ size_t glyphsCount = value->getGlyphsCount();
int bytesCount = glyphsCount * sizeof(jchar);
renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y, paint);
#else
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9755f22..18194ee 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -263,6 +263,23 @@
android:label="@string/permlab_writeProfile"
android:description="@string/permdesc_writeProfile" />
+ <!-- Allows an application to read from the user's social stream.
+ @hide -->
+ <permission android:name="android.permission.READ_SOCIAL_STREAM"
+ android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_readSocialStream"
+ android:description="@string/permdesc_readSocialStream" />
+
+ <!-- Allows an application to write (but not read) the user's
+ social stream data.
+ @hide -->
+ <permission android:name="android.permission.WRITE_SOCIAL_STREAM"
+ android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_writeSocialStream"
+ android:description="@string/permdesc_writeSocialStream" />
+
<!-- Allows an application to read the user's calendar data. -->
<permission android:name="android.permission.READ_CALENDAR"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
new file mode 100644
index 0000000..f41ad95
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_suggestions_add.png b/core/res/res/drawable-hdpi/ic_suggestions_add.png
new file mode 100644
index 0000000..79c017a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_suggestions_add.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_suggestions_delete.png b/core/res/res/drawable-hdpi/ic_suggestions_delete.png
new file mode 100644
index 0000000..1ae6b96
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_suggestions_delete.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png
old mode 100755
new mode 100644
index 9e1c42a..f8092ea
--- a/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png
+++ b/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selector_background_focus.9.png b/core/res/res/drawable-hdpi/list_selector_background_focus.9.png
old mode 100755
new mode 100644
index 5563c80..3a21d35
--- a/core/res/res/drawable-hdpi/list_selector_background_focus.9.png
+++ b/core/res/res/drawable-hdpi/list_selector_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png b/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png
old mode 100755
new mode 100644
index 72d3a08..19558e9
--- a/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png
+++ b/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png b/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png
old mode 100755
new mode 100644
index 7568b30..0f3b444
--- a/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png
+++ b/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
index 7cbff01..1c26920 100644
--- a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
index 7cbff01..1c26920 100644
--- a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
index d4b3209..167d7d3 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png
index ec7303e..4048260 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png
index 19526fe..90e9c9c 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png
index e8f9eef..4a3e57c 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_disabled.png b/core/res/res/drawable-hdpi/stat_notify_disabled.png
new file mode 100644
index 0000000..5b5a7dc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_notify_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_adb.png b/core/res/res/drawable-hdpi/stat_sys_adb.png
index ddb8a71..e7e1d8d 100644
--- a/core/res/res/drawable-hdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-hdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/stat_sys_adb.png b/core/res/res/drawable-ldpi/stat_sys_adb.png
index 86b945b..aec8d90 100644
--- a/core/res/res/drawable-ldpi/stat_sys_adb.png
+++ b/core/res/res/drawable-ldpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_suggestions_add.png b/core/res/res/drawable-mdpi/ic_suggestions_add.png
new file mode 100644
index 0000000..f91951b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_suggestions_add.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_suggestions_delete.png b/core/res/res/drawable-mdpi/ic_suggestions_delete.png
new file mode 100644
index 0000000..98eb565
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_suggestions_delete.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png
index 43c36cb..dbe3953 100644
--- a/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png
+++ b/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selector_background_focus.9.png b/core/res/res/drawable-mdpi/list_selector_background_focus.9.png
index 53a7eac..da625af 100644
--- a/core/res/res/drawable-mdpi/list_selector_background_focus.9.png
+++ b/core/res/res/drawable-mdpi/list_selector_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png b/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png
index 0818761..fbf7ef0 100644
--- a/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png
+++ b/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png b/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png
index 8bd86b2..dd2a024 100644
--- a/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png
+++ b/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
index 31228b6..ab8ec69 100644
--- a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
index 31228b6..ab8ec69 100644
--- a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png
index 6f58ef0..351d539 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png
index 3d8f134..e6072ee 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png
index d480c55..79682c1 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png
index 6a414fa..ba53c0b 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_disabled.png b/core/res/res/drawable-mdpi/stat_notify_disabled.png
new file mode 100644
index 0000000..9661d31
--- /dev/null
+++ b/core/res/res/drawable-mdpi/stat_notify_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_adb.png b/core/res/res/drawable-mdpi/stat_sys_adb.png
index 730d96f..86d113f 100644
--- a/core/res/res/drawable-mdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-mdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/platlogo.png b/core/res/res/drawable-nodpi/platlogo.png
index e619ed5..8aa3b9e 100644
--- a/core/res/res/drawable-nodpi/platlogo.png
+++ b/core/res/res/drawable-nodpi/platlogo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_suggestions_add.png b/core/res/res/drawable-xhdpi/ic_suggestions_add.png
new file mode 100644
index 0000000..aac038c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_suggestions_add.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_suggestions_delete.png b/core/res/res/drawable-xhdpi/ic_suggestions_delete.png
new file mode 100644
index 0000000..077e9fc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_suggestions_delete.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
index d599976..980bbd7 100644
--- a/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
+++ b/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png b/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png
index 17987f3..79c4577 100644
--- a/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png
+++ b/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png b/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png
index 5a64592..73fc783 100644
--- a/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png
+++ b/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png b/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png
index 1593577..5b3ebe1 100644
--- a/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
index 097160b..c6c3f1e 100644
--- a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
index 097160b..c6c3f1e 100644
--- a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
index 4715cfb..8cf3868 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png
index d41d5a3..417b35a 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png
index 4f0e06d..8053d88 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png
index 5d9f860..d17fa7d 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_disabled.png b/core/res/res/drawable-xhdpi/stat_notify_disabled.png
new file mode 100644
index 0000000..0a003af
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_adb.png b/core/res/res/drawable-xhdpi/stat_sys_adb.png
index 01eb61d..684d57a 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/values-mcc260-cs/strings.xml b/core/res/res/drawable/stat_sys_download_done_static.xml
similarity index 65%
rename from core/res/res/values-mcc260-cs/strings.xml
rename to core/res/res/drawable/stat_sys_download_done_static.xml
index 1161f9a..8d5f836 100644
--- a/core/res/res/values-mcc260-cs/strings.xml
+++ b/core/res/res/drawable/stat_sys_download_done_static.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
@@ -13,7 +13,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/stat_sys_download_anim0" />
diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml
index 8bc5f34..e34822d 100644
--- a/core/res/res/layout/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_password_landscape.xml
@@ -135,7 +135,8 @@
<LinearLayout
android:orientation="horizontal"
android:layout_width="270dip"
- android:layout_gravity="center_vertical">
+ android:layout_gravity="center_vertical"
+ android:background="@drawable/lockscreen_password_field_dark">
<EditText android:id="@+id/passwordEntry"
android:layout_height="wrap_content"
@@ -148,11 +149,23 @@
android:textSize="24sp"
android:minEms="8"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@drawable/lockscreen_password_field_dark"
+ android:background="@null"
android:textColor="?android:attr/textColorPrimary"
android:imeOptions="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"
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
index 2a66d7d..e1280ba 100644
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_password_portrait.xml
@@ -95,9 +95,12 @@
/>
<!-- 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_marginLeft="16dip"
android:layout_marginRight="16dip">
@@ -110,12 +113,24 @@
android:textStyle="normal"
android:inputType="textPassword"
android:textSize="36sp"
- android:background="@drawable/lockscreen_password_field_dark"
+ android:background="@null"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffffff"
android:imeOptions="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"
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml
index 4349c5b..0ec8f75 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml
@@ -121,7 +121,7 @@
<RelativeLayout
android:layout_width="match_parent"
- android:layout_height="292dip">
+ android:layout_height="302dip">
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/unlock_widget"
diff --git a/core/res/res/layout/keyguard_transport_control.xml b/core/res/res/layout/keyguard_transport_control.xml
index 2ebe5fc..6e24ce2 100644
--- a/core/res/res/layout/keyguard_transport_control.xml
+++ b/core/res/res/layout/keyguard_transport_control.xml
@@ -66,7 +66,8 @@
android:src="@drawable/ic_media_rew"
android:clickable="true"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"/>
+ android:padding="10dip"
+ android:contentDescription="@string/lockscreen_transport_prev_description"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
@@ -80,7 +81,8 @@
android:clickable="true"
android:src="@drawable/ic_media_play"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"/>
+ android:padding="10dip"
+ android:contentDescription="@string/lockscreen_transport_play_description"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
@@ -94,7 +96,8 @@
android:clickable="true"
android:src="@drawable/ic_media_ff"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"/>
+ android:padding="10dip"
+ android:contentDescription="@string/lockscreen_transport_next_description"/>
</FrameLayout>
</LinearLayout>
</LinearLayout>
diff --git a/core/res/res/layout/screen_simple_overlay_action_mode.xml b/core/res/res/layout/screen_simple_overlay_action_mode.xml
new file mode 100644
index 0000000..eb093e7
--- /dev/null
+++ b/core/res/res/layout/screen_simple_overlay_action_mode.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+
+This is an optimized layout for a screen, with the minimum set of features
+enabled.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fitsSystemWindows="true">
+ <FrameLayout
+ android:id="@android:id/content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:foregroundInsidePadding="false"
+ android:foregroundGravity="fill_horizontal|top"
+ android:foreground="?android:attr/windowContentOverlay" />
+ <ViewStub android:id="@+id/action_mode_bar_stub"
+ android:inflatedId="@+id/action_mode_bar"
+ android:layout="@layout/action_mode_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+</FrameLayout>
diff --git a/core/res/res/layout/status_bar_latest_event_content_large_icon.xml b/core/res/res/layout/status_bar_latest_event_content_large_icon.xml
index ac4d1e4..f3f1957 100644
--- a/core/res/res/layout/status_bar_latest_event_content_large_icon.xml
+++ b/core/res/res/layout/status_bar_latest_event_content_large_icon.xml
@@ -4,8 +4,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
+ android:paddingLeft="12dp"
+ android:paddingRight="12dp"
>
<TextView android:id="@+id/title"
android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
diff --git a/core/res/res/layout/text_edit_suggestion_item.xml b/core/res/res/layout/text_edit_suggestion_item.xml
index 0e2b04f..1fdc1bf 100644
--- a/core/res/res/layout/text_edit_suggestion_item.xml
+++ b/core/res/res/layout/text_edit_suggestion_item.xml
@@ -23,6 +23,7 @@
android:paddingBottom="8dip"
android:layout_gravity="left|center_vertical"
android:singleLine="true"
+ android:drawablePadding="8dip"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/dim_foreground_light" />
diff --git a/core/res/res/layout/volume_adjust_item.xml b/core/res/res/layout/volume_adjust_item.xml
index fb900f7..d3fa7e9 100644
--- a/core/res/res/layout/volume_adjust_item.xml
+++ b/core/res/res/layout/volume_adjust_item.xml
@@ -27,7 +27,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dip"
- android:layout_marginLeft="8dip"
android:background="?attr/selectableItemBackground"
/>
@@ -38,8 +37,6 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="16dip"
- android:layout_marginRight="8dip" />
+ android:layout_marginRight="16dip" />
</LinearLayout>
-
-
diff --git a/core/res/res/layout/web_text_view_dropdown.xml b/core/res/res/layout/web_text_view_dropdown.xml
index 1dce5cb..1a6e9eb 100644
--- a/core/res/res/layout/web_text_view_dropdown.xml
+++ b/core/res/res/layout/web_text_view_dropdown.xml
@@ -23,4 +23,7 @@
android:background="#ffffffff"
android:singleLine="true"
android:layout_width="match_parent"
- android:layout_height="?android:attr/searchResultListItemHeight" />
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:paddingTop="3dip"
+ android:paddingBottom="3dip" />
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index dfd8ff8..d927379 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<ongetiteld>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Geen foonnommer)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Onbekend)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Stemboodskap"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Laat die program toe om persoonlike profielinligting gestoor op jou selfoon, soos jou naam en kontakbesonderhede, te lees. Dit beteken dat die program jou kan identifiseer en jou profielinligting aan ander kan stuur."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"skryf na jou profieldata"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Laat die program toe om te verander of by te voeg tot die persoonlike profielinligting gestoor op jou selfoon, soos jou naam en kontakbesonderhede. Dit beteken dat ander programme jou kan identifiseer en jou profielinligting aan ander kan stuur."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lees jou sosiale stroom"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Stel die app in staat om toegang te verkry tot en sosiale bywerkings tussen jou en jou vriende te sinch. Kwaadwillige apps kan dit gebruik om private kommunikasie tussen jou en jou vriende op sosiale netwerke te lees."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skryf aan jou sosiale stroom"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Stel die app in staat om jou vriende se sosiale bywerkings te vertoon. Kwaadwillige apps kan dit gebruik om via sosiale netwerke toegang tot private kommunikasie tussen jou en jou vriende te verkry."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lees kalenderafsprake plus vertroulike inligting"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Laat \'n program toe om alle kalenderafsprake te lees wat op jou tablet gestoor is, insluitend dié van vriende of kollegas. \'n Kwaadwillige program met dié toestemming kan persoonlike inligting uit hierdie kalenders uithaal sonder die eienaars se medewete."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Laat \'n program toe om alle kalendergebeure wat op jou foon gestoor is, insluitend dié van vriende of kollega\'s, te lees. \'n Kwaadwillige program met dié toestemming kan persoonlike inligting uit hierdie kalenders uithaal, sonder die eienaars se medewete."</string>
@@ -1109,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Ontdoen die uitvee."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Doen vir eers niks."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Kies \'n rekening"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Voeg \'n rekening by"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Watter rekening wil jy gebruik?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Voeg rekening by"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Verhoging"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Verminder"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tik en hou."</string>
@@ -1146,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modus verander"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invoersleutel"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Kies \'n app"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Deel met"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Deel met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Glyhandvatsel. Tik en hou."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Op na <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Af vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1155,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Klank aan"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Sleutel. Kopstuk nodig om sleutels te hoor, tydens tik van \'n wagwoord."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Sleutel. Kopstuk nodig om sleutels te hoor, tydens tik van \'n wagwoord."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeer tuis"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigeer op"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opsies"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index ddb1baf..8100bba 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<ርዕስ አልባ>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(ምንም ስልክ ቁጥር የለም)"</string>
<string name="unknownName" msgid="2277556546742746522">"(ያልታወቀ)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"የድምፅ መልዕክት"</string>
@@ -62,7 +63,7 @@
<string name="RuacMmi" msgid="7827887459138308886">"የሚያበሳጭ የማይፈለጉ ጥሪዎች አለመቀበል።"</string>
<string name="CndMmi" msgid="3116446237081575808">"መደወያ ቁጥር አስረከበ"</string>
<string name="DndMmi" msgid="1265478932418334331">"አትረብሽ"</string>
- <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"የደዋይ ID ወደ ተከልክሏል ነባሪዎች።ቀጥሎ ጥሪ፡ ተከልክሏል"</string>
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"የደዋይID ወደ ተከልክሏል ነባሪዎች።ጥሪ ቀጥሎ ተከልክሏል፡"</string>
<string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"የደዋይ ID ወደ ተከልክሏል ነባሪዎች።ቀጥሎ ጥሪ፡ አልተከለከለም"</string>
<string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"የደዋይ ID ወደ አልተከለከለም ነባሪዎች።ቀጥሎ ጥሪ፡ ተከልክሏል"</string>
<string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"የደዋይ ID ነባሪዎች ወደአልተከለከለም። ቀጥሎ ጥሪ፡አልተከለከለም"</string>
@@ -82,7 +83,7 @@
<string name="serviceClassFAX" msgid="5566624998840486475">"ፋክስ"</string>
<string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
<string name="serviceClassDataAsync" msgid="4523454783498551468">"በተለያየ ጊዜ"</string>
- <string name="serviceClassDataSync" msgid="7530000519646054776">"አሳምር"</string>
+ <string name="serviceClassDataSync" msgid="7530000519646054776">"ሥምሪያ"</string>
<string name="serviceClassPacket" msgid="6991006557993423453">"ፓኬት"</string>
<string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
<string name="roamingText0" msgid="7170335472198694945">"በዝውውር ላይ አመላካች በርቷል"</string>
@@ -123,8 +124,8 @@
<string name="httpErrorFileNotFound" msgid="5588380756326017105">"የተጠየቀው ፋይል አልተገኘም ነበር።"</string>
<string name="httpErrorTooManyRequests" msgid="1235396927087188253">"እጅግ ብዙ ጥየቃዎች ተካሂደዋል። ትንሽ ቆይተው እንደገና ይሞክሩ።"</string>
<string name="notification_title" msgid="1259940370369187045">"ለ<xliff:g id="ACCOUNT">%1$s</xliff:g> ስህተት ግባ"</string>
- <string name="contentServiceSync" msgid="8353523060269335667">"አሳምር"</string>
- <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"አሳምር"</string>
+ <string name="contentServiceSync" msgid="8353523060269335667">"ሥምሪያ"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"ሥምሪያ"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"በጣም ብዙ <xliff:g id="CONTENT_TYPE">%s</xliff:g> ስርዞች።"</string>
<string name="low_memory" product="tablet" msgid="2292820184396262278">"የጡባዊ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።"</string>
<string name="low_memory" product="default" msgid="6632412458436461203">"የስልክ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።"</string>
@@ -221,7 +222,7 @@
<string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"ትግበራ ምንም እንኳ ማህደረ ትውስታ አነስተኛ ባይሆንም ሌላ ትግበራዎች የዳራ ሂደታቸውን ለማቆም ይፈቅዳል።"</string>
<string name="permlab_forceStopPackages" msgid="1447830113260156236">"ሌላ ትግበራዎችን በኃይል አቁም"</string>
<string name="permdesc_forceStopPackages" msgid="7263036616161367402">"ትግበራ ሌሎች ትግበራዎችን በኃይል ለማስቆም ይፈቅዳል።"</string>
- <string name="permlab_forceBack" msgid="1804196839880393631">"ትግበራ እንዲዘጋአስገድድ"</string>
+ <string name="permlab_forceBack" msgid="1804196839880393631">"ትግበራ እንዲዘጋ አስገድድ"</string>
<string name="permdesc_forceBack" msgid="6534109744159919013">"ትግበራ ማንኛውም ቅድመገፅ እንቅስቃሴ በግድ ለመዝጋት እና ለመመለስ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
<string name="permlab_dump" msgid="1681799862438954752">"የስርዓት የውስጥ ሁኔታን ሰርስረህ አውጣ"</string>
<string name="permdesc_dump" msgid="2198776174276275220">"ትግበራ የስረዓት ውስጣዊ ሁኔታ ሰርስረው ሊያወጡ ይፈቅዳል። ተንኮል አዘል ትግበራዎች በፍፁም የማያስፈልጋቸውን የተለያዩ ሰፋ ያለ የግል እና የተጠበቀ መረጃ ሰርስረ ው ሊያወጡይችላሉ።"</string>
@@ -249,7 +250,7 @@
<string name="permdesc_backup" msgid="4837493065154256525">"ትግበራው በስርዓተ መጠባበቅ እና እነበረበት መልስ አሰራር ለመቆጣጠር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
<string name="permlab_confirm_full_backup" msgid="5557071325804469102">"የሙሉ መጠበቂያ ወይም እነበረበት መልስ ከዋኝ አረጋግጥ"</string>
<string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"ትግበራ ሙሉ የመጠባበቂያ ማረጋገጫ UI ለማስነሳት ይፈቅዳል። በሌላ በማንኛውም እንዳይገለገል።"</string>
- <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"ያልተፈቀደ ዊንዶውዝ አሳይ"</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"ያልተፈቀደ Windows አሳይ"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"በውስጥ ስርዓት ተጠቃሚ በየነገፅ ለመጠቀም የሚታሰብ ዊንዶውዝ መፍጠር ይፈቅዳል። ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
<string name="permlab_systemAlertWindow" msgid="3372321942941168324">"የስርዓት-ደረጃ ማንቂያ አሳይ"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"ትግበ ራ የስርዓት ማንቂያ ዊንዶውዝ ለማሳየት ይፈቅዳል። ተንኮል አዘል ትግበራዎች የስልኩን ጠቅላላ ማያ ሊቆጣጠሩት ይችላሉ።"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"ትግበራ በመሣሪያዎ ላይ የተከማቸውን የግል የመገለጫ መረጃ፣ እንደ ስምዎ እና የዕውቂያ መረጃ ለማንበብ ይፈቅዳል። ይህ ማለት ትግበራው እርስዎን ለይቶ የመገለጫ መረጃዎን ለሌሎች መላክ ይችላል።"</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"የአርስዎ መገለጫ ውሂብ ላይ ይፃፉ"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"ትግበራ በመሣሪያዎ ላይ የተከማቸውን የግል የመገለጫ መረጃ፣ እንደ ስምዎ እና የዕውቂያ መረጃ ለመለወጥ እና ለማከል ይፈቅዳል። ይህ ማለት ትግበራው እርስዎን ለይቶ የመገለጫ መረጃዎን ለሌሎች መላክ ይችላል።"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ያንተን ማህበራዊ የውይይት ክፍሎች አንብብ"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"መተግበሪያው ካንተ ጓደኞች ማህበራዊ ዝማኔዎችን እንዲደርስባቸው እና እንዲያመሳስል ይፈቅዳል፡፡ ተንኮል አዘል መተግበሪያዎች ይህን መዳረሻ ባንተና በጓደኞችህ መካከል በማህበራዊ አውታረመረቦች ያሉ የግል ተግባቦቶችን ለመዳረስ ሊጠቀሙበት ይችላሉ፡፡"</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ወደ ያንተ ማህበራዊ የውይይት ክፍሎች ጻፍ"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"መተግበሪያው የጓደኞችህን ማህበራዊ ዝማኔዎችን ለማሳየት ይፈቅዳል፡፡ ተንኮል አዘል መተግበሪያዎች ይህን መዳረሻ ጓደኛ መስለው ለመቅረብ እና የይለፍ ቃልና ሌላ ምስጢራዊ መረጃ እንድትሰጡ ለማድረግ ሊጠቀሙበት ይችላሉ፡፡"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"የቀን መቁጠሪያ ክስተቶች ተጨማሪ ሚስጥራዊ መረጃ አንብብ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"ትግበራ በጡባዊዎ ላይ የተከማቸውን የቀን መቁጠሪያ ክስተቶች በሙሉ አብረው የሚሰሩትንም ሆነ የጓደኞችዎን ጨምሮ ለማንበብ ይፈቅዳል። ይህን ፈቃድ የያዘ ተንኮል አዘል ትግበራ ከባለቤቱ ዕውቅና ውጪ ከቀን አቆጣጠር ላይ የግል መረጃ ማውጣት ይችላል።\'"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"ትግበራ በስልክዎ ላይ የተከማቸውን የቀን መቁጠሪያ ክስተቶች በሙሉ አብረው የሚሰሩትንም ሆነ የጓደኞችዎን ጨምሮ ለማንበብ ይፈቅዳል። ይህን ፈቃድ የያዘ ተንኮል አዘል ትግበራ ከባለቤቱ ዕውቅና ውጪ ከቀን አቆጣጠር ላይ የግል መረጃ ማውጣት ይችላል።\'"</string>
@@ -467,14 +472,14 @@
<string name="permdesc_nfc" msgid="9171401851954407226">"ትግበራ የቅርብ ግኑኙነትመስክ (NFC) መለያዎች፣ ካርዶች እና አንባቢ ጋር ለማገናኘትይፈቅዳል።"</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"ቁልፍመቆለፊያአቦዝን"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"ትግበራ የቁልፍሽንጉር እና ማንኛውም ተያያዥ የይለፍ ቃል ደህንነት ላለማስቻል ይፈቅዳል። ለዚህ ህጋዊ ምሳሌ የገቢ ስልክ ጥሪ ሲቀበሉ የቁልፍሽንጉርአለማስቻል፣ ከዛም ጥሪው ሲጨርስ የቁልፍሽንጉሩን ድጋሚ ማስቻል።"</string>
- <string name="permlab_readSyncSettings" msgid="6201810008230503052">"የአሳምር ቅንብሮች አንብብ"</string>
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"የሥምሪያ ቅንብሮች አንብብ"</string>
<string name="permdesc_readSyncSettings" msgid="5315925706353341823">"ትግበራ የአሳምር ቅንብሮች እንደ አየር ሁኔታ አሳምር ለዕውቆች መንቃቱን ለማንበብ ይፈቅዳል።"</string>
- <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"የአሳምር ቅንብሮች ፃፍ"</string>
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"የሥምሪያ ቅንብሮችን ፃፍ"</string>
<string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"ትግበራ የአሳምር ቅንብሮች እንደ አየር ሁኔታ አሳምር ለዕውቆች መንቃቱን ለመቀየር ይፈቅዳል።"</string>
- <string name="permlab_readSyncStats" msgid="7396577451360202448">"የአሳምር ስታስቲክስ አንብብ"</string>
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"የሥምሪያ ስታስቲክስ አንብብ"</string>
<string name="permdesc_readSyncStats" msgid="7511448343374465000">"ትግበራ የአሳምር ስታስቲክ ለምሳሌ የተከሰተ የአሳምር ታሪክ ለማንበብ ይፈቅዳል።"</string>
<string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"የምዝገባ መግቦች አንበብ"</string>
- <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"ትግበራ ስለ አሁኑጊዜ አሳምርምላሾች ዝርዝሮች ለማግኘት ይፈቅዳል።"</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"ትግበራ ስለ አሁኑጊዜ ሥምሪያምላሾች ዝርዝሮች ለማግኘት ይፈቅዳል።"</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"የተመዝጋቢዎች ምላሾች ፃፍ"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"ትግበራ በአሁን ጊዜ የእርስዎን አሳምር ምገባዎች ለመቀየር ይፈቅዳል።ይህ ለተንኮል አዘል ትግበራ የእርስዎን አሳምር ምገባ ዎች ለመለወጥ መፍቀድ ይችላል።"</string>
<string name="permlab_readDictionary" msgid="432535716804748781">"በተጠቃሚ የተበየኑ መዝገበ ቃላት አንብብ"</string>
@@ -841,7 +846,7 @@
<string name="years" msgid="6881577717993213522">"ዓመታት"</string>
<string name="VideoView_error_title" msgid="3359437293118172396">"ቪዲዮ ማጫወት አልተቻለም።"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"ይቅርታ፣ ይህ ቪዲዮ በዚህ መሣሪያ ለመልቀቅ ትክክል አይደለም።"</string>
- <string name="VideoView_error_text_unknown" msgid="710301040038083944">"ይቅርታ፣ ይህ ቪዲዮመጫወት አልቻለም።"</string>
+ <string name="VideoView_error_text_unknown" msgid="710301040038083944">"ይቅርታ፣ ይህ ቪዲዮ መጫወት አልቻለም።"</string>
<string name="VideoView_error_button" msgid="2822238215100679592">"እሺ"</string>
<string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="noon" msgid="7245353528818587908">"ቀትር"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"የURL ቅጂ"</string>
<string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"የፅሁፍ ምርጫ"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"ወደ መዝገበ ቃላት አክል"</string>
+ <string name="deleteText" msgid="7070985395199629156">"ሰርዝ"</string>
<string name="inputMethod" msgid="1653630062304567879">"ግቤት ሜተድ"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"የፅሁፍ እርምጃዎች"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"ቦታ አንሷል"</string>
@@ -1046,8 +1047,8 @@
<string name="ime_action_done" msgid="8971516117910934605">"ተከናውኗል"</string>
<string name="ime_action_previous" msgid="1443550039250105948">"ያለፈው"</string>
<string name="ime_action_default" msgid="2840921885558045721">"አከናውን"</string>
- <string name="dial_number_using" msgid="5789176425167573586">"የደወሉት ቁጥር"\n"<xliff:g id="NUMBER">%s</xliff:g> በመጠ ቀም ላይ"</string>
- <string name="create_contact_using" msgid="4947405226788104538">\n"በመጠቀም <xliff:g id="NUMBER">%s</xliff:g> ዕውቂያ ፍጠር"</string>
+ <string name="dial_number_using" msgid="5789176425167573586">"የደወሉት ቁጥር"\n"<xliff:g id="NUMBER">%s</xliff:g>በመጠቀም ላይ"</string>
+ <string name="create_contact_using" msgid="4947405226788104538">\n"በመጠቀም<xliff:g id="NUMBER">%s</xliff:g>ዕውቂያ ፍጠር"</string>
<string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"የሚከተለው ወይም ተጨማሪ ትግበራዎች ወደ መለያዎ ለመድረስ አሁን እና ወደፊት ፈቃድ ይጠይቃል።"</string>
<string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"ይህን ጥየቃ መፍቀድ ይፈልጋሉ?"</string>
<string name="grant_permissions_header_text" msgid="2722567482180797717">"የድረስ መጠይቅ"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"ስርዞቹን ቀልብስ።"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"ለአሁን ምንም አታድርግ።"</string>
<string name="choose_account_label" msgid="4191313562041125787">"መለያ ምረጥ"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"መለያ አክል"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"የትኛውን መለያ መጠቀም ትፈልጋለህ?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"መለያ አክል"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"ጨምር"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"ቀንስ"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> አንዴ ንካ እና ያዝ"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ሞድ ለውጥ"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ቀይር"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"አስገባ"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"መተግበሪያ ምረጥ"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"ተጋራ ከ"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"ከ <xliff:g id="APPLICATION_NAME">%s</xliff:g> ጋር ተጋራ"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Sliding handle. Tap and hold."</string>
<string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደላይ።"</string>
<string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደታች።"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"ካሜራ"</string>
<string name="description_target_silent" msgid="893551287746522182">"ፀጥታ"</string>
<string name="description_target_soundon" msgid="30052466675500172">"ድምፅ አብራ"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"አዝራር፡፡ ይለፍቃል እየተየብክ አዝራሮችን ለመስማት ማዳመጫ መሳሪያ ያስፈልጋል፡፡"</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"አዝራር፡፡ ይለፍቃል እየተየብክ አዝራሮችን ለመስማት ማዳመጫ መሳሪያ ያስፈልጋል፡፡"</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"መነሻ ዳስስ"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"አስስ"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"ተጨማሪ አማራጮች"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"የUSB ማከማቻ"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"አርትእ..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"የውሂብ አጠቃቀም ማስጠንቀቂየ"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"ቅንጅቶችን እና አጠቃቀምን ለማየት ንካ"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G ውሂብ ቦዝኗል"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G ውሂብ ቦዝኗል"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"የተንቀሳቃሽ ውሂብ ቦዝኗል"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 0386ab4..931e22f 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<بلا عنوان>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(ليس هناك رقم هاتف)"</string>
<string name="unknownName" msgid="2277556546742746522">"(غير معروف)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"البريد الصوتي"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"للسماح للتطبيق بقراءة معلومات الملف الشخصي الشخصية المخزنة على الجهاز، مثل الاسم ومعلومات الاتصال. يعني ذلك أن التطبيق يمكنه التعرف عليك وإرسال معلومات ملفك الشخصي إلى الآخرين."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"الكتابة إلى بيانات ملفك الشخصي"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"للسماح للتطبيق بتغيير أو إضافة معلومات الملف الشخصي الشخصية المخزنة على الجهاز، مثل الاسم ومعلومات الاتصال. يعني ذلك أن التطبيقات الأخرى يمكنها التعرف عليك وإرسال معلومات ملفك الشخصي إلى الآخرين."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"قراءة المشاركات الاجتماعية"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"للسماح للتطبيق بالدخول إلى التحديثات الاجتماعية منك ومن أصدقائك ومزامنتها. يمكن أن تستخدم التطبيقات الضارة هذا لقراءة الاتصالات الخاصة بينك وبين أصدقائك على الشبكات الاجتماعية."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"كتابة إلى المشاركات الاجتماعية"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"للسماح للتطبيق بعرض التحديثات الاجتماعية من أصدقائك. يمكن أن تستخدم التطبيقات الضارة هذا للتظاهر بأنها صديق وتخدعك لكشف كلمات المرور أو المعلومات السرية الأخرى."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"قراءة أحداث التقويم بالإضافة إلى المعلومات السرية"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"للسماح لأحد التطبيقات بقراءة جميع أحداث التقويم المخزّنة في الجهاز اللوحي، بما في ذلك أحداث التقويم الخاصة بالأصدقاء وزملاء العمل. يمكن لأحد التطبيقات الضارة باستخدام هذا الإذن استخراج المعلومات الشخصية من هذه التقاويم بدون معرفة المالكين."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"للسماح لأحد التطبيقات بقراءة جميع أحداث التقويم المخزّنة في هاتفك، بما في ذلك أحداث التقويم الخاصة بالأصدقاء وزملاء العمل. يمكن لأحد التطبيقات الضارة باستخدام هذا الإذن استخراج المعلومات الشخصية من هذه التقاويم بدون معرفة المالكين."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"تحديد نص..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"تحديد النص"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"إضافة إلى القاموس"</string>
+ <string name="deleteText" msgid="7070985395199629156">"حذف"</string>
<string name="inputMethod" msgid="1653630062304567879">"طريقة الإرسال"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"إجراءات النص"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"المساحة منخفضة"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"التراجع عن عمليات الحذف"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"عدم تنفيذ أي شيء الآن"</string>
<string name="choose_account_label" msgid="4191313562041125787">"حدد حسابًا."</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"إضافة حساب"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"ما الحساب الذي تريد استخدامه؟"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"إضافة حساب"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"زيادة"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"تناقص"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> انقر مع الاستمرار."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"تغيير الوضع"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"العالي"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"اختيار تطبيق"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"مشاركة مع"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"مشاركة مع <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"مقبض التمرير. انقر وامسك."</string>
<string name="description_direction_up" msgid="1983114130441878529">"أعلى إلى <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"أسفل إلى <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"الكاميرا"</string>
<string name="description_target_silent" msgid="893551287746522182">"صامت"</string>
<string name="description_target_soundon" msgid="30052466675500172">"تشغيل الصوت"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"سماعة رأس مطلوبة لسماع المفاتيح أثناء كتابة كلمة مرور."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"سماعة رأس مطلوبة لسماع المفاتيح أثناء كتابة كلمة مرور."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"التنقل إلى الشاشة الرئيسية"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"التنقل إلى أعلى"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"المزيد من الخيارات"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"وحدة تخزين USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"تعديل..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"تحذير استخدام البيانات"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"المس لعرض الاستخدام والإعدادات"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"تم تعطيل بيانات الجوال"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index c55322b..5b9dd0b 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<неозаглавено>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Няма телефонен номер)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Неизвестно)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Гласова поща"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Разрешава на приложението да чете информацията от личния потребителски профил, съхранена на устройството ви, например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща информацията за потребителския ви профил на други хора."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"запис в потр. ви профил"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Разрешава на приложението да променя или добавя към личния потребителски профил информация, съхранена на устройството ви, като например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща информацията за потребителския ви профил на други хора."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"четене на социалния ви поток"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Разрешава на приложението да осъществява достъп и да синхронизира социални актуализации от вас и приятелите ви. Злонамерените приложения могат да използват това, за да четат частни съобщения помежду ви в социалните мрежи."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"писане в социалния ви поток"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Разрешава на приложението да показва социални актуализации от приятелите ви. Злонамерените приложения могат да използват това, за да се представят за приятел и да ви подмамят да разкриете пароли или друга поверителна информация."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"четене на събития от календари плюс поверителна информация"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Разрешава на приложението да чете всички събития от календари, съхранявани на таблета ви, включително тези на приятели или колеги. Злонамерено приложение с това разрешение може да извлича лична информация от тези календари без знанието на собствениците."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Разрешава на приложението да чете всички събития от календари, съхранявани на телефона ви, включително тези на приятели или колеги. Злонамерено приложение с това разрешение може да извлича лична информация от тези календари без знанието на собствениците."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Копиране на URL адреса"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Избиране на текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избиране на текст"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"добавяне към речника"</string>
+ <string name="deleteText" msgid="7070985395199629156">"изтриване"</string>
<string name="inputMethod" msgid="1653630062304567879">"Метод на въвеждане"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Действия с текста"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Мястото не достига"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Отмяна на изтриванията."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Да не се прави нищо засега."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Избор на профил"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Добавяне на профил"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Кой профил искате да използвате?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Добавяне на профил"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличаване"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Намаляване"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Докоснете <xliff:g id="VALUE">%s</xliff:g> път/и и задръжте."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Промяна на режима"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Избор на приложение"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Споделяне със"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Споделяне със: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Плъзгаща се дръжка. Докоснете и задръжте."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Надолу за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Тих режим"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Включване на звука"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Клавиш. Необходими са слушалки, за да чуете клавишите при въвеждането на парола."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Клавиш. Необходими са слушалки, за да чуете клавишите при въвеждането на парола."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Придвижване към „Начало“"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Придвижване нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Още опции"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB хранилище"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Редактиране..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Предупрежд. за ползване на данни"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Ползване и настройки: Докоснете"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G данните са деактивирани"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G данните са деактивирани"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобилните данни са деактивирани"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 1ee5c74..dd3eae6 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<sense títol>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Sense número de telèfon)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Desconegut)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Correu de veu"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permet que l\'aplicació pugui llegir la informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que l\'aplicació et pot identificar i enviar la informació del teu perfil a altres persones."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"escriptura a les teves dades del perfil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permet que l\'aplicació pugui canviar o afegir a la informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que altres aplicacions et poden identificar i enviar la informació del teu perfil a altres persones."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"llegeix el teu tauler d\'activitat social"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permet que l\'aplicació accedeixi a les teves actualitzacions socials i a les dels teus amics i que les sincronitzi. Les aplicacions malicioses poden fer servir aquesta funció per llegir comunicacions privades entre tu i els teus amics a les xarxes socials."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escriu al tauler d\'activitat social"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permet que l\'aplicació mostri actualitzacions socials dels teus amics. Les aplicacions malicioses poden fer servir aquesta funció per fer-se passar per amics teus i per enganyar-te per tal que els revelis contrasenyes o altra informació confidencial."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"llegeix els esdeveniments del calendari més informació confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permet que una aplicació llegeixi tots els esdeveniments de calendari emmagatzemats a la tauleta, inclosos els dels seus amics o els seus companys de feina. Una aplicació maliciosa amb aquest permís pot extreure informació personal d\'aquests calendaris sense el coneixement dels propietaris."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permet que una aplicació llegeixi tots els esdeveniments de calendari emmagatzemats al telèfon, inclosos els dels seus amics o els teus companys de feina. Una aplicació maliciosa amb aquest permís pot extreure informació personal d\'aquests calendaris sense que ho sàpiguen els propietaris."</string>
@@ -1109,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Desfés les supressions."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"No facis res de moment."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecciona un compte"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Addició d\'un compte"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Quin compte vols fer servir?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Afegeix un compte"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementa"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminueix"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> mantén premut."</string>
@@ -1146,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Canvi de mode"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retorn"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Selecciona una aplicació"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Comparteix amb"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Comparteix amb <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Llisca el dit. Mantén premut."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Cap avall per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1155,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Càmera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenci"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Activa el so"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecles. Es necessiten auriculars per escoltar les tecles en escriure una contrasenya."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecles. Es necessiten auriculars per escoltar les tecles en escriure una contrasenya."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Torna a la pàgina d\'inici"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Mou cap a dalt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Més opcions"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 2190b7e..c3a72d8 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<bez názvu>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(žádné telefonní číslo)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Neznámé)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Hlasová schránka"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umožňuje aplikaci číst osobní informace o profilu uložené ve vašem zařízení, jako je jméno a kontaktní informace. To znamená, že vás aplikace může identifikovat a odesílat informace o profilu ostatním."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovat do údajů o profilu"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umožňuje aplikaci měnit a přidávat osobní informace o profilu uložené ve vašem zařízení, jako je jméno a kontaktní informace. To znamená, že vás aplikace může identifikovat a odesílat informace o profilu ostatním."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"číst váš sociální stream"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Umožňuje aplikaci přístup k sociálním aktualizacím od vás a vašich přátel a synchronizaci těchto aktualizací. Škodlivé aplikace toho mohou využít ke čtení soukromé komunikace mezi vámi a vašimi přáteli v sociálních sítích."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zapisovat do vašeho sociálního streamu"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Umožňuje aplikaci zobrazit sociální aktualizace od vašich přátel. Škodlivé aplikace toho mohou využít k předstírání, že jsou vašimi přáteli, a snažit se vás tak přimět k prozrazení hesel nebo jiných důvěrných informací."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"číst události kalendáře a důvěrné informace"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Povolí aplikaci číst všechny události kalendáře uložené ve vašem tabletu, včetně událostí vašich přátel a spolupracovníků. Škodlivá aplikace s tímto oprávněním může z těchto kalendářů extrahovat osobní údaje, aniž by o tom vlastník věděl."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Povolí aplikaci číst všechny události kalendáře uložené ve vašem telefonu, včetně událostí vašich přátel a spolupracovníků. Škodlivá aplikace s tímto oprávněním může z těchto kalendářů extrahovat osobní údaje, aniž by o tom vlastník věděl."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopírovat adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrat text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Výběr textu"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"přidat do slovníku"</string>
+ <string name="deleteText" msgid="7070985395199629156">"smazat"</string>
<string name="inputMethod" msgid="1653630062304567879">"Metoda zadávání dat"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Operace s textem"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Málo paměti"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Vrátit mazání zpět."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Neprovádět akci."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vybrat účet"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Přidat účet"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Který účet chcete použít?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Přidat účet"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšení"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Snížení"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> – Klepněte a podržte."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Změna režimu"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Zvolit aplikaci"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Sdílet s"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Sdílet s aplikací <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Posuvník. Klepněte a podržte."</string>
<string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> – nahoru."</string>
<string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> – dolů."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zapnout zvuk"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Klávesa. Při zadávání hesla je potřeba použít náhlavní soupravu."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Klávesa. Při zadávání hesla je potřeba použít náhlavní soupravu."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Přejít na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Přejít nahoru"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Další možnosti"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Úložiště USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Upravit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Upozornění na využití dat"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Dotykem zobraz. využití a nast."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datové přenosy 2G a 3G zakázány"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datové přenosy 4G jsou zakázány"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilní data jsou zakázána"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index f5a9846..a087c77 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<uden navn>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Intet telefonnummer)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Ukendt)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Voicemail"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Tillader programmet at læse personlige profiloplysninger, som er gemt på din enhed. Disse kan f.eks. være dit navn og dine kontaktoplysninger. Dette betyder, at applikationen kan identificere dig og sende dine profiloplysninger til andre."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"skrive til dine profildata"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Tillader programmet at ændre eller føje til personlige profiloplysninger, som er gemt på din enhed. Disse kan f.eks. være dit navn og dine kontaktoplysninger. Dette betyder, at andre applikationer kan identificere dig og sende dine profiloplysninger til andre."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"læs din sociale strøm"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Tillader, at applikationen får adgang til og synkroniserer sociale opdateringer fra dig og dine venner. Ondsindede apps kan bruge dette til at læse privat kommunikation mellem dig og dine venner på sociale netværk."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skriv i din sociale strøm"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Tillader, at applikationen viser sociale opdateringer fra dine venner. Ondsindede apps kan bruge dette til at foregive at være en ven og narre dig til at afsløre adgangskoder eller andre fortrolige oplysninger."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"læs kalenderbegivenheder plus fortrolige oplysninger"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Tillader, at en applikation kan læse alle kalenderbegivenheder, der er gemt på din tablet, herunder dem venners eller kollegers. En ondsindet applikation med denne tilladelse kan udtrække personlige oplysninger fra disse kalendere uden ejernes viden."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Tillader, at en applikation kan læse alle kalenderbegivenheder gemt på din telefon, herunder dem af venner eller kolleger. En ondsindet applikation med denne tilladelse kan udtrække personlige oplysninger fra disse kalendere uden ejernes viden."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopier webadresse"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstmarkering"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"føj til ordbog"</string>
+ <string name="deleteText" msgid="7070985395199629156">"slet"</string>
<string name="inputMethod" msgid="1653630062304567879">"Inputmetode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksthandlinger"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Der er ikke så meget plads tilbage"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Fortryd sletningerne."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Gør ikke noget lige nu."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vælg en konto"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Tilføj en konto"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Hvilken konto vil du bruge?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Tilføj konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Optælling"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Nedtælling"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tryk og hold <xliff:g id="VALUE">%s</xliff:g> nede."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ændring af tilstand"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Angiv"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Vælg en applikation"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Del med"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Del med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Glidende håndtag. Tryk og hold nede."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Ned for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Lydløs"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Lyd slået til"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tast. Du skal bruge et headset for at høre tastelyde, når du indtaster en adgangskode."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tast. Du skal bruge et headset for at høre tastelyde, når du indtaster en adgangskode."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Naviger hjem"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naviger op"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere valgmuligheder"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-lager"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Rediger..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advarsel om dataforbrug"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Tryk for at få vist brug og indstillinger"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G-data er deaktiveret"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data er deaktiveret"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata er deaktiveret"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index d376fd9..20d84b2 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<Unbenannt>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Keine Telefonnummer)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Unbekannt)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mailbox"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ermöglicht der App, auf Ihrem Gerät gespeicherte persönliche Profilinformationen einzusehen, darunter Ihren Namen und Ihre Kontaktinformationen. Die App kann Sie somit identifizieren und Ihre Profilinformationen an andere senden."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"In Ihre Profildaten schreiben"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ermöglicht der App, auf Ihrem Gerät gespeicherte persönliche Profilinformationen zu ändern, darunter Ihren Namen und Ihre Kontaktinformationen, sowie Informationen hinzuzufügen. Andere Apps können Sie somit identifizieren und Ihre Profilinformationen an andere senden."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"In sozialem Stream lesen"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Diese Berechtigung ermöglicht der App, auf soziale Updates von Ihnen und Ihren Freunden zuzugreifen und diese zu synchronisieren. Schädliche Apps können mithilfe dieser Berechtigung private Kommunikationen zwischen Ihnen und Ihren Freunden in sozialen Netzwerken lesen."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"In sozialem Stream schreiben"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Diese Berechtigung ermöglicht der App, soziale Updates Ihrer Freunde anzuzeigen. Schädliche Apps können sich mithilfe dieser Berechtigung als Freund von Ihnen ausgeben, um an Ihre Passwörter oder andere vertrauliche Informationen zu gelangen."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"Kalendertermine sowie vertrauliche Informationen lesen"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Ermöglicht einer App das Lesen aller Kalendertermine, die auf Ihrem Tablet gespeichert sind, einschließlich der Termine von Freunden oder Kollegen. Schädliche Apps mit dieser Berechtigung können aus diesen Kalendern ohne das Wissen der Eigentümer persönliche Informationen extrahieren."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Ermöglicht einer App das Lesen aller Kalendertermine, die auf Ihrem Telefon gespeichert sind, einschließlich der Termine von Freunden oder Kollegen. Schädliche Apps mit dieser Berechtigung können aus diesen Kalendern ohne das Wissen der Eigentümer persönliche Informationen extrahieren."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"URL kopieren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Text auswählen..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textauswahl"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"Zum Wörterbuch hinzufügen"</string>
+ <string name="deleteText" msgid="7070985395199629156">"Löschen"</string>
<string name="inputMethod" msgid="1653630062304567879">"Eingabemethode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Textaktionen"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Geringer Speicher"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Löschen rückgängig machen"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Im Moment nichts unternehmen"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Konto auswählen"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Konto hinzufügen"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Welches Konto möchten Sie verwenden?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Konto hinzufügen"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Erhöhen"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Verringern"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tippen und halten"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusänderung"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Umschalttaste"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Eingabetaste"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"App wählen"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Teilen mit"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Mit <xliff:g id="APPLICATION_NAME">%s</xliff:g> teilen"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Schieberegler: Tippen und halten"</string>
<string name="description_direction_up" msgid="1983114130441878529">"Für <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben"</string>
<string name="description_direction_down" msgid="4294993639091088240">"Für <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach unten"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Lautlos"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ton ein"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Zum Hören der Tasten bei der Eingabe eines Passworts ist ein Headset erforderlich."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Zum Hören der Tasten bei der Eingabe eines Passworts ist ein Headset erforderlich."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Zur Startseite navigieren"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Nach oben navigieren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Weitere Optionen"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-Speicher"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Bearbeiten..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Warnung zu Datennutzung"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Für Nutzung/Einstell. berühren"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-/3G-Daten deaktiviert"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-Daten deaktiviert"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobile Daten deaktiviert"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 601a054..f638d2b 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<χωρίς τίτλο>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Δεν υπάρχει τηλεφωνικός αριθμός)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Άγνωστο)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Αυτόματος τηλεφωνητής"</string>
@@ -151,7 +152,7 @@
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ο ήχος είναι ενεργοποιημένος"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Λειτουργία πτήσης"</string>
<string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Η λειτουργία πτήσης είναι ενεργοποιημένη."</string>
- <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Η λειτουργία πτήσης είναι απενεργοποιημένη"</string>
+ <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Λειτ. πτήσης είναι ανενεργή"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
<string name="safeMode" msgid="2788228061547930246">"Ασφαλής λειτουργία"</string>
<string name="android_system_label" msgid="6577375335728551336">"Σύστημα Android"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Επιτρέπει στην εφαρμογή να διαβάζει τις πληροφορίες του προσωπικού προφίλ που έχουν αποθηκευτεί στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι η εφαρμογή μπορεί να σας αναγνωρίσει και να στείλει πληροφορίες του προφίλ σας σε άλλους."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"εγγρ. σε δεδ. προφίλ"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Επιτρέπει στην εφαρμογή την αλλαγή ή την προσθήκη στο προσωπικό προφίλ πληροφοριών οι οποίες έχουν αποθηκευτεί στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι άλλες εφαρμογές μπορούν να σας αναγνωρίσουν και να στείλουν πληροφορίες του προφίλ σας σε άλλους."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"διαβάστε τη ροή σας κοινωνικών δικτύων"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση και να συγχρονίζει τις ενημερώσεις κοινωνικού περιεχομένου από τους φίλους σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαβάσουν απόρρητες επικοινωνίες μεταξύ εσάς και των φίλων σας σε κοινωνικά δίκτυα."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"γράψτε στη ροή σας κοινωνικών δικτύων"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Επιτρέπει στην εφαρμογή να εμφανίζει τις ενημερώσεις κοινωνικού περιεχομένου από τους φίλους σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν, να προσποιηθούν ότι πρόκειται για φίλους σας και να σας εξαπατήσουν ώστε να αποκαλύψετε τους κωδικούς σας ή άλλες εμπιστευτικές πληροφορίες."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"ανάγνωση συμβάντων ημερολογίου και εμπιστευτικών πληροφοριών"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Επιτρέπει σε μια εφαρμογή να διαβάζει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο tablet σας, συμπεριλαμβανομένων των συμβάντων φίλων ή συναδέλφων. Μια κακόβουλη εφαρμογή με αυτήν την άδεια μπορεί να εξαγάγει προσωπικά στοιχεία από αυτά τα ημερολόγια χωρίς να το γνωρίζουν οι κάτοχοί τους."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Επιτρέπει σε μια εφαρμογή να διαβάζει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο τηλέφωνό σας, συμπεριλαμβανομένων των συμβάντων φίλων ή συναδέλφων. Μια κακόβουλη εφαρμογή με αυτήν την άδεια μπορεί να εξαγάγει προσωπικά στοιχεία από αυτά τα ημερολόγια χωρίς να το γνωρίζουν οι κάτοχοί τους."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Αντιγραφή διεύθυνσης URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Επιλογή κειμένου..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Επιλογή κειμένου"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"προσθήκη στο λεξικό"</string>
+ <string name="deleteText" msgid="7070985395199629156">"διαγραφή"</string>
<string name="inputMethod" msgid="1653630062304567879">"Μέθοδος εισόδου"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Ενέργειες κειμένου"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Απομένει λίγος ελεύθερος χώρος"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Αναίρεση των διαγραφών."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Να μην γίνει καμία ενέργεια τώρα."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Επιλογή λογαριασμού"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Προσθήκη λογαριασμού"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Ποιον λογαριασμό θέλετε να χρησιμοποιήσετε;"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Προσθήκη λογαριασμού"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Αύξηση"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Μείωση"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Πατήστε και κρατήστε πατημένο το <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Αλλαγή τρόπου"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Επιλέξτε μια εφαρμογή"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Κοινή χρήση με"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Κοινή χρήση με <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Στοιχείο χειρισμού με δυνατότητα ολίσθησης. Πατήστε παρατεταμένα."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Κύλιση πάνω <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Κύλιση κάτω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Φωτογραφική μηχανή"</string>
<string name="description_target_silent" msgid="893551287746522182">"Αθόρυβο"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ενεργοποίηση ήχου"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Πλήκτρο. Για να ακούσετε τον ήχο του πατήματος των πλήκτρων απαιτούνται ακουστικά."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Πλήκτρο. Για να ακούσετε τον ήχο του πατήματος των πλήκτρων απαιτούνται ακουστικά."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Πλοήγηση στην αρχική σελίδα"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Πλοήγηση προς τα επάνω"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Περισσότερες επιλογές"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Χώρος αποθήκευσης USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Επεξεργασία..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Προειδοποίηση χρήσης δεδομένων"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Αγγ.για προβ.της χρ.και των ρυθ."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Τα δεδ. 2G-3G απενεργοποιήθηκαν"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Τα δεδομ. κιν. τηλεφ. απενεργοπ."</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 82e97e0..49fb6ea 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<untitled>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(No phone number)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Unknown)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Voicemail"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Allows the application to read personal profile information stored on your device, such as your name and contact information. This means that the application can identify you and send your profile information to others."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"write to your profile data"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Allows the application to change or add to personal profile information stored on your device, such as your name and contact information. This means that other applications can identify you and send your profile information to others."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"read your social stream"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Allows the application to access and sync social updates from you and your friends. Malicious apps can use this to read private communications between you and your friends on social networks."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"write to your social stream"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Allows the application to display social updates from your friends. Malicious apps can use this to pretend to be a friend and trick you into revealing passwords or other confidential information."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"read calendar events plus confidential information"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Allows an application to read all calendar events stored on your tablet, including those of friends or colleagues. A malicious application with this permission can extract personal information from these calendars without the owners\' knowledge."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Allows an application to read all calendar events stored on your phone, including those of friends or colleagues. A malicious application with this permission can extract personal information from these calendars without the owners\' knowledge."</string>
@@ -1109,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Undo the deletions."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Do nothing for now."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Select an account"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Add an account"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Which account would you like to use?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Add account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Increment"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrement"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tap and hold."</string>
@@ -1146,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Choose an application"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Share with"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Sliding handle. Tap and hold."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Down for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1155,7 +1160,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silent"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sound on"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Key. Headset required to hear keys while typing a password."</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Plug in a headset to hear password keys spoken aloud."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigate home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigate up"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"More options"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 721b0c7..cbf0556 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<sin título>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(No hay número de teléfono)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Desconocida)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Correo de voz"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que la aplicación lea información personal del perfil almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que la aplicación puede identificarte y enviar tu información de perfil a otras personas."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"Escrib. en datos de tu perfil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que la aplicación cambie o agregue información personal del perfil almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que otras aplicaciones pueden identificarte y enviar tu información de perfil a otras personas."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"Lectura de tu muro social"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permite que la aplicación acceda a tus actualizaciones sociales y a las de tus amigos y las sincronice. Las aplicaciones maliciosas pueden usar este permiso para acceder a las comunicaciones privadas que mantienes con tus amigos en las redes sociales."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Escritura en tu muro social"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permite que la aplicación muestre las actualizaciones sociales de tus amigos. Las aplicaciones maliciosas pueden usar este permiso para hacerse pasar por un amigo y engañarte para que reveles contraseñas u otros datos confidenciales."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"Leer eventos de calendario e información confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que una aplicación lea todos los eventos de calendario almacenados en la tableta, incluidos los de tus amigos o compañeros de trabajo. Una aplicación maliciosa con este permiso puede extraer información personal de estos calendarios sin que los propietarios lo sepan."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que una aplicación lea todos los eventos del calendario almacenados en tu teléfono, incluidos los de tus amigos o compañeros de trabajo. Una aplicación maliciosa con este permiso puede extraer información personal de estos calendarios sin que los propietarios lo sepan."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selección de texto"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"Agregar al diccionario"</string>
+ <string name="deleteText" msgid="7070985395199629156">"eliminar"</string>
<string name="inputMethod" msgid="1653630062304567879">"Método de entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acciones de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Poco espacio de almacenamiento"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Deshacer eliminaciones."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"No hagas nada por el momento."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Agregar una cuenta"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"¿Qué cuenta deseas usar?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Agregar una cuenta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decremento"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Mantenga presionado <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio de modo"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayúscula"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingresar"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Elegir una aplicación"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Compartir con"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Asidero deslizante (tocar y mantener la presión)"</string>
<string name="description_direction_up" msgid="1983114130441878529">"Hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_down" msgid="4294993639091088240">"Hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecla. Se requieren auriculares para escuchar el sonido de las teclas al ingresar una contraseña."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecla. Se requieren auriculares para escuchar el sonido de las teclas al ingresar una contraseña."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Desplazarse hasta la página principal"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Almacenamiento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advertencia de uso de datos"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Toca para ver uso y config."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datos de 2 GB - 3 GB desactivados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos de 4 GB desactivados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles desactivados"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index dc3a630..d268827 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<sin título>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"..."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Sin número de teléfono)"</string>
<string name="unknownName" msgid="2277556546742746522">"Desconocido"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Buzón de voz"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que la aplicación acceda a información del perfil personal almacenada en el dispositivo (como tu nombre o la información de contacto), lo que significa que la aplicación puede identificarte y enviar la información de tu perfil a otros usuarios."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"escribir en datos de tu perfil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que la aplicación modifique la información del perfil personal almacenada en el dispositivo (como tu nombre o la información de contacto) o que añada contenido a esta información, lo que significa que otras aplicaciones pueden identificarte y enviar la información de tu perfil a otros usuarios."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"consulta tu actividad social"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permite que la aplicación acceda a las actualizaciones sociales de tus amigos y las sincronice. Las aplicaciones malintencionadas pueden usar este permiso para leer conversaciones privadas con tus amigos en las redes sociales."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escribir en tu actividad social"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permite que la aplicación muestre actualizaciones sociales de tus amigos. Las aplicaciones malintencionadas pueden usar este permiso para suplantar la identidad de un amigo y hacer que reveles tus contraseñas u otra información confidencial."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"leer eventos de calendario e información confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que una aplicación lea todos los eventos de calendario almacenados en el tablet, incluidos los de tus amigos o tus compañeros de trabajo. Las aplicaciones malintencionadas con este permiso pueden extraer información personal de estos calendarios sin el consentimiento de los propietarios."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que una aplicación lea todos los eventos de calendario almacenados en el teléfono, incluidos los de tus amigos o tus compañeros de trabajo. Las aplicaciones malintencionadas con este permiso pueden extraer información personal de estos calendarios sin el consentimiento de los propietarios."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selección de texto"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"añadir al diccionario"</string>
+ <string name="deleteText" msgid="7070985395199629156">"eliminar"</string>
<string name="inputMethod" msgid="1653630062304567879">"Método de introducción de texto"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acciones de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Poco espacio"</string>
@@ -893,7 +894,7 @@
<string name="anr_application_process" msgid="7208175830253210526">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> no responde. ¿Quieres cerrarla?"</string>
<string name="anr_process" msgid="306819947562555821">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> no responde."\n\n"¿Quieres cerrarlo?"</string>
<string name="force_close" msgid="8346072094521265605">"ACEPTAR"</string>
- <string name="report" msgid="4060218260984795706">"Informe"</string>
+ <string name="report" msgid="4060218260984795706">"Informar"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicación redireccionada"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando."</string>
@@ -992,7 +993,7 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si activas el almacenamiento USB, se detendrán algunas aplicaciones que estás utilizando y estas no estarán disponibles hasta que lo desactives."</string>
<string name="dlg_error_title" msgid="7323658469626514207">"Error de funcionamiento de USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Aceptar"</string>
- <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como un dispositivo de medios"</string>
+ <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como un dispositivo multimedia"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectado como una cámara"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectado como instalador"</string>
<string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a un accesorio USB"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Deshacer las eliminaciones"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"No hacer nada por ahora"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Añadir una cuenta"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"¿Qué cuenta quieres usar?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Añadir cuenta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminuir"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Mantén pulsado <xliff:g id="VALUE">%s</xliff:g>"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio de modo"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayús"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Intro"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Seleccionar una aplicación"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Compartir con"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Tirador deslizante (mantener pulsado)"</string>
<string name="description_direction_up" msgid="1983114130441878529">"Hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_down" msgid="4294993639091088240">"Hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencio"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Se necesitan auriculares para escuchar las teclas mientras se escribe una contraseña."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Se necesitan auriculares para escuchar las teclas mientras se escribe una contraseña."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ir al escritorio"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Almacenamiento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advertencia de uso de datos"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Toca para ver el uso y ajustes"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datos 2G-3G inhabilitados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos 4G inhabilitados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles inhabilitados"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index d40c6d7..2410ccd 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<بدون عنوان>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(بدون شماره تلفن)"</string>
<string name="unknownName" msgid="2277556546742746522">"(ناشناس)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"پست صوتی"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"به برنامه کاربردی اجازه میدهد اطلاعات مربوط به نمایه شخصی ذخیره شده بر روی دستگاه شما مانند نام و اطلاعات تماس شما را بخواند. این بدان معناست که برنامه میتواند شما را شناسایی کند و اطلاعات نمایه شما را به دیگران ارسال نماید."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"نوشتن در دادههای نمایه شما"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"به برنامه کاربردی اجازه میدهد به تغییر و یا اضافه کردن اطلاعات نمایه شخصی ذخیره شده بر روی دستگاه شما مانند نام و اطلاعات تماس شما، بپردازد. این بدان معناست که برنامههای دیگر میتوانند شما را شناسایی کنند و اطلاعات نمایه شما را به دیگران ارسال نمایند."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"خواندن جریان اجتماعی شما"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"به برنامه کاربردی امکان میدهد تا به بهروزرسانیهای شما و دوستانتان دسترسی داشته باشند و آنها را همگام کنند. برنامههای مخرب میتوانند از آن برای خواندن ارتباطات خصوصی بین شما و دوستانتان در شبکههای اجتماعی استفاده کنند."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"نوشتن در جریان اجتماعی شما"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"به برنامه کاربردی امکان میدهد تا به بهروزرسانیهای دوستان شما دسترسی داشته باشد. برنامههای مخرب میتوانند از آن استفاده کرده و وانمود کنند که دوست شما هستند، و شما را فریب دهند تا گذرواژه یا دیگر اطلاعات محرمانه خود را در اختیار آنها قرار دهید."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"خواندن رویدادهای تقویم به همراه اطلاعات محرمانه"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"به برنامه اجازه خواندن تمام رویدادهای تقویم موجود در رایانه لوحی شما را میدهد که این شامل تقویم دوستان و همکاران نیز میشود. یک برنامه مخرب با این اجازه میتواند بدون اطلاع مالک، اطلاعات شخصی را از این تقویمها استخراج کند."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"به یک برنامه کاربردی اجازه خواندن تمام رویدادهای تقویم موجود در گوشی شما را میدهد که این شامل تقویم دوستان و همکاران نیز میشود. یک برنامه مخرب با این اجازه میتواند بدون اطلاع مالک، اطلاعات شخصی را از این تقویمها استخراج کند."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"انتخاب متن..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"انتخاب متن"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"افزودن به فرهنگ لغت"</string>
+ <string name="deleteText" msgid="7070985395199629156">"حذف"</string>
<string name="inputMethod" msgid="1653630062304567879">"روش ورودی"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"عملکردهای متنی"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"فضا کم است"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"لغو موارد حذف شده."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"اکنون هیچ کاری انجام نشود."</string>
<string name="choose_account_label" msgid="4191313562041125787">"انتخاب یک حساب"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"افزودن یک حساب"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"از کدام حساب میخواهید استفاده کنید؟"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"افزودن حساب"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"افزایش"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"کاهش"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> ضربه بزنید و نگه دارید."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"تغییر حالت"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"انتخاب برنامه کاربردی"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"اشتراکگذاری با"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"اشتراکگذاری با <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"کنترل کننده کشویی. ضربه زده و نگه دارید."</string>
<string name="description_direction_up" msgid="1983114130441878529">"بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"پایین برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"دوربین"</string>
<string name="description_target_silent" msgid="893551287746522182">"ساکت"</string>
<string name="description_target_soundon" msgid="30052466675500172">"صدا روشن"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"کلید. برای شنیدن کلیدها هنگام تایپ یک گذرواژه به گوشی نیاز است."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"کلید. برای شنیدن کلیدها هنگام تایپ یک گذرواژه به گوشی نیاز است."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"رفتن به صفحه اصلی"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"حرکت به بالا"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"سایر گزینه ها"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"حافظه USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"ویرایش..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"هشدار میزان استفاده از داده"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"لمس برای مشاهده مصرف و تنظیمات"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"داده های 2G-3G غیرفعال شد"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"داده 4G غیر فعال شده است"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"داده های تلفن همراه غیرفعال شد"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 1462df4..841ffb7 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<nimetön>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ei puhelinnumeroa)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Tuntematon)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Vastaaja"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Sallii sovelluksen lukea yksityisiä profiilitietoja, kuten nimen ja yhteystiedot. Haittaohjelmat voivat käyttää tätä käyttäjien tunnistamiseen ja profiilitietojen levittämiseen muille."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"kirjoittaa profiilin tietoihin"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Sallii sovelluksen muuttaa tai lisätä laitteellesi tallennettuja yksityisiä profiilitietoja. Haittaohjelmat voivat käyttää tätä tunnistamiseesi ja profiilitietojesi lähettämiseen muille."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lue sosiaalista streamia"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Antaa sovelluksen käyttää ja synkronoida sinun ja kavereidesi päivityksiä sosiaalisista palveluista. Haitalliset sovellukset voivat käyttää tätä sosiaalisissa verkostoissa kavereidesi kanssa käytyjen yksityisten keskustelujen lukemiseen."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"kirjoita sosiaaliseen streamiin"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Antaa sovelluksen näyttää kavereidesi päivityksiä sosiaalisista palveluista. Haitalliset sovellukset voivat tämän asetuksen avulla tekeytyä kaveriksesi ja huijata sinua paljastamaan salasanoja tai muita luottamuksellisia tietoja."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lue kalenteritapahtumia ja luottamuksellisia tietoja"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Antaa sovelluksen lukea kaikkia tablet-laitteelle tallennettuja kalenteritapahtumia (myös kavereiden ja työkavereiden lisäämiä). Haitalliset sovellukset voivat noutaa henkilötietoja kalentereista ilman omistajien lupaa."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Antaa sovelluksen lukea kaikkia puhelimeen tallennettuja kalenteritapahtumia (myös kavereiden ja työkavereiden lisäämiä). Haitalliset sovellukset voivat noutaa henkilötietoja kalentereista ilman omistajien lupaa."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopioi URL-osoite"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekstin valinta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstin valinta"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"lisää sanakirjaan"</string>
+ <string name="deleteText" msgid="7070985395199629156">"poista"</string>
<string name="inputMethod" msgid="1653630062304567879">"Syöttötapa"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tekstitoiminnot"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Tila vähissä"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Kumoa poistot."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Älä tee mitään."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Valitse tili"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Lisää tili"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Mitä tiliä haluaisit käyttää?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Lisää tili"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Lisää"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Vähennä"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> kosketa pitkään."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Tilan muutos"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Valitse sovellus"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Jaa seuraavien kanssa:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Jaa sovelluksessa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Liukuva valitsin. Kosketa pitkään."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Ylös: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Alas: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Äänetön"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ääni käytössä"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Näppäin. Tarvitset kuulokkeet kuullaksesi näppäimenpainallukset kirjoittaessasi salasanaa."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Näppäin. Tarvitset kuulokkeet kuullaksesi näppäimenpainallukset kirjoittaessasi salasanaa."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Siirry etusivulle"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Siirry ylös"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lisää asetuksia"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-tallennustila"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Muokkaa..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Tiedonsiirtovaroitus"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Näytä käyttö ja asetukset koskettamalla"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiilitiedonsiirto pois käytöstä"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index c5e692b..08b6d0d 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<sans titre>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Aucun numéro de téléphone)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Inconnu)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Messagerie vocale"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permet à l\'application de lire les informations de profil personnelles stockées sur votre appareil, telles que votre nom et vos coordonnées. Cela signifie que l\'application peut vous identifier et envoyer vos informations de profil à d\'autres."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"modifier vos données de profil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permet à l\'application de modifier ou d\'ajouter des informations personnelles stockées sur le profil de votre appareil, telles que votre nom et vos coordonnées. Cela signifie que d\'autres applications peuvent vous identifier et envoyer vos informations de profil à d\'autres."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lire flux des réseaux sociaux"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permet à l\'application d\'accéder aux mises à jour de vos amis sur les réseaux sociaux et de les synchroniser. Les applications malveillantes peuvent utiliser cette fonctionnalité pour accéder à des communications privées entre vous et vos amis sur ces réseaux."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Mettre à jour sur vos flux"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permet à l\'application d\'afficher les mises à jour de vos amis sur les réseaux sociaux. Les applications malveillantes peuvent utiliser cette fonctionnalité pour se faire passer pour un ami et vous inciter à révéler des mots de passe ou autres informations confidentielles."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"consulter les événements d\'agenda ainsi que les informations confidentielles"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permet à une application de lire tous les événements d\'agendas stockés sur votre tablette, y compris ceux de vos amis ou de vos collègues. Une application malveillante disposant de cette autorisation peut extraire des informations personnelles de ces agendas à l\'insu de leur propriétaire."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permet à une application de consulter tous les événements d\'agendas stockés sur votre téléphone, y compris ceux de vos amis ou de vos collègues. Une application malveillante disposant de cette autorisation peut extraire des informations personnelles de ces agendas à l\'insu de leur propriétaire."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copier l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Sélect. le texte..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Sélection de texte"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"ajouter au dictionnaire"</string>
+ <string name="deleteText" msgid="7070985395199629156">"supprimer"</string>
<string name="inputMethod" msgid="1653630062304567879">"Mode de saisie"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Actions sur le texte"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Espace disponible faible"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Annuler les suppressions"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ne rien faire pour l\'instant"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Sélectionner un compte"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Ajouter un compte"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Quel compte souhaitez-vous utiliser ?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Ajouter un compte"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Augmenter"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuer"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> appuyez de manière prolongée."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Changement de mode"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Entrée"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Sélectionnez une application"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Partager avec"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Partager avec <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Poignée coulissante. Appuyez de manière prolongée."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_down" msgid="4294993639091088240">"Vers le bas pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string>
<string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Touche : casque nécessaire pour entendre le son des touches lorsque vous saisissez un mot de passe."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Touche : casque nécessaire pour entendre le son des touches lorsque vous saisissez un mot de passe."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Retour à l\'accueil"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Parcourir vers le haut"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Plus d\'options"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Mémoire de stockage USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Modifier..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Avertissement utilisation données"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Appuyez pour voir utilis./param."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Données 2G-3G désactivées"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Données 4G désactivées"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Données mobiles désactivées"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index ab6eb93..7c64d5e 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<bez naslova>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nema telefonskog broja)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Nepoznato)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Govorna pošta"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Aplikaciji omogućuje čitanje osobnih informacija profila koje su pohranjene na vašem uređaju, poput vašeg imena i kontaktnih podataka. To znači da vas aplikacija može identificirati i slati informacije vašeg profila drugima."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje u podatke profila"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Aplikaciji omogućuje promjenu ili dodavanje informacija u osobne informacije profila koje su spremljene na vašem uređaju, poput vašeg imena i kontaktnih podataka. To znači da vas druge aplikacije mogu identificirati i slati informacije vašeg profila drugima."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"čitanje društvenog streama"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Aplikaciji omogućuje pristup i sinkronizaciju društvenih ažuriranja vaših prijatelja. Zlonamjerne aplikacije to mogu upotrijebiti za pristup privatnim porukama između vas i vaših prijatelja na društvenim mrežama."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"pisanje društvenog streama"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Aplikaciji omogućuje prikazivanje društvenih ažuriranja vaših prijatelja. Zlonamjerne aplikacije to mogu upotrijebiti kako bi se predstavile kao prijatelj i zavarale vas da otkrijete zaporke ili druge povjerljive informacije."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"čitajte kalendarske događaje i povjerljive informacije"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Aplikaciji omogućuje čitanje svih kalendarskih događaja pohranjenih na tabletnom računalu, uključujući događaje prijatelja ili suradnika. Zlonamjerna aplikacija s tim dopuštenjem može izdvajati osobne podatke iz tih kalendara bez znanja vlasnika."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Aplikaciji omogućuje čitanje svih kalendarskih događaja na vašem telefonu, uključujući događaje prijatelja ili suradnika. Zlonamjerne aplikacije s tim dopuštenjem mogu izdvajati osobne podatke iz tih kalendara bez znanja vlasnika."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Odabir teksta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Odabir teksta"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"dodaj u rječnik"</string>
+ <string name="deleteText" msgid="7070985395199629156">"izbriši"</string>
<string name="inputMethod" msgid="1653630062304567879">"Način unosa"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Radnje s tekstom"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Prostora ima sve manje"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Poništi brisanja."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Za sad nemoj ništa učiniti."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Odaberite račun"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Dodajte račun"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Koji račun želite upotrebljavati?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Dodaj račun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povećaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Smanji"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> dotaknite i držite."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Promjena načina"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Odaberite aplikaciju"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Dijeljenje sa"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Dijeli s aplikacijom <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Klizna ručka. Dotaknite i držite."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Dolje za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Bešumno"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zvuk je uključen"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tipka. Da bi se pri upisivanju zaporke čule tipke, potrebne su slušalice."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tipka. Da bi se pri upisivanju zaporke čule tipke, potrebne su slušalice."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Kreni na početnu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Kreni gore"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Više opcija"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB pohrana"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Uređivanje..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Upozorenje o upotrebi podataka"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Pogledajte upotrebu i postavke"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G podaci su onemogućeni"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G podaci su onemogućeni"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilni podaci su onemogućeni"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 3e2ae7f..4d898b4 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<névtelen>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nincs telefonszám)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Ismeretlen)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Hangposta"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Engedélyezi, hogy az alkalmazás a készüléken tárolt személyes profiladatokat olvassa, például az Ön nevét és elérhetőségét. Ez azt jelenti, az alkalmazás képes az Ön azonosítására, és elküldheti a profiladatokat másoknak."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"írás a profiladatokba"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Engedélyezi, hogy az alkalmazás megváltoztassa vagy hozzáadja a készüléken tárolt személyes profiladatokat, például az Ön nevét és elérhetőségét. Ez azt jelenti, hogy más alkalmazások is azonosíthatják Önt, és elküldhetik a profiladatokat másoknak."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"közösségi adatfolyam olvasása"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Lehetővé teszi az alkalmazásnak, hogy hozzáférjen közösségi frissítéseihez, és szinkronizálja azokat. Rosszindulatú alkalmazások használhatják ezt, hogy hozzáférjenek barátaival történő magánbeszélgetéseihez a közösségi hálózatokon."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"írás a közösség adatfolyamra"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Lehetővé teszi az alkalmazásnak, hogy megjelenítse barátai közösségi frissítéseit. Rosszindulatú alkalmazások használhatják ezt ismerősnek tettetve magukat, hogy jelszavakat és más bizalmas információt csaljanak ki Öntől."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"naptári események és bizalmas információk beolvasása"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Lehetővé teszi egy alkalmazás számára a táblagépén található összes naptári esemény beolvasását, beleértve az ismerőseihez vagy munkatársaihoz tartozó eseményeket is. Ha egy rosszindulatú alkalmazás megkapja ezt az engedélyt, akkor vissza tudja fejteni a személyes adatokat ezekből a naptárakból, a tulajdonos tudomása nélkül."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Lehetővé teszi egy alkalmazás részére, hogy beolvassa a telefonján tárolt összes naptáreseményt, beleértve az ismerősök és kollégák eseményeit is. Ha egy rosszindulatú alkalmazás megkapja ezt az engedélyt, akkor vissza tudja fejteni a személyes adatokat ezekből a naptárakból, a tulajdonos tudomása nélkül."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"URL másolása"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Szöveg kijelölése..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Szöveg kijelölése"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"hozzáadás a szótárhoz"</string>
+ <string name="deleteText" msgid="7070985395199629156">"törlés"</string>
<string name="inputMethod" msgid="1653630062304567879">"Beviteli mód"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Műveletek szöveggel"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Kevés a hely"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Törlés visszavonása."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Most nem."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Fiók kiválasztása"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Fiók hozzáadása"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Melyik alkalmazást szeretné használni?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Fiók hozzáadása"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Növelés"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Csökkentés"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> érintse meg és tartsa"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mód váltása"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Válasszon egy alkalmazást"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Megosztás a következővel:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Ossza meg a következő alkalmazással: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Csúsztatható fogantyú. Érintse meg és tartsa."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Fel: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_down" msgid="4294993639091088240">"Le: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Némítás"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Hang bekapcsolása"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Billentyű. Fülhallgató szükséges, ha hallani szeretné a billentyűket a jelszó megadása közben."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Billentyű. Fülhallgató szükséges, ha hallani szeretné a billentyűket a jelszó megadása közben."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ugrás a főoldalra"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Felfele mozgás"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"További lehetőségek"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-tár"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Szerkesztés..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Adathasználati figyelmeztetés"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Érintse meg az adatokért"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G adatforgalom letiltva"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G adatforgalom letiltva"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil adatforgalom letiltva"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index aea1a4c..c6d600e 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<tanpa judul>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Tidak ada nomor telepon)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Tidak diketahui)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Kotak Pesan"</string>
@@ -219,7 +220,7 @@
<string name="permdesc_enableCarMode" msgid="5673461159384850628">"Mengizinkan aplikasi mengaktifkan mode mobil."</string>
<string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"hentikan proses latar belakang"</string>
<string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"Mengizinkan aplikasi menghentikan proses latar belakang dari aplikasi lainnya, meskipun memori rendah."</string>
- <string name="permlab_forceStopPackages" msgid="1447830113260156236">"paksa berhenti aplikasi yang lain"</string>
+ <string name="permlab_forceStopPackages" msgid="1447830113260156236">"paksa aplikasi lain berhenti"</string>
<string name="permdesc_forceStopPackages" msgid="7263036616161367402">"Mengizinkan aplikasi menghentikan aplikasi lain secara paksa."</string>
<string name="permlab_forceBack" msgid="1804196839880393631">"tutup paksa aplikasi"</string>
<string name="permdesc_forceBack" msgid="6534109744159919013">"Mengizinkan aplikasi menutup dan mengembalikan aktivitas apa pun yang berada di latar depan secara paksa. Tidak pernah diperlukan untuk aplikasi normal."</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Memungkinkan aplikasi membaca informasi profil pribadi yang tersimpan pada perangkat Anda, seperti nama dan informasi kontak. Artinya aplikasi dapat mengidentifikasi Anda dan mengirimkan informasi profil Anda kepada orang lain."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"menulis ke data profil Anda"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Memungkinkan aplikasi mengubah atau menambah informasi profil pribadi yang tersimpan pada perangkat Anda, seperti nama dan informasi kontak. Artinya aplikasi lain dapat mengidentifikasi Anda dan mengirimkan informasi profil Anda kepada orang lain."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"membaca aliran sosial Anda"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Mengizinkan aplikasi untuk mengakses dan menyinkronkan pembaruan sosial dari Anda dan teman. Aplikasi berbahaya dapat menggunakan ini untuk membaca komunikasi pribadi antara Anda dan teman di jaringan sosial."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"menulis ke aliran sosial Anda"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Mengizinkan aplikasi untuk menampilkan pembaruan sosial dari teman Anda. Aplikasi berbahaya dapat menggunakan ini untuk berpura-pura menjadi seorang teman dan menipu Anda untuk mengungkapkan sandi atau informasi rahasia lainnya."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"baca acara kalender serta informasi rahasia"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Memungkinkan aplikasi membaca semua acara kalender yang disimpan pada tablet Anda, termasuk acara teman atau rekan kerja. Aplikasi berbahaya dengan izin ini dapat mengambil informasi pribadi dari kalender ini tanpa sepengetahuan pemilik."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Memungkinkan aplikasi membaca semua acara kalender yang disimpan di ponsel Anda, termasuk acara teman atau rekan kerja. Aplikasi berbahaya dengan izin ini dapat mengambil informasi pribadi dari kalender ini tanpa sepengetahuan pemilik."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"tambahkan ke kamus"</string>
+ <string name="deleteText" msgid="7070985395199629156">"hapus"</string>
<string name="inputMethod" msgid="1653630062304567879">"Metode masukan"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tindakan teks"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Ruang penyimpanan tinggal sedikit"</string>
@@ -992,9 +993,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Jika Anda menghidupkan penyimpanan USB, sebagian aplikasi yang Anda gunakan akan berhenti dan mungkin tidak tersedia sampai Anda mematikan penyimpanan USB."</string>
<string name="dlg_error_title" msgid="7323658469626514207">"Operasi USB gagal"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Terhubung sebagai perangkat media"</string>
- <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Terhubung sebagai kamera"</string>
- <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Terhubung sebagai pemasang"</string>
+ <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Tersambung sebagai perangkat media"</string>
+ <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Tersambung sebagai kamera"</string>
+ <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tersambung sebagai pemasang"</string>
<string name="usb_accessory_notification_title" msgid="7848236974087653666">"Tersambung ke aksesori USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Sentuh untuk opsi USB lainnya"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Format penyimpanan USB"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Urungkan penghapusan."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Jangan lakukan apa pun untuk saat ini."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akun"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Tambahkan akun"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Akun mana yang ingin Anda gunakan?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Tambahkan akun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Penambahan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Pengurangan"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> ketuk dan tahan."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Pengubahan mode"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Pilih aplikasi"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Berbagi dengan"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Berbagi dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Gagang geser. Ketuk dan tahan."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Suara hidup"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tombol. Perlu headset untuk mendengarkan suara tombol saat mengetik sandi."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tombol. Perlu headset untuk mendengarkan suara tombol saat mengetik sandi."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi ke beranda"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi naik"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Opsi lainnya"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Penyimpanan USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Peringatan penggunaan data"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Sentuh utk mlht pnggnaan dan stln"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data 2G-3G dinonaktifkan"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dinonaktifkan"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data seluler dinonaktifkan"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 419caf4..394326e 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<senza nome>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nessun numero di telefono)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Sconosciuto)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Segreteria"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Consente all\'applicazione di leggere le informazioni del profilo personale memorizzato sul dispositivo, come il tuo nome e le tue informazioni di contatto. Ciò significa che l\'applicazione è in grado di identificarti e di inviare le tue informazioni di profilo ad altri."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"scrittura dati del profilo"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Consente all\'applicazione di modificare o aggiungere informazioni al profilo personale memorizzato sul dispositivo, come il tuo nome e le tue informazioni di contatto. Ciò significa che altre applicazioni sono in grado di identificarti e di inviare le tue informazioni di profilo ad altri."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lettura del tuo stream sociale"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Consente all\'applicazione di accedere agli aggiornamenti tuoi e dei tuoi amici dai social network e di sincronizzarli. Le applicazioni dannose possono farne uso per accedere alle comunicazioni private tra te e i tuoi amici sui social network."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"scrittura nel tuo stream sociale"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Consente all\'applicazione di visualizzare aggiornamenti dai tuoi amici che utilizzano social network. Le applicazioni dannose possono farne uso per impersonare un amico e indurti a rivelare password o altre informazioni riservate."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lettura di eventi di calendario e di informazioni riservate"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Consente a un\'applicazione di leggere tutti gli eventi di calendario memorizzati sul tablet, compresi quelli di amici o colleghi. Un\'applicazione dannosa con questa autorizzazione può estrarre informazioni personali dai calendari a insaputa dei proprietari."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Consente a un\'applicazione di leggere tutti gli eventi di calendario memorizzati sul telefono, compresi quelli di amici o colleghi. Un\'applicazione dannosa con questa autorizzazione può estrarre informazioni personali dai calendari a insaputa dei proprietari."</string>
@@ -1109,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Annulla le eliminazioni."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Non fare nulla per ora."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleziona un account"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Aggiungi un account"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Quale account desideri utilizzare?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Aggiungi account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumenta"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuisci"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tocca e tieni premuto il numero <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1146,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio modalità"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maiuscolo"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invio"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Scegli un\'applicazione"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Condividi con"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Condividi con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Maniglia scorrevole. Tocca e tieni premuto."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Giù per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1155,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotocamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenzioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Audio attivato"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tasto. Set auricolari richiesto per udire i tasti durante la digitazione di una password."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tasto. Set auricolari richiesto per udire i tasti durante la digitazione di una password."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Vai in alto"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Altre opzioni"</string>
@@ -1177,7 +1184,7 @@
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> oltre il limite indicato"</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"Dati in background limitati"</string>
<string name="data_usage_restricted_body" msgid="5087354814839059798">"Tocca per rimuovere restrizione"</string>
- <string name="ssl_certificate" msgid="6510040486049237639">"Certificato di protezione"</string>
+ <string name="ssl_certificate" msgid="6510040486049237639">"Certificato di sicurezza"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Questo certificato è valido."</string>
<string name="issued_to" msgid="454239480274921032">"Rilasciato a:"</string>
<string name="common_name" msgid="2233209299434172646">"Nome comune:"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index c0c1695..42a677c 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<ללא כותרת>"</string>
<string name="ellipsis" msgid="7899829516048813237">"???"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(אין מספר טלפון)"</string>
<string name="unknownName" msgid="2277556546742746522">"(לא ידוע)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"דואר קולי"</string>
@@ -329,11 +330,15 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"מאפשר ליישום לקרוא נתוני פרופיל אישי המאוחסנים במכשיר שלך, כגון שמך ופרטי הקשר שלך. משמעות הדבר היא שהיישום יכול לזהות אותך ולשלוח את נתוני הפרופיל שלך לאחרים."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"כתוב בנתוני הפרופיל שלך"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"מאפשר ליישום לשנות או להוסיף לנתוני הפרופיל האישי המאוחסנים במכשיר, כגון שמך ופרטי הקשר שלך. משמעות הדבר היא שיישומים אחרים יכולים לזהות אותך ולשלוח את נתוני הפרופיל שלך לאחרים."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"קריאת הזרם החברתי שלך"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"מאפשר ליישום לגשת לעדכונים חברתיים מהחברים שלך ולסנכרן אותם. יישומים זדוניים יוכלו להשתמש בכך כדי לגשת למסרים שהועברו באופן פרטי בינך לבין חבריך ברשתות חברתיות."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"כתיבה בזרם החברתי שלך"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"מאפשר ליישום להציג עדכונים חברתיים מהחברים שלך. יישומים זדוניים יוכלו להשתמש בכך כדי להתחזות לאחד מחבריך ולדלות ממך בדרכי מרמה סיסמאות או מידע סודי אחר."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"קריאת אירועי לוח שנה וגם מידע סודי"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"מאפשר ליישום לקרוא את כל אירועי לוח השנה שמאוחסנים בטבלט שלך, כולל אירועים של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לחלץ מידע אישי מלוחות שנה אלה ללא ידיעת הבעלים."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"מאפשר ליישום לקרוא את כל אירועי לוח השנה המאוחסנים בטלפון שלך, כולל אירועים של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לחלץ מידע אישי מלוחות השנה האלה ללא ידיעת הבעלים."</string>
<string name="permlab_writeCalendar" msgid="8438874755193825647">"הוספה ושינוי של אירועי לוח שנה ושליחת דוא\"ל לאורחים ללא ידיעת הבעלים"</string>
- <string name="permdesc_writeCalendar" msgid="5368129321997977226">"מאפשר ליישום לשלוח הזמנות לאירוע בתור הבעלים של לוח השנה ולהוסיף, להסיר ולשנות אירועים שניתן לשנות במכשיר, כולל אלה של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לשלוח הודעות דואר זבל שייראו כאילו נשלחו מהבעלים של לוח השנה, לשנות אירועים ללא ידיעת הבעלים או להוסיף אירועים מזויפים."</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"מאפשר ליישום לשלוח הזמנות לאירוע בתור הבעלים של לוח השנה ולהוסיף, להסיר ולשנות אירועים שניתן לשנות במכשיר, כולל אלה של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לשלוח הודעות ספאם שייראו כאילו נשלחו מהבעלים של לוח השנה, לשנות אירועים ללא ידיעת הבעלים או להוסיף אירועים מזויפים."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"צור מקורות מיקום מדומים לצורך בדיקה"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"צור מקורות מיקום מדומים לצורך בדיקה. יישומים זדוניים עלולים להשתמש באפשרות זו כדי לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות המיקום האמיתיים כגון GPS או ספקי רשת."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"גישה לפקודות ספק מיקום נוספות"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
<string name="selectTextMode" msgid="6738556348861347240">"בחר טקסט..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"בחירת טקסט"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"הוסף למילון"</string>
+ <string name="deleteText" msgid="7070985395199629156">"מחק"</string>
<string name="inputMethod" msgid="1653630062304567879">"שיטת קלט"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"פעולות טקסט"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"חסר שטח"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"בטל את המחיקות."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"אל תעשה דבר בינתיים."</string>
<string name="choose_account_label" msgid="4191313562041125787">"בחר חשבון"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"הוסף חשבון"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"באיזה חשבון ברצונך להשתמש?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"הוסף חשבון"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"הגדל"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"הפחת"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> הקש והחזק."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"שינוי מצב"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"בחר יישום"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"שתף עם"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"שתף עם <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"ידית להחלקה. הקש והחזק."</string>
<string name="description_direction_up" msgid="1983114130441878529">"\'למעלה\' עבור <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"\'למטה\' עבור <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"מצלמה"</string>
<string name="description_target_silent" msgid="893551287746522182">"שקט"</string>
<string name="description_target_soundon" msgid="30052466675500172">"הקול פועל"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"מקש. נדרשות אוזניות כדי לשמוע את המקשים בעת הקלדת סיסמה."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"מקש. נדרשות אוזניות כדי לשמוע את המקשים בעת הקלדת סיסמה."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"נווט למעלה"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"אמצעי אחסון מסוג USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"ערוך..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"אזהרת שימוש בנתונים"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"גע כדי להציג נתוני שימוש והגדרות"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"נתוני 2G-3G מושבתים"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"נתוני 4G מושבתים"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"נתונים לנייד מושבתים"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 793e947..ae822b8 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<新規>"</string>
<string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(電話番号なし)"</string>
<string name="unknownName" msgid="2277556546742746522">"(名前)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"ボイスメール"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"端末に保存されている名前や連絡先情報といった個人のプロフィール情報をアプリケーションが読み取ることを許可します。このアプリケーションは身元を特定したり、プロフィール情報を第三者に転送したりする可能性があります。"</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"プロフィールデータに書き込む"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"端末に保存されている名前や連絡先情報といった個人のプロフィール情報をアプリケーションが変更または追加することを許可します。このアプリケーションは身元を特定したり、プロフィール情報を第三者に転送したりする可能性があります。"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ソーシャルストリームを読む"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"あなたや友だちのソーシャルアップデートにアクセスして同期することをアプリに許可します。これにより、悪意のあるアプリがソーシャルネットワーク上で交わされるあなたと友だちの個人的なやり取りを読めるようになります。"</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ソーシャルストリームに書く"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"友だちのソーシャルアップデートの表示をアプリに許可します。これにより、悪意のあるアプリが友だちになりすまし、パスワードなどのあなたの機密情報を入手できるようになります。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"カレンダーの予定と機密情報を読み取る"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"タブレットに保存したすべてのカレンダーの予定(友だちや同僚の予定も含む)を読み取ることをアプリケーションに許可します。悪意のあるアプリケーションにこの許可を与えると、所有者の知らないうちにカレンダーから個人情報が引き出される恐れがあります。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"端末に保存したすべてのカレンダーの予定(友だちや同僚の予定も含む)を読み取ることをアプリケーションに許可します。悪意のあるアプリケーションにこの許可を与えると、所有者の知らないうちにカレンダーから個人情報が引き出される恐れがあります。"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"URLをコピー"</string>
<string name="selectTextMode" msgid="6738556348861347240">"テキストを選択..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"テキスト選択"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"辞書に追加"</string>
+ <string name="deleteText" msgid="7070985395199629156">"削除"</string>
<string name="inputMethod" msgid="1653630062304567879">"入力方法"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"テキスト操作"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"空き容量低下"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"削除を元に戻す"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"今は何もしない"</string>
<string name="choose_account_label" msgid="4191313562041125787">"アカウントを選択"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"アカウントを追加"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"どのアカウントを使用しますか?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"アカウントを追加"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"増やす"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減らす"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g>回タップして押し続けます。"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"モードを変更"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"アプリの選択"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"共有"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>と共有"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"スライダーハンドルです。タップして押し続けます。"</string>
<string name="description_direction_up" msgid="1983114130441878529">"上は<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>です。"</string>
<string name="description_direction_down" msgid="4294993639091088240">"下は<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>です。"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"カメラ"</string>
<string name="description_target_silent" msgid="893551287746522182">"マナーモード"</string>
<string name="description_target_soundon" msgid="30052466675500172">"サウンドON"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"キー。パスワードの入力中にキーの音を聞くにはヘッドセットが必要です。"</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"キー。パスワードの入力中にキーの音を聞くにはヘッドセットが必要です。"</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"ホームへ移動"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"上へ移動"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"その他のオプション"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USBストレージ"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"編集..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"データ使用の警告"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"タップして使用状況と設定を表示"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G~3Gデータが無効になりました"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4Gデータが無効になりました"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"モバイルデータが無効になりました"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 42a6e37..95c35cf 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<제목없음>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(전화번호 없음)"</string>
<string name="unknownName" msgid="2277556546742746522">"(알 수 없음)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"음성메일"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"애플리케이션이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 읽을 수 있도록 합니다. 이것은 애플리케이션이 사용자를 확인하고 다른 사용자들에게 해당 프로필 정보를 전송할 수 있다는 것을 의미합니다."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"프로필 데이터에 쓰기"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"애플리케이션이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 변경하거나 추가할 수 있도록 합니다. 이것은 다른 애플리케이션이 사용자를 확인하고 다른 사용자들에게 해당 프로필 정보를 전송할 수 있다는 것을 의미합니다."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"소셜 스트림 읽기"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"애플리케이션이 나와 친구의 최신 소셜 소식에 액세스하고 동기화할 수 있도록 허용합니다. 이 경우 악성 앱이 소셜 네트워크에서 나와 친구가 주고받은 사적인 내용을 읽을 수 있습니다."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"소셜 스트림에 쓰기"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"애플리케이션이 친구의 최신 소셜 소식을 표시할 수 있도록 허용합니다. 이 경우 악성 앱이 친구로 가장하고 나를 속여 비밀번호나 기타 기밀 정보를 알아낼 수 있습니다."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"캘린더 일정 및 기밀정보 읽기"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"애플리케이션이 친구나 동료의 일정을 포함하여 태블릿에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 권한이 있는 악성 애플리케이션은 소유자 몰래 이러한 캘린더에서 개인정보를 추출할 수 있습니다."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"애플리케이션이 친구나 동료의 일정을 포함하여 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 권한이 있는 악성 애플리케이션은 소유자 몰래 이러한 캘린더에서 개인정보를 추출할 수 있습니다."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"URL 복사"</string>
<string name="selectTextMode" msgid="6738556348861347240">"텍스트 선택..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"텍스트 선택"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"사전에 추가"</string>
+ <string name="deleteText" msgid="7070985395199629156">"삭제"</string>
<string name="inputMethod" msgid="1653630062304567879">"입력 방법"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"텍스트 작업"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"저장공간 부족"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"삭제 실행취소"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"나중에 작업"</string>
<string name="choose_account_label" msgid="4191313562041125787">"계정 선택"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"계정 추가"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"어떤 계정을 사용하시겠습니까?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"계정 추가"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"올리기"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"줄이기"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> 길게 탭하세요."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"모드 변경"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 키"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 키"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"애플리케이션 선택"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"공유 대상:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>와(과) 공유"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"슬라이딩 핸들을 길게 탭하세요."</string>
<string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
<string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 아래로 슬라이드"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"카메라"</string>
<string name="description_target_silent" msgid="893551287746522182">"무음"</string>
<string name="description_target_soundon" msgid="30052466675500172">"사운드 켜기"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"키. 비밀번호를 입력할 때 키 소리를 들으려면 헤드셋이 필요합니다."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"키. 비밀번호를 입력할 때 키 소리를 들으려면 헤드셋이 필요합니다."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"홈 탐색"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"위로 탐색"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"옵션 더보기"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB 저장소"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"수정..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"데이터 사용 경고"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"사용량 및 설정을 보려면 터치하세요."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G 데이터 사용중지됨"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G 데이터 사용중지됨"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"모바일 데이터 사용중지됨"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 3a30114..2a83007 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<be pavadinimo>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nėra telefono numerio)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Nežinomas)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Balso paštas"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Programai leidžiama skaityti įrenginyje saugomą asmeninio profilio informaciją, pvz., vardą ir kontaktinę informaciją. Vadinasi, programa galės jus identifikuoti ir siųsti profilio informaciją kitiems."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"rašyti kaip profilio duomenis"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Programai leidžiama keisti įrenginyje saugomą asmeninio profilio informaciją, pvz., vardą ir kontaktinę informaciją, arba jos pridėti. Vadinasi, kitos programos galės jus identifikuoti ir siųsti profilio informaciją kitiems."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"skaityti socialinį srautą"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Programai leidžiama pasiekti ir sinchronizuoti socialinius draugų naujinius. Tuo pasinaudojusios kenkėjiškos programos gali skaityti jūsų bendravimą su draugais viešuosiuose tinkluose."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"rašyti į socialinį srautą"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Programai leidžiama rodyti socialinius draugų naujinius. Tuo pasinaudojusios kenkėjiškos programos gali apsimesti draugu ir apgaule gauti jūsų slaptažodžius ar kitą konfidencialią informaciją."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"nuskaito kalendoriaus įvykius ir konfidencialią informaciją"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Programai leidžiama nuskaityti visus jūsų planšetiniame kompiuteryje saugomus kalendoriaus įvykius – įskaitant ir jūsų draugų bei bendradarbių. Šį leidimą gavusi kenkėjiška programa gali paimti asmeninius duomenis iš šių kalendorių be savininko žinios."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Programai leidžiama nuskaityti visus jūsų telefone saugomus kalendoriaus įvykius – įskaitant ir jūsų draugų bei bendradarbių. Šį leidimą gavusi kenkėjiška programa gali paimti asmeninius duomenis iš šių kalendorių be savininko žinios."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopijuoti URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pasirinkti tekstą..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksto pasirinkimas"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"pridėti prie žodyno"</string>
+ <string name="deleteText" msgid="7070985395199629156">"ištrinti"</string>
<string name="inputMethod" msgid="1653630062304567879">"Įvesties būdas"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksto veiksmai"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Mažai vietos"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Anuliuoti ištrynimus."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Kol kas nieko nedaryti."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pasirinkti paskyrą"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Pridėti paskyrą"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Kurią paskyrą norite naudoti?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Pridėti paskyrą"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Padidinti"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Sumažinti"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Palieskite <xliff:g id="VALUE">%s</xliff:g> ir laikykite palietę."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režimo keitimas"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Įvesti"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Pasirinkite programą"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Bendrinti su"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Bendrinti su „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Slydimo valdymas. Palieskite ir laikykite."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Aukštyn į <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Žemyn į <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Vaizdo kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Begarsis"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Garsas įjungtas"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Klavišai. Jei norite įvesdami slaptažodį girdėti klavišų garsus, reikia ausinių."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Klavišai. Jei norite įvesdami slaptažodį girdėti klavišų garsus, reikia ausinių."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Naršyti pagrindinį puslapį"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naršyti į viršų"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Daugiau parinkčių"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB atmintis"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Redaguoti..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Įspėjimas dėl duomenų naudojimo"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Palieskite ir žr. naud. ir nust."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G duomenys neleidžiami"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G duomenys neleidžiami"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilieji duomenys neleidžiami"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index e9a01e9..c8dde80 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<bez nosaukuma>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nav tālruņa numura)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Nezināms)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Balss pasts"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ļauj lietojumprogrammai lasīt ierīcē glabāto personiskā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju. Tas nozīmē, ka lietojumprogramma var jūs identificēt un sūtīt jūsu profila informāciju citām personām."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"rakstīšana jūsu profila datos"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ļauj lietojumprogrammai mainīt vai pievienot ierīcē glabāto personiskā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju. Tas nozīmē, ka citas lietojumprogrammas var jūs identificēt un sūtīt jūsu profila informāciju citām personām."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lasīt jūsu soc. tīklu straumi"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Ļauj lietojumprogrammai piekļūt jūsu un jūsu draugu atjauninājumiem sociālajos tīklos un sinhronizēt tos. Ļaunprātīgas lietotnes var izmantot šo atļauju, lai piekļūtu jūsu un jūsu draugu savstarpējām privātām sarunām sociālajos tīklos."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"rakstīt sociālo tīklu straumē"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Ļauj lietojumprogrammai rādīt jūsu draugu atjauninājumus sociālajos tīklos. Ļaunprātīgas lietotnes var izmantot šo atļauju, lai uzdotos par jūsu draugu un mudinātu jūs atklāt paroles vai citu konfidenciālu informāciju."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lasīt kalendāra pasākumus un konfidenciālu informāciju"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Ļauj lietojumprogrammai lasīt visus planšetdatorā saglabātos kalendāra pasākumus, tostarp jūsu draugu un darbabiedru pasākumus. Ļaunprātīga lietojumprogramma, izmantojot šo atļauju, bez īpašnieka ziņas no šiem kalendāriem var iegūt personisku informāciju."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Ļauj lietojumprogrammai lasīt visus tālrunī saglabātos kalendāra pasākumus, tostarp jūsu draugu un darbabiedru pasākumus. Ļaunprātīga lietojumprogramma, izmantojot šo atļauju, bez īpašnieka ziņas no šiem kalendāriem var iegūt personisku informāciju."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopēt URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Atlasīt tekstu..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksta atlase"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"pievienot vārdnīcai"</string>
+ <string name="deleteText" msgid="7070985395199629156">"dzēst"</string>
<string name="inputMethod" msgid="1653630062304567879">"Ievades metode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksta darbības"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Maz brīvas vietas"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Atsauciet dzēšanu."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Pagaidām neveiciet nekādas darbības."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Atlasīt kontu"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Pievienot kontu"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Kuru kontu vēlaties izmantot?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Pievienot kontu"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Palielināt"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Samazināt"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g>: pieskarieties un turiet nospiestu."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režīma maiņa"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Pārslēgšanas taustiņš"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ievadīšanas taustiņš"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Lietojumprogrammas izvēle"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Kopīgot ar:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Kopīgot ar lietojumprogrammu <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Bīdāms rokturis. Pieskarieties tam un turiet to nospiestu."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Bīdiet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Bīdiet uz leju, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Klusums"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Skaņa ieslēgta"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Taustiņš. Lai, rakstot paroli, dzirdētu taustiņu signālus, nepieciešamas austiņas."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Taustiņš. Lai, rakstot paroli, dzirdētu taustiņu signālus, nepieciešamas austiņas."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Pārvietoties uz sākuma ekrānu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Pārvietoties augšup"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Vairāk opciju"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB atmiņa"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Rediģēt..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Datu izmantošanas brīdinājums"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Piesk., lai sk. lietoš. un iest."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G dati ir atspējoti"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G dati ir atspējoti"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilie dati ir atspējoti"</string>
diff --git a/core/res/res/values-mcc204-cs/strings.xml b/core/res/res/values-mcc204-cs/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-da/strings.xml b/core/res/res/values-mcc204-da/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-de/strings.xml b/core/res/res/values-mcc204-de/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-el/strings.xml b/core/res/res/values-mcc204-el/strings.xml
deleted file mode 100644
index 97bfe65..0000000
--- a/core/res/res/values-mcc204-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"el_GR"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-es-rUS/strings.xml b/core/res/res/values-mcc204-es-rUS/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-es/strings.xml b/core/res/res/values-mcc204-es/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-fr/strings.xml b/core/res/res/values-mcc204-fr/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-it/strings.xml b/core/res/res/values-mcc204-it/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-ja/strings.xml b/core/res/res/values-mcc204-ja/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-ko/strings.xml b/core/res/res/values-mcc204-ko/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-nl/strings.xml b/core/res/res/values-mcc204-nl/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-pl/strings.xml b/core/res/res/values-mcc204-pl/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-pt-rPT/strings.xml b/core/res/res/values-mcc204-pt-rPT/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-pt/strings.xml b/core/res/res/values-mcc204-pt/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-ru/strings.xml b/core/res/res/values-mcc204-ru/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-sv/strings.xml b/core/res/res/values-mcc204-sv/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-tr/strings.xml b/core/res/res/values-mcc204-tr/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-zh-rCN/strings.xml b/core/res/res/values-mcc204-zh-rCN/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc204-zh-rTW/strings.xml b/core/res/res/values-mcc204-zh-rTW/strings.xml
deleted file mode 100644
index 7d96230..0000000
--- a/core/res/res/values-mcc204-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"nl_nl"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-cs/strings.xml b/core/res/res/values-mcc230-cs/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-da/strings.xml b/core/res/res/values-mcc230-da/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-de/strings.xml b/core/res/res/values-mcc230-de/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-el/strings.xml b/core/res/res/values-mcc230-el/strings.xml
deleted file mode 100644
index 97bfe65..0000000
--- a/core/res/res/values-mcc230-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"el_GR"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-es-rUS/strings.xml b/core/res/res/values-mcc230-es-rUS/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-es/strings.xml b/core/res/res/values-mcc230-es/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-fr/strings.xml b/core/res/res/values-mcc230-fr/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-it/strings.xml b/core/res/res/values-mcc230-it/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-ja/strings.xml b/core/res/res/values-mcc230-ja/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-ko/strings.xml b/core/res/res/values-mcc230-ko/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-nl/strings.xml b/core/res/res/values-mcc230-nl/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-pl/strings.xml b/core/res/res/values-mcc230-pl/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-pt-rPT/strings.xml b/core/res/res/values-mcc230-pt-rPT/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-pt/strings.xml b/core/res/res/values-mcc230-pt/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-ru/strings.xml b/core/res/res/values-mcc230-ru/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-sv/strings.xml b/core/res/res/values-mcc230-sv/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-tr/strings.xml b/core/res/res/values-mcc230-tr/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-zh-rCN/strings.xml b/core/res/res/values-mcc230-zh-rCN/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc230-zh-rTW/strings.xml b/core/res/res/values-mcc230-zh-rTW/strings.xml
deleted file mode 100644
index d3ecdbb..0000000
--- a/core/res/res/values-mcc230-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"cs_cz"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-cs/strings.xml b/core/res/res/values-mcc232-cs/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-da/strings.xml b/core/res/res/values-mcc232-da/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-de/strings.xml b/core/res/res/values-mcc232-de/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-el/strings.xml b/core/res/res/values-mcc232-el/strings.xml
deleted file mode 100644
index 97bfe65..0000000
--- a/core/res/res/values-mcc232-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"el_GR"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-es-rUS/strings.xml b/core/res/res/values-mcc232-es-rUS/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-es/strings.xml b/core/res/res/values-mcc232-es/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-fr/strings.xml b/core/res/res/values-mcc232-fr/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-it/strings.xml b/core/res/res/values-mcc232-it/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-ja/strings.xml b/core/res/res/values-mcc232-ja/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-ko/strings.xml b/core/res/res/values-mcc232-ko/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-nl/strings.xml b/core/res/res/values-mcc232-nl/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-pl/strings.xml b/core/res/res/values-mcc232-pl/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-pt-rPT/strings.xml b/core/res/res/values-mcc232-pt-rPT/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-pt/strings.xml b/core/res/res/values-mcc232-pt/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-ru/strings.xml b/core/res/res/values-mcc232-ru/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-sv/strings.xml b/core/res/res/values-mcc232-sv/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-tr/strings.xml b/core/res/res/values-mcc232-tr/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-zh-rCN/strings.xml b/core/res/res/values-mcc232-zh-rCN/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc232-zh-rTW/strings.xml b/core/res/res/values-mcc232-zh-rTW/strings.xml
deleted file mode 100644
index 4773838..0000000
--- a/core/res/res/values-mcc232-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_at"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-cs/strings.xml b/core/res/res/values-mcc234-cs/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-da/strings.xml b/core/res/res/values-mcc234-da/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-de/strings.xml b/core/res/res/values-mcc234-de/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-el/strings.xml b/core/res/res/values-mcc234-el/strings.xml
deleted file mode 100644
index 97bfe65..0000000
--- a/core/res/res/values-mcc234-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"el_GR"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-es-rUS/strings.xml b/core/res/res/values-mcc234-es-rUS/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-es/strings.xml b/core/res/res/values-mcc234-es/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-fr/strings.xml b/core/res/res/values-mcc234-fr/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-it/strings.xml b/core/res/res/values-mcc234-it/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-ja/strings.xml b/core/res/res/values-mcc234-ja/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-ko/strings.xml b/core/res/res/values-mcc234-ko/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-nl/strings.xml b/core/res/res/values-mcc234-nl/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-pl/strings.xml b/core/res/res/values-mcc234-pl/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-pt-rPT/strings.xml b/core/res/res/values-mcc234-pt-rPT/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-pt/strings.xml b/core/res/res/values-mcc234-pt/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-ru/strings.xml b/core/res/res/values-mcc234-ru/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-sv/strings.xml b/core/res/res/values-mcc234-sv/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-tr/strings.xml b/core/res/res/values-mcc234-tr/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-zh-rCN/strings.xml b/core/res/res/values-mcc234-zh-rCN/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc234-zh-rTW/strings.xml b/core/res/res/values-mcc234-zh-rTW/strings.xml
deleted file mode 100644
index 2538b73..0000000
--- a/core/res/res/values-mcc234-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"en_gb"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-da/strings.xml b/core/res/res/values-mcc260-da/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-de/strings.xml b/core/res/res/values-mcc260-de/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-el/strings.xml b/core/res/res/values-mcc260-el/strings.xml
deleted file mode 100644
index 97bfe65..0000000
--- a/core/res/res/values-mcc260-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"el_GR"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-es-rUS/strings.xml b/core/res/res/values-mcc260-es-rUS/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-es/strings.xml b/core/res/res/values-mcc260-es/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-fr/strings.xml b/core/res/res/values-mcc260-fr/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-it/strings.xml b/core/res/res/values-mcc260-it/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-ja/strings.xml b/core/res/res/values-mcc260-ja/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-ko/strings.xml b/core/res/res/values-mcc260-ko/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-nl/strings.xml b/core/res/res/values-mcc260-nl/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-pl/strings.xml b/core/res/res/values-mcc260-pl/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-pt-rPT/strings.xml b/core/res/res/values-mcc260-pt-rPT/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-pt/strings.xml b/core/res/res/values-mcc260-pt/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-ru/strings.xml b/core/res/res/values-mcc260-ru/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-sv/strings.xml b/core/res/res/values-mcc260-sv/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-tr/strings.xml b/core/res/res/values-mcc260-tr/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-zh-rCN/strings.xml b/core/res/res/values-mcc260-zh-rCN/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc260-zh-rTW/strings.xml b/core/res/res/values-mcc260-zh-rTW/strings.xml
deleted file mode 100644
index 1161f9a..0000000
--- a/core/res/res/values-mcc260-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"pl_pl"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-cs/strings.xml b/core/res/res/values-mcc262-cs/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-da/strings.xml b/core/res/res/values-mcc262-da/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-de/strings.xml b/core/res/res/values-mcc262-de/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-el/strings.xml b/core/res/res/values-mcc262-el/strings.xml
deleted file mode 100644
index 97bfe65..0000000
--- a/core/res/res/values-mcc262-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"el_GR"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-es-rUS/strings.xml b/core/res/res/values-mcc262-es-rUS/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-es/strings.xml b/core/res/res/values-mcc262-es/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-fr/strings.xml b/core/res/res/values-mcc262-fr/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-it/strings.xml b/core/res/res/values-mcc262-it/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-ja/strings.xml b/core/res/res/values-mcc262-ja/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-ko/strings.xml b/core/res/res/values-mcc262-ko/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-nl/strings.xml b/core/res/res/values-mcc262-nl/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-pl/strings.xml b/core/res/res/values-mcc262-pl/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-pt-rPT/strings.xml b/core/res/res/values-mcc262-pt-rPT/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-pt/strings.xml b/core/res/res/values-mcc262-pt/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-ru/strings.xml b/core/res/res/values-mcc262-ru/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-sv/strings.xml b/core/res/res/values-mcc262-sv/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-tr/strings.xml b/core/res/res/values-mcc262-tr/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-zh-rCN/strings.xml b/core/res/res/values-mcc262-zh-rCN/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-mcc262-zh-rTW/strings.xml b/core/res/res/values-mcc262-zh-rTW/strings.xml
deleted file mode 100644
index 9505cf4..0000000
--- a/core/res/res/values-mcc262-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="locale_replacement">"de_de"</string>
-</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index bdb43ee..a2ae911 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<tidak bertajuk>"</string>
<string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Tiada nombor telefon)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Tidak diketahui)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mel suara"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Membenarkan aplikasi untuk membaca maklumat profil peribadi yang disimpan pada peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna aplikasi itu boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"tulis ke data profil anda"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Membenarkan aplikasi untuk menukar atau menambah maklumat profil peribadi yang disimpan pada peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna aplikasi lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"baca aliran sosial anda"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Membenarkan aplikasi mengakses dan menyegerakkan kemas kini sosial daripada rakan-rakan anda. Aplikasi berniat jahat boleh menggunakan ini untuk membaca komunikasi peribadi di antara anda dan rakan-rakan anda pada rangkaian sosial."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"tulis ke aliran sosial anda"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Membenarkan aplikasi memaparkan kemas kini sosial daripada rakan-rakan anda. Aplikasi berniat jahat boleh menggunakan ini untuk berpura-pura menjadi rakan dan memperdayakan anda untuk mendedahkan kata laluan atau maklumat sulit lain."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"baca acara kalendar serta maklumat sulit"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Membenarkan aplikasi membaca semua acara kalendar yang disimpan pada tablet anda, termasuk acara rakan atau rakan sekerja. Aplikasi berniat jahat dengan kebenaran ini boleh menyari maklumat peribadi dari kalendar ini tanpa pengetahuan pemiliknya."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Membenarkan aplikasi untuk membaca semua acara kalendar yang disimpan pada telefon anda, termasuk acara rakan atau rakan sekerja. Aplikasi berniat jahat dengan kebenaran ini boleh menyari maklumat peribadi dari kalendar ini tanpa pengetahuan pemiliknya."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"tambahkan pada kamus"</string>
+ <string name="deleteText" msgid="7070985395199629156">"padam"</string>
<string name="inputMethod" msgid="1653630062304567879">"Kaedah input"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tindakan teks"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Kekurangan ruang"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Buat asal pemadaman."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Jangan lakukan apa-apa sekarang."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akaun"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Tambah akaun"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Akaun mana yang anda ingin gunakan?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Tambah akaun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Kenaikan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Penyusutan"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> ketik dan tahan."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Perubahan mod"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Pilih satu aplikasi"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Kongsi dengan"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Kongsi dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Pemegang gelongsor. Ketik dan tahan."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Kekunci. Set kepala diperlukan untuk mendengar kekunci semasa menaip kata laluan."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Kekunci. Set kepala diperlukan untuk mendengar kekunci semasa menaip kata laluan."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi laman utama"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi ke atas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lagi pilihan"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Storan USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Amaran penggunaan data"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Sentuh untuk melihat penggunaan dan tetapan"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data 2G-3G dilumpuhkan"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dilumpuhkan"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data mudah alih dilumpuhkan"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index e879f9b..01b9321 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<uten navn>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Mangler telefonnummer)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Ukjent)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Telefonsvarer"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Gir applikasjonen tillatelse til å lese personlig profilinformasjon lagret på enheten, for eksempel navn og kontaktinformasjon. Dette betyr at applikasjonen kan identifisere deg og sende din profilinformasjon til andre."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"skriv til profildataene dine"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Gir applikasjonen tillatelse til å endre eller legge til personlig profilinformasjon lagret på enheten, for eksempel navn og kontaktinformasjon. Dette betyr at andre applikasjoner kan identifisere deg og sende din profilinformasjon til andre."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lese din sosiale strøm"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Gir tillatelse til at appen får tilgang til og kan synkronisere oppdateringer fra deg og vennene dine. Apper med skadelig programvare kan utnytte denne tillatelsen til å lese privat kommunikasjon som du har med vennene dine i sosiale nettverk."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skrive i din sosiale strøm"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Gir tillatelse til at appen kan vise sosiale oppdateringer fra vennene dine. Apper med skadelig programvare kan utnytte denne tillatelsen gjennom å opptre som en venn og således lure deg til å oppgi passord eller annen konfidensiell informasjon."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"les kalenderhendelser og konfidensiell informasjon"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Lar en applikasjon lese alle kalenderhendelser lagret på nettbrettet, herunder de som tilhører venner eller kollegaer. En skadelig applikasjon med denne tillatelsen kan trekke ut personlige opplysninger fra disse kalenderne uten eiernes viten."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Lar applikasjoner lese alle kalenderhendelser lagret på telefonen, herunder de som tilhører venner eller kollegaer. Skadelige applikasjon med denne tillatelsen kan trekke ut personlige opplysninger fra disse kalenderne uten eiernes viten."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopier URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Merket tekst"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"legg til i ordliste"</string>
+ <string name="deleteText" msgid="7070985395199629156">"slett"</string>
<string name="inputMethod" msgid="1653630062304567879">"Inndatametode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksthandlinger"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Lite plass"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Opphev slettinger."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ikke gjør noe nå."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Velg en konto"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Legg til en konto"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Hvilken konto vil du bruke?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Legg til konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Øke"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Senke"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> trykk og hold inne."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusendring"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Velg en app"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Del med"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Del med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Glidebryter. Trykk og hold inne."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Opp for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Ned for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stille"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Lyd på"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tast. Hodetelefoner kreves for å høre tastene mens du skriver inn et passord."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tast. Hodetelefoner kreves for å høre tastene mens du skriver inn et passord."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Gå til startsiden"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Gå opp"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere alternativer"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-lagring"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Rediger"</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advarsel for høyt dataforbruk"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Berør for å se bruk og innst."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G-data er deaktivert"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data er deaktivert"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata er deaktivert"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 5d22f64..bb4fb4b 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<zonder titel>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Geen telefoonnummer)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Onbekend)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Voicemail"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Hiermee kan de app persoonlijke profielgegevens lezen die op uw apparaat staan, zoals uw naam en contactgegevens. Dit houdt in dat de app u kan identificeren en uw profielgegevens kan doorsturen naar anderen."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"schrijven naar profielgegevens"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Hiermee kan de app persoonlijke profielgegevens die op uw apparaat staan, zoals uw naam en contactgegevens, wijzigen of toevoegen. Dit houdt in dat andere apps u kunnen identificeren en uw profielgegevens kunnen doorsturen naar anderen."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"uw sociale stream lezen"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Hiermee kan de app toegang krijgen tot sociale updates van u en uw vrienden en deze synchroniseren. Schadelijke apps kunnen hiermee toegang krijgen tot privécommunicatie tussen u en uw vrienden in sociale netwerken."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"schrijven naar sociale streams"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Hiermee kan de app sociale updates van uw vrienden weergeven. Schadelijke apps kunnen deze mogelijkheid gebruiken om zich voor te doen als vriend en u wachtwoorden of andere vertrouwelijke gegevens te laten vrijgeven."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"agenda-afspraken en vertrouwelijke informatie lezen"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Hiermee kan een app alle agenda-afspraken lezen die op uw tablet zijn opgeslagen, inclusief de afspraken van vrienden of collega\'s. Een schadelijke app die over deze rechten beschikt, kan persoonlijke gegevens extraheren uit deze agenda\'s zonder medeweten van de eigenaren van de agenda\'s."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Hiermee kan een app alle agenda-afspraken lezen die op uw telefoon zijn opgeslagen, inclusief de afspraken van vrienden of collega\'s. Een schadelijke app die over deze rechten beschikt, kan persoonlijke gegevens extraheren uit deze agenda\'s zonder medeweten van de eigenaren van de agenda\'s."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"URL kopiëren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekst selecteren..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstselectie"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"toevoegen aan woordenboek"</string>
+ <string name="deleteText" msgid="7070985395199629156">"verwijderen"</string>
<string name="inputMethod" msgid="1653630062304567879">"Invoermethode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tekstacties"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Weinig ruimte"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Verwijderingen ongedaan maken."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Nu niets doen."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecteer een account"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Een account toevoegen"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Welk account wilt u gebruiken?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Account toevoegen"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Hoger"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Lager"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tik <xliff:g id="VALUE">%s</xliff:g> keer en blijf aanraken."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modus wijzigen"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Een applicatie kiezen"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Delen met"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Delen met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Schuifgreep. Tikken en blijven aanraken."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Omlaag voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Geluid aan"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Toetsaanslag. Headset vereist om toetsaanslagen te kunnen horen bij het typen van een wachtwoord."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Toetsaanslag. Headset vereist om toetsaanslagen te kunnen horen bij het typen van een wachtwoord."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeren naar startpositie"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Omhoog navigeren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opties"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-opslag"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Bewerken..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Waarschuwing v. gegevensgebruik"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Aanraken: gebruik/inst. bekijken"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-/3G-gegevens uitgeschakeld"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-gegevens uitgeschakeld"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiele gegevens uitgeschakeld"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 56553cd..0e5f57f 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<bez nazwy>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Brak numeru telefonu)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Nieznany)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Poczta głosowa"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umożliwia aplikacji odczytywanie osobistych informacji z profilu, przechowywanych w urządzeniu – np. imienia, nazwiska czy danych kontaktowych. Oznacza to, że aplikacja może Cię zidentyfikować i wysyłać do innych osób informacje o Twoim profilu."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"zapis danych w Twoim profilu"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umożliwia aplikacji zmienianie lub dodawanie danych do osobistych informacji w profilu, przechowywanych w urządzeniu – np. imienia, nazwiska czy danych kontaktowych. Oznacza to, że inne aplikacje mogą Cię zidentyfikować i wysyłać do innych osób informacje o Twoim profilu."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"odczyt sieci społecznościowych"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Zezwala aplikacji na dostęp do aktualizacji społecznościowych od Ciebie i znajomych oraz na ich synchronizowanie. Złośliwe aplikacje mogą dzięki temu odczytywać prywatne informacje wymienianie przez Ciebie ze znajomymi w sieciach społecznościowych."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zapis sieci społecznościowych"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Zezwala aplikacji na wyświetlanie aktualizacji społecznościowych od znajomych. Złośliwe aplikacje mogą dzięki temu udawać znajomych i wyłudzać hasła lub inne poufne informacje."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"odczyt wydarzeń w kalendarzu wraz z informacjami poufnymi"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Zezwala aplikacji na odczyt wszystkich wydarzeń w kalendarzu zapisanych w tablecie, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może bez wiedzy właściciela pobierać z kalendarza informacje osobiste."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Zezwala aplikacji na odczyt wszystkich wydarzeń w kalendarzu zapisanych w telefonie, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może bez wiedzy właściciela pobierać z kalendarza informacje osobiste."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiuj adres URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Zaznacz tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Zaznaczanie tekstu"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"dodaj do słownika"</string>
+ <string name="deleteText" msgid="7070985395199629156">"usuń"</string>
<string name="inputMethod" msgid="1653630062304567879">"Sposób wprowadzania tekstu"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Działania na tekście"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Mało miejsca"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Cofnij usunięcie."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Nie wykonuj teraz żadnych czynności."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Wybierz konto"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Dodaj konto"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Którego konta chcesz użyć?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Dodaj konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zwiększ"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmniejsz"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> dotknij i przytrzymaj."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Zmiana trybu"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Wybierz aplikację"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Udostępnij przez"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Udostępnij przez <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Uchwyt przesuwny. Dotknij i przytrzymaj."</string>
<string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>: w górę"</string>
<string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>: w dół"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Aparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Wyciszenie"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Włącz dźwięk"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Klawisz. Wymagany jest zestaw słuchawkowy, aby słyszeć klawisze podczas wpisywania hasła."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Klawisz. Wymagany jest zestaw słuchawkowy, aby słyszeć klawisze podczas wpisywania hasła."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Przejdź do strony głównej"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Przejdź wyżej"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Więcej opcji"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Nośnik USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edytuj..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Ostrzeżenie o transmisji danych"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Zobacz wykorzystanie i ustawienia"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Wyłączono transmisję danych 2G/3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Wyłączono transmisję danych 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Wyłączono komórkową transm. danych"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index e60a3c87..23e6ac4 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<sem título>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nenhum número de telefone)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Desconhecido)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Correio de voz"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que a aplicação leia informações do perfil pessoal armazenadas no aparelho, como o seu nome e as informações de contacto. Isto significa que a aplicação pode identificá-lo e enviar informações do seu perfil a outras pessoas."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"escrever nos dados do seu perfil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que a aplicação altere ou adicione dados às informações do perfil pessoal armazenadas no aparelho, como o seu nome e as informações de contacto. Isto significa que outras aplicações o podem identificar e enviar informações do seu perfil a outras pessoas."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ler o seu fluxo social"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permite que a aplicação para aceda e sincronize atualizações sociais de si e dos seus amigos. Aplicações maliciosas podem usar isso para ler as comunicações privadas entre si e os seus amigos em redes sociais."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escrever para o seu fluxo social"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permite que a aplicação mostre atualizações sociais dos seus amigos. Aplicações maliciosas podem usar isso para fingirem ser um amigo e levá-lo a revelar senhas ou outras informações confidenciais."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"ler eventos do calendário, para além de informações confidenciais"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que uma aplicação leia todos os eventos do calendário armazenados no tablet, incluindo os de amigos ou colegas de trabalho. Uma aplicação maliciosa com esta permissão pode extrair informações pessoais destes calendários sem o conhecimento dos proprietários."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que uma aplicação leia todos os eventos do calendário armazenados no telemóvel, incluindo os de amigos ou colegas de trabalho. Uma aplicação maliciosa com esta permissão pode extrair informações pessoais destes calendários sem o conhecimento dos proprietários."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecção de texto"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"adicionar ao dicionário"</string>
+ <string name="deleteText" msgid="7070985395199629156">"eliminar"</string>
<string name="inputMethod" msgid="1653630062304567879">"Método de entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acções de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Pouco espaço livre"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Anular as eliminações."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Não fazer nada por agora."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar conta"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Adicionar uma conta"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Que conta gostaria de utilizar?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Adicionar conta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuir"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Toque sem soltar em <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Alteração do modo"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Escolha uma aplicação"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Partilhar com:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartilhar com <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Faixa deslizante. Mantenha premida."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Para baixo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Câmara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecla. São necessários auscultadores com microfone integrado para ouvir as teclas ao escrever uma palavra-passe."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecla. São necessários auscultadores com microfone integrado para ouvir as teclas ao escrever uma palavra-passe."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar para página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Armazenamento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Aviso de utilização de dados"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Toque para ver a utiliz. e as def."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Os dados 2G-3G estão desativados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Os dados 4G estão desativados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Os dados móveis estão desativados"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index de8266b..36ce6a6 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<sem título>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nenhum número de telefone)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Desconhecido)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Correio de voz"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que o aplicativo leia informações pessoais de seu perfil armazenadas em seu dispositivo, como seu nome e suas informações de contato. Isso significa que o aplicativo pode identificá-lo e enviar as informações de seu perfil para outras pessoas."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"escrever nos dados do perfil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que o aplicativo altere ou adicione informações de perfil pessoais armazenadas em seu dispositivo, como seu nome e suas informações de contato. Isso significa que outros aplicativos podem identificá-lo e enviar informações de seu perfil para outras pessoas."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ler suas transmissões sociais"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permite que o aplicativo acesse e sincronize suas atualizações sociais e as de seus amigos. Aplicativos maliciosos podem usar esse recurso para ler comunicações privadas entre você e seus amigos em redes sociais."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escrever p/ suas transm. soc."</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permite que o aplicativo mostre atualizações sociais de seus amigos. Aplicativos maliciosos podem usar esse recurso para fingir ser um amigo e fazer você revelar senhas ou outras informações confidenciais."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"ler compromissos e informações confidenciais"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que um aplicativo leia todos os compromissos armazenados na agenda de seu tablet, incluindo os de amigos ou de colegas de trabalho. Um aplicativo malicioso com essa permissão pode extrair informações pessoais dessa agenda sem que seus donos saibam."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que um aplicativo leia todos os compromissos armazenados na agenda de seu telefone, incluindo os de amigos ou de colegas de trabalho. Um aplicativo malicioso com essa permissão pode extrair informações pessoais dessa agenda sem que seus donos saibam."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Seleção de texto"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"adicionar ao dicionário"</string>
+ <string name="deleteText" msgid="7070985395199629156">"excluir"</string>
<string name="inputMethod" msgid="1653630062304567879">"Método de entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Ações de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Pouco espaço"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Desfazer as exclusões."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Não fazer nada por enquanto."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecione uma conta"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Adicionar uma conta"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Que conta você gostaria de usar?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Adicionar conta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Redução"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> toque e mantenha pressionado."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Alteração do modo"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Escolha um aplicativo"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Compartilhar com"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartilhar com <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Alça deslizante. Toque e segure."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Deslize para baixo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Câmera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecla. É necessário um fone de ouvido para ouvir as teclas durante a digitação de uma senha."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecla. É necessário um fone de ouvido para ouvir as teclas durante a digitação de uma senha."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar na página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Armazenamento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Aviso sobre uso de dados"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Toque p/ ver uso e configurações"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Dados 2G e 3G desativados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dados 4G desativados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dados móveis desativados"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index b8c5254..e84eb69 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -29,6 +29,8 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<senza titel>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <!-- no translation found for ellipsis_two_dots (1228078994866030736) -->
+ <skip />
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nagin numer da telefon)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Nunenconuschent)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mailbox"</string>
@@ -356,6 +358,14 @@
<skip />
<!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
<skip />
+ <!-- no translation found for permlab_readSocialStream (1268920956152419170) -->
+ <skip />
+ <!-- no translation found for permdesc_readSocialStream (6619997662735851111) -->
+ <skip />
+ <!-- no translation found for permlab_writeSocialStream (3504179222493235645) -->
+ <skip />
+ <!-- no translation found for permdesc_writeSocialStream (2689083745826002521) -->
+ <skip />
<!-- outdated translation 6898987798303840534 --> <string name="permlab_readCalendar" msgid="5972727560257612398">"leger eveniments da chalender"</string>
<!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
<!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
@@ -1376,6 +1386,12 @@
<skip />
<!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
<skip />
+ <!-- no translation found for activitychooserview_choose_application (4540794444768613567) -->
+ <skip />
+ <!-- no translation found for shareactionprovider_share_with (806688056141131819) -->
+ <skip />
+ <!-- no translation found for shareactionprovider_share_with_application (5627411384638389738) -->
+ <skip />
<!-- no translation found for content_description_sliding_handle (7311938669217173870) -->
<skip />
<!-- no translation found for description_direction_up (1983114130441878529) -->
@@ -1394,7 +1410,9 @@
<skip />
<!-- no translation found for description_target_soundon (30052466675500172) -->
<skip />
- <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <!-- no translation found for keyboard_headset_required_to_hear_password (5913502399391940888) -->
+ <skip />
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
<skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index c538450..2b0e1039 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<fără titlu>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Niciun număr de telefon)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Necunoscut)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mesaj vocal"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite aplicaţiei să citească informaţiile din profilul personal stocate pe dispozitivul dvs., cum ar fi numele şi informaţiile dvs. de contact. Aceasta înseamnă că aplicaţia vă poate identifica şi poate trimite informaţiile din profilul dvs. altor persoane."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"scriere date în profilul dvs."</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite aplicaţiei să schimbe sau să adauge conţinut în informaţiile din profilul personal stocate pe dispozitivul dvs., cum ar fi numele şi informaţiile dvs. de contact. Aceasta înseamnă că alte aplicaţii vă pot identifica şi pot trimite informaţiile din profilul dvs. altor persoane."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"citeşte fluxul social"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Permite aplicaţiei să acceseze şi să sincronizeze actualizările sociale de la dvs. şi de la prietenii dvs. Aplicaţiile rău-intenţionate se pot folosi de această funcţie pentru a citi comunicările private dintre dvs. şi prietenii dvs. de pe reţelele sociale."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"scrie în fluxul social"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Permite aplicaţiei să afişeze actualizări sociale de la prietenii dvs. Aplicaţiile rău-intenţionate se pot folosi de această funcţie pentru a simula un prieten, cu scopul de a vă păcăli să oferiţi parole sau alte informaţii confidenţiale."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"citirea evenimentelor din calendar şi a informaţiilor confidenţiale"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite unei aplicaţii să citească toate evenimentele din calendar stocate pe tableta dvs., inclusiv evenimentele prietenilor sau colegilor. O aplicaţie rău intenţionată care are această permisiune poate extrage informaţii cu caracter personal din aceste calendare fără ştirea proprietarului."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite unei aplicaţii să citească toate evenimentele din calendar stocate pe telefonul dvs., inclusiv evenimentele prietenilor sau colegilor. O aplicaţie rău intenţionată care are această permisiune poate extrage informaţii cu caracter personal din aceste calendare fără ştirea proprietarului."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copiaţi adresa URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selectaţi text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selectare text"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"adăugaţi în dicţionar"</string>
+ <string name="deleteText" msgid="7070985395199629156">"ştergeţi"</string>
<string name="inputMethod" msgid="1653630062304567879">"Metodă de intrare"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acţiuni pentru text"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Spaţiu de stocare redus"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Anulaţi aceste ştergeri."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Pentru moment, nu efectuaţi nicio acţiune."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selectaţi un cont"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Adăugaţi un cont"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Ce cont doriţi să utilizaţi?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Adăugaţi un cont"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementaţi"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrementaţi"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Apăsaţi şi ţineţi apăsat <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Schimbarea modului"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Alegeţi o aplicaţie"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Permiteţi accesul pentru"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Permiteţi accesul pentru <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Mâner glisant. Apăsaţi şi ţineţi apăsat."</string>
<string name="description_direction_up" msgid="1983114130441878529">"În sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"În jos pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Cameră foto"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenţios"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sunet activat"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tastă. Setul căşti-microfon este necesar pentru ascultarea tastelor când introduceţi o parolă."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tastă. Setul căşti-microfon este necesar pentru ascultarea tastelor când introduceţi o parolă."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigaţi în sus"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mai multe opţiuni"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Dsipozitiv de stocare USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editaţi..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Avertisment de utiliz. a datelor"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Ating. pt. a afişa utiliz./set."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datele 2G-3G au fost dezactivate"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datele 4G au fost dezactivate"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datele mobile au fost dezactiv."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 2ca256f..201d5fc 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<без названия>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"..."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Нет номера телефона)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Неизвестно)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Голосовая почта"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Позволяет приложению получать доступ к хранящейся на вашем устройстве личной информации профиля, например к имени и контактным данным. Это означает, что приложение может идентифицировать вас и отправить эти данные другим пользователям."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"запись в данные профиля"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Позволяет приложению изменять или добавлять в личный профиль хранящуюся на вашем устройстве информацию, например имя или контактные данные. Это означает, что приложение может идентифицировать вас и отправить эти данные другим пользователям."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"читать записи в вашей социальной ленте"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Позволяет приложению читать и синхронизировать новости от вас и ваших друзей. Вредоносные программы могут таким образом получить доступ к вашим личным записям в социальных сетях."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"добавлять записи в вашу социальную ленту"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Позволяет приложению отображать новости от друзей в социальных сетях. Вредоносные программы могут таким образом получить доступ к вашим паролям и другим конфиденциальным данным."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"просматривать в календаре мероприятия и конфиденциальную информацию"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Приложениe получит доступ ко всем данным календаря, сохраненным в вашем устройстве (в том числе к мероприятиям ваших друзей и коллег). Вредоносное ПО с таким уровнем доступа сможет извлекать личную информацию без ведома владельцев календарей."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Приложениe получит доступ ко всем данным календаря, сохраненным в вашем телефоне (в том числе к мероприятиям ваших друзей и коллег). Вредоносное ПО с таким уровнем доступа сможет извлекать личную информацию без ведома владельцев календарей."</string>
@@ -654,7 +659,7 @@
<string name="lockscreen_charged" msgid="4938930459620989972">"Батарея заряжена"</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Подключите зарядное устройство."</string>
- <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Нет SIM-карты."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Нет SIM-карты"</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"SIM-карта не установлена."</string>
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"SIM-карта не установлена."</string>
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Вставьте SIM-карту."</string>
@@ -671,10 +676,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Количество неудачных попыток ввода PIN-кода: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторите попытку через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Количество неудачных попыток ввода графического ключа разблокировки: <xliff:g id="NUMBER_0">%d</xliff:g>. После нескольких неудачных попыток (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будет предложено разблокировать планшетный ПК с помощью учетных данных Google."\n\n" Повторите попытку через <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Количество неудачных попыток ввода графического ключа разблокировки: <xliff:g id="NUMBER_0">%d</xliff:g>. После <xliff:g id="NUMBER_1">%d</xliff:g> неудачных попыток вам будет предложено разблокировать телефон с помощью учетных данных Google. "\n\n" Повторите попытку через <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Количество неудачных попыток разблокировать планшетный ПК: <xliff:g id="NUMBER_0">%d</xliff:g>. Осталось попыток: <xliff:g id="NUMBER_1">%d</xliff:g>. После этого настройки будут сброшены до заводских, а данные пользователя потеряны."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Количество неудачных попыток разблокировать телефон: <xliff:g id="NUMBER_0">%d</xliff:g>. Осталось попыток: <xliff:g id="NUMBER_1">%d</xliff:g>. После этого настройки будут сброшены до заводских, а данные пользователя потеряны."</string>
- <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Количество неудачных попыток разблокировать планшетный ПК: <xliff:g id="NUMBER">%d</xliff:g>. Настройки будут сброшены до заводских."</string>
- <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Количество неудачных попыток разблокировать телефон: <xliff:g id="NUMBER">%d</xliff:g>. Настройки будут сброшены до заводских."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Не удалось разблокировать планшетный ПК (число попыток: <xliff:g id="NUMBER_0">%d</xliff:g>). Осталось попыток: <xliff:g id="NUMBER_1">%d</xliff:g>. После этого будут установлены настройки по умолчанию, что приведет к удалению всех пользовательских данных."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Не удалось разблокировать телефон (число попыток: <xliff:g id="NUMBER_0">%d</xliff:g>). Осталось попыток: <xliff:g id="NUMBER_1">%d</xliff:g>. После этого будут установлены настройки по умолчанию, что приведет к удалению всех пользовательских данных."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Не удалось разблокировать планшетный ПК (число попыток: <xliff:g id="NUMBER">%d</xliff:g>). Будут установлены настройки по умолчанию."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Не удалось разблокировать телефон (число попыток: <xliff:g id="NUMBER">%d</xliff:g>). Будут установлены настройки по умолчанию."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Повторите попытку через <xliff:g id="NUMBER">%d</xliff:g> с."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Забыли графический ключ?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Снятие блокировки аккаунта"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Копировать URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Выбрать текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Выбор текста"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"добавить в словарь"</string>
+ <string name="deleteText" msgid="7070985395199629156">"удалить"</string>
<string name="inputMethod" msgid="1653630062304567879">"Способ ввода"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Операции с текстом"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Недостаточно места"</string>
@@ -885,8 +886,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Выбор приложения для USB-устройства"</string>
<string name="noApplications" msgid="1691104391758345586">"Это действие не может выполнять ни одно приложение."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <string name="aerr_application" msgid="932628488013092776">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> остановилось."</string>
- <string name="aerr_process" msgid="4507058997035697579">"Процесс \"<xliff:g id="PROCESS">%1$s</xliff:g>\" остановился."</string>
+ <string name="aerr_application" msgid="932628488013092776">"В приложении \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" произошла ошибка."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"В приложении \"<xliff:g id="PROCESS">%1$s</xliff:g>\" произошла ошибка."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Приложение \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" не отвечает."\n\n"Закрыть его?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Приложение \"<xliff:g id="ACTIVITY">%1$s</xliff:g>\" не отвечает."\n\n"Закрыть его?"</string>
@@ -990,7 +991,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"При выключении USB-накопителя произошла неполадка. Убедитесь, что USB-хост отключен, и повторите попытку."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Включение USB-накопителя"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"При включении USB-накопителя некоторые используемые приложения могут прекратить работу и оставаться недоступными до отключения USB-накопителя."</string>
- <string name="dlg_error_title" msgid="7323658469626514207">"Сбой подключения USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Ошибка при подключении USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ОК"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Подключен как устройство хранения данных"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Подключен как камера"</string>
@@ -1069,7 +1070,7 @@
<string name="reset" msgid="2448168080964209908">"Сбросить"</string>
<string name="submit" msgid="1602335572089911941">"Отправить"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Включен режим \"Штурман\""</string>
- <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Чтобы закрыть приложение, нажмите здесь."</string>
+ <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Чтобы выйти, нажмите здесь."</string>
<string name="tethered_notification_title" msgid="3146694234398202601">"USB-модем или точка доступа Wi-Fi активны"</string>
<string name="tethered_notification_message" msgid="3067108323903048927">"Нажмите для настройки"</string>
<string name="back_button_label" msgid="2300470004503343439">"Назад"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Отменить удаления."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ничего не делать сейчас."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Выберите аккаунт"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Добавить аккаунт"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Выберите аккаунт"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Добавить аккаунт"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличить"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Уменьшить"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Нажмите и удерживайте <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1143,13 +1141,16 @@
<string name="switch_off" msgid="7249798614327155088">"Выкл."</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"нажато"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"не нажато"</string>
- <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Клавиша Alt"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Клавиша ALT"</string>
<string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Отмена"</string>
<string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Клавиша удаления"</string>
<string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string>
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Клавиша смены режима"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Клавиша смены регистра"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Клавиша ввода"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Выберите приложение"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Открыть доступ:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Открыть доступ приложению \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\""</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Сенсорное управление. Нажмите и удерживайте."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Проведите вниз, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Без звука"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Включить звук"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Необходима гарнитура, чтобы услышать нажатие клавиш при вводе пароля."</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Подключите гарнитуру, чтобы услышать ключи пароля."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на главную"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вверх"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Ещё"</string>
@@ -1168,10 +1170,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-накопитель"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Изменить..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Осталось мало трафика"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Проверить трафик и настройки"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Передача данных 2G/3G отключена"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Передача данных 4G отключена"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобильный Интернет отключен"</string>
@@ -1200,7 +1199,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"Отпечаток SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Просмотреть все"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Выбор действия"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Поделиться с..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Настройка доступа"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Устройство заблокировано."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 9cf846f..1ccbbed 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<bez názvu>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(žiadne telefónne číslo)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Neznáme)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Hlasová schránka"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umožňuje aplikácii čítať osobné informácie profilu uložené v zariadení, ako sú vaše meno a kontaktné údaje. Aplikácia vás takto môže identifikovať a poslať informácie profilu ostatným používateľom."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovať do údajov profilu"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umožňuje aplikácii zmeniť alebo pridať osobné informácie profilu uložené v zariadení, ako sú vaše meno a kontaktné údaje. Iné aplikácie vás takto môžu identifikovať a poslať vaše informácie profilu ostatným používateľom."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"čítať váš sociálny stream"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Umožňuje aplikácii pristupovať k sociálnym aktualizáciám vašich priateľov a synchronizovať ich. Škodlivé aplikácie to môžu využiť na pristupovanie k súkromnej komunikácii medzi vami a vašimi priateľmi na sociálnych sieťach."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"písať do vášho sociálneho streamu"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Umožňuje aplikácii zobrazovať sociálne aktualizácie vašich priateľov. Škodlivé aplikácie to môžu využiť a predstierať, že sú vaším priateľom. Týmto spôsobom môžu od vás získať heslá a iné dôverné informácie."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"čítať udalosti v kalendári a dôverné informácie"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Umožňuje aplikácii načítať všetky udalosti v kalendári, ktoré sú uložené v tablete (vrátane udalostí priateľov alebo kolegov). Škodlivá aplikácia môže pomocou tohto oprávnenia získavať osobné údaje z týchto kalendárov bez vedomia vlastníka."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Umožňuje aplikácii načítať všetky udalosti v kalendári, ktoré sú uložené v telefóne (vrátane udalostí priateľov alebo kolegov). Škodlivá aplikácia môže pomocou tohto oprávnenia získavať osobné údaje z týchto kalendárov bez vedomia vlastníka."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Skopírovať adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrať text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Výber textu"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"pridať do slovníka"</string>
+ <string name="deleteText" msgid="7070985395199629156">"odstrániť"</string>
<string name="inputMethod" msgid="1653630062304567879">"Metóda vstupu"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Operácie s textom"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Nedostatok pamäte"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Vrátiť späť odstránenia."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Nevykonať akciu."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vybrať účet"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Pridať účet"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Ktorý účet chcete použiť?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Pridať účet"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšenie"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zníženie"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Klepnite a podržte <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Zmena režimu"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Zvoľte aplikáciu"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Zdieľať s"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Zdieľať s aplikáciou <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Posuvné tlačidlo. Klepnite a podržte."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Nahor na <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Nadol na <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zapnúť zvuk"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Kláves. Pri zadávaní hesla je potrebné použiť náhlavnú súpravu."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Kláves. Pri zadávaní hesla je potrebné použiť náhlavnú súpravu."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Prejsť na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Prejsť na"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Viac možností"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Ukladací priestor USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Upraviť..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Upozornenie o využití dát"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Zobr. využívania dát a nastavení"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Dátové prenosy 2G a 3G zakázané"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dátové prenosy 4G zakázané"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilné dátové prenosy zakázané"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 5aa1448..5379bb5 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<brez naslova>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ni telefonske številke)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Neznano)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Glasovna pošta"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Programu omogoča branje podatkov v osebnem profilu, shranjenih v napravi, na primer imen in podatkov za stik. To pomeni, da lahko program ugotovi, kdo ste, in pošlje podatke v profilu drugim."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje v podatke v profilu"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Programu omogoča spreminjanje in dodajanje podatkov med podatke v osebnem profilu, shranjene v napravi, na primer imena in podatke za stik. To pomeni, da lahko program ugotovi, kdo ste, in pošlje podatke v profilu drugim."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"preberite svoj družabni tok"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Dovoli programom dostop do družabnih posodobitev vas in vaših prijateljev. Zlonamerni programi lahko to uporabijo za branje zasebne komunikacije med vami in prijatelji v družabnih omrežjih."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"pišite v svoj družabni tok"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Dovoli programom prikaz družabnih posodobitev vaših prijateljev. Zlonamerni programi lahko to uporabijo, da se predstavijo kot prijatelji in vas zavedejo, da razkrijete gesla ali druge zaupne podatke."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"branje dogodkov v koledarju in zaupnih podatkov"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Programu dovoli, da bere dogodke v koledarju, shranjene v tabličnem računalniku, vključno z dogodki prijateljev in sodelavcev. Zlonamerni program lahko iz njih dobi osebne podatke brez vednosti lastnika."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Programu dovoli branje vseh dogodkov koledarja, shranjenih v telefonu, vključno z dogodki prijateljev in sodelavcev. Zlonamerni program lahko iz njih pridobi osebne podatke brez vednosti lastnika."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Izbiranje besedila ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Izbrano besedilo"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"dodaj v slovar"</string>
+ <string name="deleteText" msgid="7070985395199629156">"izbriši"</string>
<string name="inputMethod" msgid="1653630062304567879">"Način vnosa"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Besedilna dejanja"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Zmanjkuje pomnilnika"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Razveljavi brisanje."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Zaenkrat ne naredi ničesar."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Izberite račun"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Dodajanje računa"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Kateri račun želite uporabiti?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Dodaj račun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povečaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmanjšaj"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tapnite in pridržite <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Sprememba načina"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tipka Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Tipka Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Izberite program"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Delite z"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Delite s programom <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Drsna ročica. Tapnite in pridržite."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Gor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Dol za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tiho"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Vklopljen zvok"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Če želite med vnašanjem gesla slišati tipke, potrebujete slušalke."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Če želite med vnašanjem gesla slišati tipke, potrebujete slušalke."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Krmarjenje domov"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Krmarjenje navzgor"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Več možnosti"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Pomnilnik USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Urejanje ..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Opozorilo o uporabi podatkov"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Dotaknite se za uporabo in nast."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Podatki 2G-3G so onemogočeni"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Podatki 4G so onemogočeni"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilni podatki so onemogočeni"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index f60e212..f403c81 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<без наслова>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Нема броја телефона)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Непознато)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Гласовна пошта"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Дозвољава апликацији да чита личне информације о профилу сачуване на уређају, као што су име и информације за контакт. То значи да апликација може да вас идентификује и шаље информације о профилу другима."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"уписивање у податке профила"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Дозвољава апликацији да мења личне информације о профилу сачуване на уређају, као што су име и информације за контакт, или им доприноси. То значи да друге апликације могу да вас идентификују и шаљу информације о профилу другима."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"читање друштвеног стрима"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Дозвољава апликацији да приступа вашим друштвеним ажурирањима и друштвеним ажурирањима пријатеља и да их синхронизује. Злонамерне апликације могу помоћу тога да читају приватне преписке између вас и пријатеља на друштвеним мрежама."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"писање у друштвени стрим"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Дозвољава апликацији да приказује друштвена ажурирања пријатеља. Злонамерне апликације могу помоћу тога да се претварају да су пријатељи и да вас преваре како бисте им открили лозинке или друге поверљиве информације."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"читање календарских догађаја и поверљивих информација"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Дозвољава апликацији да чита све календарске догађаје сачуване на таблету, укључујући догађаје пријатеља или колега. Злонамерна апликација са овом дозволом може да издвоји личне информације из тих календара без знања власника."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Дозвољава апликацији да чита све календарске догађаје сачуване на телефону, укључујући догађаје пријатеља или колега. Злонамерна апликација са овом дозволом може да издвоји личне информације из тих календара без знања власника."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Копирај URL адресу"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Изабери текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избор текста"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"додај у речник"</string>
+ <string name="deleteText" msgid="7070985395199629156">"избриши"</string>
<string name="inputMethod" msgid="1653630062304567879">"Метод уноса"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Радње у вези са текстом"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Мало простора"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Опозови брисања."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Не ради ништа за сада."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Избор налога"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Додај налог"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Који налог желите да користите?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Додај налог"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Повећање"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Смањење"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> додирните и задржите."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Промена режима"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Изаберите апликацију"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Дели са"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Дели са апликацијом <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Клизна ручица. Додирните и задржите."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Надоле за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Нечујно"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Укључи звук"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Тастер. Потребне су слушалице да бисте чули тастере док куцате лозинку."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Тастер. Потребне су слушалице да бисте чули тастере док куцате лозинку."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Кретање до Почетне"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Кретање нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Још опција"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB меморија"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Измени..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Упозорење о потрошњи података"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Додир за коришћење и подешавања"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G подаци су онемогућени"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G подаци су онемогућени"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Подаци мобилне мреже су онемогућени"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 9a42ff3..851e79c 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<utan titel>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Inget telefonnummer)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Okänd)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Röstbrevlåda"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Tillåter att appen läser personlig profilinformation som lagrats på enheten, t.ex. ditt namn och kontaktuppgifter. Det innebär att appen kan identifiera dig och skicka din profilinformation till andra."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"skriver till data för din profil"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Tillåter att appen ändrar eller lägger till personlig profilinformation som lagras på din enhet, t.ex. ditt namn och kontaktuppgifter. Det innebär att andra appar kan identifiera dig och skicka profilinformation till andra."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"läs mitt sociala flöde"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Gör det möjligt för appen få åtkomst till och synkronisera sociala uppdateringar från dig och dina vänner. Skadliga appar kan använda detta för att läsa privata konversationer mellan dig och dina vänner på sociala nätverk."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skriv till mitt sociala flöde"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Gör det möjligt för appen att visa sociala uppdateringar från dina vänner. Skadliga program kan använda detta för att låtsas vara en vän och lura dig att avslöja lösenord eller annan konfidentiell information."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"läsa kalenderuppgifter plus konfidentiell information"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Tillåter att en app läser alla kalenderuppgifter som sparats på din pekdator, inklusive dina vänners eller kollegors uppgifter. Skadliga appar kan använda detta för att hämta personliga uppgifter från kalendrarna utan ägarens vetskap."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Tillåter att en app läser kalenderuppgifter som har lagrats på din telefon, även dina vänners eller kollegors uppgifter. Skadliga appar kan använda detta för att hämta personliga uppgifter från kalendrar utan ägarens vetskap."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiera webbadress"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Markera text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textmarkering"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"lägg till i ordlista"</string>
+ <string name="deleteText" msgid="7070985395199629156">"ta bort"</string>
<string name="inputMethod" msgid="1653630062304567879">"Indatametod"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Textåtgärder"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Dåligt med utrymme"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Ångra borttagningarna."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Gör ingenting just nu."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Välj ett konto"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Lägg till ett konto"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Vilket konto vill du använda?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Lägg till konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Öka"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Minska"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> knacka lätt och håll kvar."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Funktionsändring"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Skift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retur"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Välj en app"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Dela med"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Dela med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Skärmlåsfunktion. Tryck och dra."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Upp för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Ned för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tyst"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ljud på"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Du behöver ett headset för att höra tangenterna när du skriver in ett lösenord."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Du behöver ett headset för att höra tangenterna när du skriver in ett lösenord."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Visa startsidan"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigera uppåt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Fler alternativ"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-lagring"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Redigera..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Varning angående dataanvändning"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Tryck om du vill visa användning och inställningar"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data via 2G-3G har inaktiverats"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data via 4G har inaktiverats"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata har inaktiverats"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index f0f90c63..fa7e94a 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"Kishika nafasi<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<untitled>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Hakuna nambari ya simu)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Haijulikani)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Barua ya sauti"</string>
@@ -49,7 +50,7 @@
<string name="invalidPuk" msgid="8761456210898036513">"Andika PUK ambayo ina urefu wa nambari 8 au zaidi."</string>
<string name="needPuk" msgid="919668385956251611">"Kadi yako ya SIM imefungwa na PUK. Anika msimbo wa PUK ili kuifungua."</string>
<string name="needPuk2" msgid="4526033371987193070">"Chapisha PUK2 ili kufungua kadi ya SIM."</string>
- <string name="ClipMmi" msgid="6952821216480289285">"ID ya Mpigaji simu Inayoingia"</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"Kitambulisho cha Mpigaji wa Simu Inayoingia"</string>
<string name="ClirMmi" msgid="7784673673446833091">"ID ya Mpigaji simu Inayotoka nje"</string>
<string name="CfMmi" msgid="5123218989141573515">"Kusambaza simu"</string>
<string name="CwMmi" msgid="9129678056795016867">"Simu inasubiriwa"</string>
@@ -63,7 +64,7 @@
<string name="CndMmi" msgid="3116446237081575808">"Uwasilishaji nambari ya kupiga simu"</string>
<string name="DndMmi" msgid="1265478932418334331">"Usisumbue"</string>
<string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Imezuiliwa"</string>
- <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Chaguo-msingi za kitambulisho cha mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Chaguo-msingi za kitambulisho cha mpigaji simu huwa kuzuiwa. Simu ifuatayo: Haijazuiliwa"</string>
<string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo:Imezuiliwa"</string>
<string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa"</string>
<string name="serviceNotProvisioned" msgid="8614830180508686666">"Huduma haitathminiwi."</string>
@@ -131,8 +132,8 @@
<string name="me" msgid="6545696007631404292">"Mimi"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Chaguo za kompyuta ndogo"</string>
<string name="power_dialog" product="default" msgid="1319919075463988638">"Machaguo ya simu"</string>
- <string name="silent_mode" msgid="7167703389802618663">"Muundo wa kimya"</string>
- <string name="turn_on_radio" msgid="3912793092339962371">"Fungua bila waya"</string>
+ <string name="silent_mode" msgid="7167703389802618663">"Hali ya kimya"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"Washa mtandao-hewa"</string>
<string name="turn_off_radio" msgid="8198784949987062346">"Zima pasiwaya"</string>
<string name="screen_lock" msgid="799094655496098153">"Funga skrini"</string>
<string name="power_off" msgid="4266614107412865048">"Nishati imezimwa"</string>
@@ -148,7 +149,7 @@
<string name="global_action_power_off" msgid="4471879440839879722">"Nishati imezimwa"</string>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mtindo wa kimya"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sauti Imezimwa"</string>
- <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sauti imefunguliwa"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sauti imewashwa"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"gumzo ya ndege"</string>
<string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Hali ya ndege IMEWASHWA"</string>
<string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"gumzo ya ndege IMEZIMWA"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Inaruhusu programu kusoma maelezo mafupi ya binafsi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na maelezo yako ya anwani. Hii ina maanisha programu inaweza kukutambua na kutuma habari maelezo yako mafupi kwa wengine."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"andika kwenye data ya maelezo yako mafupi"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Inaruhusu programu kubadilisha au kuongeza maelezo binafsi ya maelezo yako mafupi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na maelezo ya anwani. Hii ina maanisha programu nyingine ziweze kukutambua na kutuma maelezo ya maelezo yako mafupi kwa wengine."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"soma mkondo wako wa kijamii"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Inaruhusu programu kufikia na kulandanisha usasisho kutoka kwako na marafiki wako. Prog hasidi zinaweza kutumia hizi kusoma mawasiliano ya kibinafsi kati yako na marafiki wako kwenye mitandao ya kijamii."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"andika kwa mkondo wako wa kijamii"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Inaruhusu programu kuonyesha usasisho ya kijamii kutoka kwa marafiki wako. Prog hasidi zinaweza kutumia hizi zikijifanya kuwa rafiki na kukuhadaa kuonyesha nenosiri au taarifa zingine za siri."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"soma matukio ya kalenda pamoja na maelezo ya siri"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye kompyuta yako ndogo, pamoja na za marafiki au wafanyakazi wenza. Programu hasidi yenye kibali hiki kinaweza kuchukua maelezo ya kibinagsi kutoka kwa kalenda hizi bila ufahamu wa mmiliki."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye simu yako, pamoja na za marafiki au marafiki wenza. Programu hasidi yenye kibali hiki inaweza kuchukua maelezo ya kibinafsi kutoka kwa kalenda hizi bila ufahamu wa mmiliki."</string>
@@ -662,7 +667,7 @@
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Kadi yako ya SIM imelemazwa kabisa. "\n" tafadhali wasiliana na mtoa huduma wako wa psiwaya ili kupata kadi nyingine ya SIM."</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Simu za dharura pekee"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Mtandao umefungwa"</string>
- <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kadi ya SIM imefungwana PUK."</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kadi ya SIM imefungwa na PUK."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Tafadhali angalia Mwongozo wa Mtumiaji au wasiliana na Huduma kwa Wateja."</string>
<string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Kadi ya SIM imefungwa."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Inafungua kadi ya SIM..."</string>
@@ -680,7 +685,7 @@
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Fungua akaunti"</string>
<string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Majaribio mengi ya mchoro!"</string>
<string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Kufungua, ingia na akaunti yako ya Google"</string>
- <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Jina la mtumiaji/Barua pepe)"</string>
+ <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Jina la mtumiaji (barua pepe)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Nenosiri"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Ingia"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Jina batili la mtumiaji au nywila"</string>
@@ -697,7 +702,7 @@
<string name="factorytest_failed" msgid="5410270329114212041">"Jaribio la kiwanda limeshindikana"</string>
<string name="factorytest_not_system" msgid="4435201656767276723">"Tendo la JARIBIO_LA KIWANDA linahimiliwa tu kwa furushi zilizosakinishwa katika /system/app."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Hakuna furushi lililopatikana ambalo linatoa tendo la JARIBIO_LA KIWANDA."</string>
- <string name="factorytest_reboot" msgid="6320168203050791643">"Fungua upya"</string>
+ <string name="factorytest_reboot" msgid="6320168203050791643">"Washa tena"</string>
<string name="js_dialog_title" msgid="8143918455087008109">"Ukurasa ulio \'<xliff:g id="TITLE">%s</xliff:g>\' unasema:"</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"HatiJava"</string>
<string name="js_dialog_before_unload" msgid="1901675448179653089">"Toka kwa ukurasa huu?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Chagua Sawa ili kuendelea, au Ghairi ili kubaki kwenye ukurasa wa sasa."</string>
@@ -740,7 +745,7 @@
<string name="save_password_notnow" msgid="6389675316706699758">"Si Sasa"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Kumbuka"</string>
<string name="save_password_never" msgid="8274330296785855105">"Katu"</string>
- <string name="open_permission_deny" msgid="5661861460947222274">"Huna idhini ya kuona ukurasa huu."</string>
+ <string name="open_permission_deny" msgid="5661861460947222274">"Huna idhini ya kufungua ukurasa huu."</string>
<string name="text_copied" msgid="4985729524670131385">"Maandishi yamenakiliwa kwenye ubao klipu."</string>
<string name="more_item_label" msgid="4650918923083320495">"Zaidi"</string>
<string name="prepend_shortcut_label" msgid="2572214461676015642">"Menyu+"</string>
@@ -830,7 +835,7 @@
<string name="day" msgid="8144195776058119424">"siku"</string>
<string name="days" msgid="4774547661021344602">"siku"</string>
<string name="hour" msgid="2126771916426189481">"saa"</string>
- <string name="hours" msgid="894424005266852993">"saa"</string>
+ <string name="hours" msgid="894424005266852993">"masaa"</string>
<string name="minute" msgid="9148878657703769868">"dakika"</string>
<string name="minutes" msgid="5646001005827034509">"Dakika"</string>
<string name="second" msgid="3184235808021478">"sekunde"</string>
@@ -859,15 +864,11 @@
<string name="copyUrl" msgid="2538211579596067402">"Nakili URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Uchaguzi wa maandishi?"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"ongeza kwa kamusi"</string>
+ <string name="deleteText" msgid="7070985395199629156">"futa"</string>
<string name="inputMethod" msgid="1653630062304567879">"Mbinu ya uingizaji"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Vitendo vya maandishi"</string>
- <string name="low_internal_storage_view_title" msgid="1399732408701697546">"Nafasi kidogo"</string>
+ <string name="low_internal_storage_view_title" msgid="1399732408701697546">"Nafasi ni ndogo"</string>
<string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">" Nafasi ya hifadhi ya kompyuta ndogo inaisha."</string>
<string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Nafasi ya hifadhi ya simu inaisha."</string>
<string name="ok" msgid="5970060430562524910">"Sawa"</string>
@@ -934,7 +935,7 @@
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Toni mlio chaguo-msingi (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Kimya"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"Toni za mlio"</string>
- <string name="ringtone_unknown" msgid="5477919988701784788">"Mkirizo amabo haujulikani"</string>
+ <string name="ringtone_unknown" msgid="5477919988701784788">"Mlio amabo haujulikani"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"Mtandao wa Wi-Fi unapatikana"</item>
<item quantity="other" msgid="4192424489168397386">"Mitandao ya Wi-Fi inapatikana"</item>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Tendua ufutaji."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Usifanye chochote kwa sasa."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Chagua akaunti"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Ongeza akaunti"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Akaunti gani ungependa kutumia?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Ongeza akaunti"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Ongezeko"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Punguza"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> gonga na shikilia"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modi ya mabadiliko"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Songa"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingiza"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Chagua programu"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Gawa na"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Gawa na <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Kishikilio cha Kuslaidi. Wahi na shikilia."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Juu ajili ya<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Chini kwa ajili ya<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Kimya"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sauti imewashwa"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Muhimu. Kifaa cha kuskiza kilihitaji kusikiliza vichupo wakati wa kucharaza nenosiri."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Muhimu. Kifaa cha kuskiza kilihitaji kusikiliza vichupo wakati wa kucharaza nenosiri."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Abiri nyumbani"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Ongoza"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Chaguo zaidi"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Hifadhi ya USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Hariri..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Onyo la matumizi ya data"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Gusa ili kuangalia matumizi na mipangilio"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data ya 2G-3G imelemazwa"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data ya 4G imelemazwa"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data ya simu imelemazwa"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index f535cae..1738de3 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<ไม่มีชื่อ>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(ไม่มีหมายเลขโทรศัพท์)"</string>
<string name="unknownName" msgid="2277556546742746522">"(ไม่ทราบ)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"ข้อความเสียง"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลโปรไฟล์ส่วนบุคคลที่จัดเก็บในอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลรายชื่อติดต่อของคุณ ซึ่งหมายความว่าแอปพลิเคชันจะสามารถระบุตัวคุณและส่งข้อมูลโปรไฟล์ของคุณไปให้ผู้อื่นได้"</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"เขียนลงในข้อมูลโปรไฟล์ของคุณ"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"อนุญาตให้แอปพลิเคชันเปลี่ยนแปลงหรือเพิ่มลงในข้อมูลโปรไฟล์ส่วนบุคคลที่จัดเก็บในอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลรายชื่อติดต่อของคุณ ซึ่งหมายความว่าแอปพลิเคชันอื่นจะสามารถระบุตัวคุณและส่งข้อมูลโปรไฟล์ของคุณไปให้ผู้อื่นได้"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"อ่านสตรีมเครือข่ายสังคม"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"อนุญาตให้แอปพลิเคชันเข้าถึงและซิงค์การอัปเดตในเครือข่ายสังคมจากคุณและเพื่อน แอปพลิเคชันที่เป็นอันตรายสามารถใช้การทำงานนี้เพื่ออ่านการติดต่อส่วนตัวระหว่างคุณกับเพื่อนในเครือข่ายสังคมได้"</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"เขียนในสตรีมเครือข่ายสังคม"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"อนุญาตให้แอปพลิเคชันแสดงการอัปเดตในเครือข่ายสังคมจากเพื่อนของคุณ แอปพลิเคชันที่เป็นอันตรายสามารถใช้การทำงานนี้เพื่อปลอมเป็นเพื่อนคุณและหลอกให้บอกรหัสผ่านหรือข้อมูลลับอื่นๆ"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"อ่านกิจกรรมบนปฏิทินรวมถึงข้อมูลที่เป็นความลับ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมทั้งหมดบนปฏิทินที่จัดเก็บไว้ในแท็บเล็ตของคุณ รวมถึงกิจกรรมของเพื่อนและเพื่อนร่วมงานของคุณด้วย แอปพลิเคชันที่เป็นอันตรายซึ่งได้รับอนุญาตจะสามารถดึงข้อมูลส่วนบุคคลจากกิจกรรมบนปฏิทินเหล่านี้ได้โดยที่เจ้าของไม่ทราบ"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมทั้งหมดบนปฏิทินที่จัดเก็บไว้ในโทรศัพท์ของคุณ รวมถึงกิจกรรมของเพื่อนและเพื่อนร่วมงานของคุณด้วย แอปพลิเคชันที่เป็นอันตรายซึ่งได้รับอนุญาตจะสามารถดึงข้อมูลส่วนบุคคลจากกิจกรรมบนปฏิทินเหล่านี้ได้โดยที่เจ้าของไม่ทราบ"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"คัดลอก URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"เลือกข้อความ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"การเลือกข้อความ"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"เพิ่มลงในพจนานุกรม"</string>
+ <string name="deleteText" msgid="7070985395199629156">"ลบ"</string>
<string name="inputMethod" msgid="1653630062304567879">"วิธีป้อนข้อมูล"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"การทำงานของข้อความ"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"เหลือที่ว่างน้อย"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"เลิกทำการลบ"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"ไม่ต้องทำอะไรในขณะนี้"</string>
<string name="choose_account_label" msgid="4191313562041125787">"เลือกบัญชี"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"เพิ่มบัญชี"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"คุณต้องการใช้บัญชีใด"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"เพิ่มบัญชี"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"การเพิ่ม"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"การลด"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"แตะ <xliff:g id="VALUE">%s</xliff:g> ค้างไว้"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"เปลี่ยนโหมด"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ป้อน"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"เลือกแอปพลิเคชัน"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"แบ่งปันกับ"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"แบ่งปันด้วย <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"ที่จับสำหรับเลื่อน แตะค้างไว้"</string>
<string name="description_direction_up" msgid="1983114130441878529">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_down" msgid="4294993639091088240">"เลื่อนลงเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"กล้องถ่ายรูป"</string>
<string name="description_target_silent" msgid="893551287746522182">"ปิดเสียง"</string>
<string name="description_target_soundon" msgid="30052466675500172">"เปิดเสียง"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"แป้นพิมพ์ จำเป็นต้องใช้ชุดหูฟังในการฟังเสียงแป้นพิมพ์ขณะพิมพ์รหัสผ่าน"</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"แป้นพิมพ์ จำเป็นต้องใช้ชุดหูฟังในการฟังเสียงแป้นพิมพ์ขณะพิมพ์รหัสผ่าน"</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"นำทางไปหน้าแรก"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"นำทางขึ้น"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"ตัวเลือกเพิ่มเติม"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"ที่เก็บข้อมูล USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"แก้ไข..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"คำเตือนการใช้ข้อมูล"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"แตะเพื่อดูการใช้งานและการตั้งค่า"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"ปิดใช้งานข้อมูล 2G-3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"ปิดใช้งานข้อมูล 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"ปิดใช้งานข้อมูลมือถือ"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 3803181..c9213b3 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<walang pamagat>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Walang numero ng telepono)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Hindi kilala)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Voicemail"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Pinapayagan ang application na bumasa ng personal na impormasyon ng profile na nakaimbak sa iyong device, tulad ng iyong pangalan at impormasyon ng contact. Nangangahulugan ito na makikilala ka ng application at maipapadala ang iyong impormasyon ng profile sa iba."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"i-write sa iyong data ng profile"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Pinapayagan ang application na baguhin o magdagdag sa personal na impormasyon ng profile na nakaimbak sa iyong device, tulad ng iyong pangalan at impormasyon ng contact. Nangangahulugan ito na makikilala ka ng iba pang mga application at maipapadala ang iyong impormasyon ng profile sa iba."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"basahin ang iyong social stream"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Binibigyang-daan ang application upang mag-access at mag-sync ng mga social update mula sa iyo at iyong mga kaibigan. Maaari itong gamitin ng mga nakakahamak na apps upang basahin ang mga pribadong pag-uusap sa pagitan mo at ng iyong mga kaibigan sa mga social network."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"magsulat sa iyong social stream"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Binibigyang-daan ang application upang magpakita ng mga social update mula sa iyong mga kaibigan. Maaari itong gamitin ng mga nakakahamak na apps upang magpanggap na kaibigan at linlangin ka sa pagsisiwalat ng mga password o ibang kumpedensyal na impormasyon."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"magbasa ng mga kaganapan sa kalendaryo kasama ang kumpedensyal na impormasyon"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Pinapayagan ang isang application na basahin ang lahat ng kaganapan sa kalendaryong naka-imbak sa iyong tablet, kasama ang mga nasa kaibigan o katrabaho. Ang isang nakapanghahamak na application na may ganitong pahintulot ay maaaring kumuha ng personal na impormasyon mula sa mga kalendaryong ito nang hindi nalalaman ng mga may-ari."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Pinapayagan ang isang application na basahin ang lahat ng kaganapan sa kalendaryong naka-imbak sa iyong telepono, kasama ang mga nasa kaibigan o katrabaho. Ang isang nakapanghahamak na application na may ganitong pahintulot ay maaaring kumuha ng personal na impormasyon mula sa mga kalendaryong ito nang hindi nalalaman ng mga may-ari."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopyahin ang URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pumili ng teksto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pagpili ng teksto"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"idagdag sa diksyunaryo"</string>
+ <string name="deleteText" msgid="7070985395199629156">"tanggalin"</string>
<string name="inputMethod" msgid="1653630062304567879">"Pamamaraan ng pag-input"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Pagkilos ng teksto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Mababa sa espasyo"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"I-undo ang mga pagtanggal."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Walang gawin sa ngayon."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pumili ng account"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Magdagdag ng account"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Aling account ang gusto mong gamitin?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Magdagdag ng account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Taasan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Babaan"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tapikin at pindutin nang matagal."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Pagbabago ng Mode"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Pumili ng isang application"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Ibahagi sa"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Ibahagi sa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Hawakan sa pag-slide. Tapikin at i-hold."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Nakataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Nakababa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tahimik"</string>
<string name="description_target_soundon" msgid="30052466675500172">"I-on ang tunog"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Key. Kinakailangan ng headset upang marinig ang mga key habang nata-type ng password."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Key. Kinakailangan ng headset upang marinig ang mga key habang nata-type ng password."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Magnabiga sa home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Magnabiga pataas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Higit pang mga pagpipilian"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB storage"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"I-edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Babala sa paggamit ng data"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Pindutin upang tingnan ang paggamit at mga setting"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Di pinagana ang data ng 2G-3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Di pinagana ang data ng 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Di pinagana ang data ng mobile"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 637cbd6..f4bafb6 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<başlıksız>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefon numarası yok)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Bilinmiyor)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Sesli Mesaj"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Uygulamaya, adınız ve iletişim bilgileriniz gibi, cihazınızda saklı kişisel profil bilgilerinizi okuma izni verir. Bu, uygulamanın sizi tanımlayabilmesi ve profil bilgilerinizi başkalarına gönderebilmesi anlamına gelir."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"profil verilerime yaz"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Uygulamaya, adınız ve iletişim bilgileriniz gibi, cihazınızda saklı kişisel profil bilgilerinizi değiştirme veya ekleme izni verir. Bu, diğer uygulamaların sizi tanımlayabileceği ve profil bilgilerinizi başkalarına gönderebileceği anlamına gelir."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"sosyal akışımı oku"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Uygulamaya, sizden ve arkadaşlarınızdan gelen sosyal güncellemelere erişme ve bunları senkronize etme izni verir. Kötü amaçlı uygulamalar bu izni, sosyal ağlar üzerinde sizinle arkadaşlarınız arasındaki kişisel iletişimi okumak için kullanabilir."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"sosyal akışıma yaz"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Uygulamaya, arkadaşlarınızdan gelen sosyal güncellemeleri görüntüleme izni verir. Kötü amaçlı uygulamalar bu izni, kendisini sizin bir arkadaşınız gibi tanıtıp sizi kandırarak şifrelerinizi veya diğer gizli bilgilerinizi almak için kullanabilir."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"takvim etkinliklerini ve gizli bilgileri oku"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Uygulamaya, tabletinizde saklı takvim etkinliklerini (özel veya iş arkadaşlarınızınkiler dahil) okuma izni verir. Kötü amaçlı bir uygulama bu izni kullanarak, sahibin bilgisi olmadan bu takvimlerden kişisel bilgileri alabilir."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Uygulamaya, telefonunuzda saklı takvim etkinliklerini (özel veya iş arkadaşlarınızınkiler dahil) okuma izni verir. Kötü amaçlı bir uygulama bu izni kullanarak, sahibin bilgisi olmadan bu takvimlerden kişisel bilgileri alabilir."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"URL\'yi kopyala"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Metin seç..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Metin seçimi"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"sözlüğe ekle"</string>
+ <string name="deleteText" msgid="7070985395199629156">"sil"</string>
<string name="inputMethod" msgid="1653630062304567879">"Giriş yöntemi"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Metin eylemleri"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Yer az"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Silme işlemlerini geri alın."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Şimdilik bir şey yapma."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Bir hesap seçin"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Hesap ekleyin"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Hangi hesabı kullanmak istersiniz?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Hesap ekle"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Artır"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Azalt"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> hafifçe vurun ve basılı tutun."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mod değiştirme"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ÜstKrkt"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Giriş"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Uygulama seçin"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Şununla paylaş:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ile paylaş"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Kayar tutma yeri. Hafifçe vurun ve basılı tutun."</string>
<string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı."</string>
<string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için aşağı."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Sessiz"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ses açık"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tuş. Şifre yazarken tuşları duyabilmek için kulaklık gerekir."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tuş. Şifre yazarken tuşları duyabilmek için kulaklık gerekir."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ana sayfaya git"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Yukarı git"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Diğer seçenekler"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB depolama birimi"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Düzenle..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Veri kullanım uyarısı"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Kullanımı ve ayarları görmek için dokunun"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G verileri devre dışı"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G verileri devre dışı"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil veriler devre dışı"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 1eb5ed0..65fd6a2 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<без назви>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Немає номера тел.)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Невідомо)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Голос. пошта"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Дозволяє програмі читати особисту інформацію профілю, збережену на вашому пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що така програма може ідентифікувати вашу особу та надсилати інформацію вашого профілю іншим."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"записувати в дані профілю"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Дозволяє програмі змінювати чи додавати особисту інформацію профілю, збережену на вашому пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що інші програми можуть ідентифікувати вашу особу та надсилати інформацію вашого профілю іншим."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"читати ваш соціальний потік"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Дозволяє програмі отримувати доступ до оновлень із соціальних мереж від вас і ваших друзів та синхронізувати їх. Шкідливі програми можуть використовувати це для доступу до приватного спілкування між вами та вашими друзями в соціальних мережах."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"писати у ваш соціальний потік"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Дозволяє програмі відображати оновлення із соціальних мереж від ваших друзів. Шкідливі програми можуть використовувати це, щоб видавати себе за вашого друга й оманливим шляхом отримувати ваші паролі чи іншу конфіденційну інформацію."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"читати події календаря, а також конфіденційну інформацію"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Дозволяє програмі читати всі події календаря, збережені в планшетному ПК, включно з подіями друзів або співробітників. Шкідлива програма з таким дозволом може отримувати особисту інформацію з цих календарів без відома власників."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Дозволяє програмі читати всі події календаря, збережені в телефоні, включно з подіями друзів або співробітників. Шкідлива програма з таким дозволом може отримувати особисту інформацію з цих календарів без відома власників."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Копіюв. URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Вибрати текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Вибір тексту"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"додати в словник"</string>
+ <string name="deleteText" msgid="7070985395199629156">"видалити"</string>
<string name="inputMethod" msgid="1653630062304567879">"Метод введення"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Дії з текстом"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Недост. місця"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Скасувати видалення."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Наразі нічого не робіть."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Вибрати обліковий запис"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Додати обліковий запис"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Який обліковий запис потрібно використовувати?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Додати облік. запис"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Додати"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Відняти"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> – торкніться й утримуйте."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Зміна режиму"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Виберіть програму"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Надіслати через"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Надіслати через <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Ручка-повзунок. Торкніться й утримуйте її."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Униз, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Без звуку"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Увімкнути звук"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Клавіша. Гарнітура має чути звук клавіш під час введення пароля."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Клавіша. Гарнітура має чути звук клавіш під час введення пароля."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на головну"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вгору"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Інші варіанти"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Носій USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Редагувати..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Застереження про використ. даних"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Торкн.,щоб див. викор. і налашт."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Дані 2G–3G вимкнено"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Дані 4G вимкнено"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобільне передав. даних вимкнено"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index e4d3423..918d269 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<không có tiêu đề>"</string>
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Không có số điện thoại nào)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Không xác định)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Thư thoại"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Cho phép ứng dụng đọc thông tin tiểu sử cá nhân được lưu trên thiết bị của bạn, ví dụ như tên và thông tin liên hệ của bạn. Điều này nghĩa là ứng dụng có thể nhận dạng bạn và gửi thông tin tiểu sử của bạn cho những người khác."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"ghi dữ liệu t.sử của bạn"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Cho phép ứng dụng thay đổi hoặc thêm vào thông tin tiểu sử cá nhân được lưu trữ trên thiết bị của bạn, ví dụ như tên và thông tin liên hệ của bạn. Điều này nghĩa là các ứng dụng khác có thể nhận dạng bạn và gửi thông tin tiểu sử của bạn cho những người khác."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"đọc luồng xã hội của bạn"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Cho phép ứng dụng truy cập và đồng bộ hóa các bản cập nhật xã hội từ bạn bè của bạn. Các ứng dụng độc hại có thể sử dụng điều này để đọc thông tin liên lạc riêng tư giữa bạn và bạn bè của bạn trên mạng xã hội."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ghi luồng xã hội của bạn"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Cho phép ứng dụng hiển thị các bản cập nhật xã hội từ bạn bè của bạn. Các ứng dụng độc hại có thể sử dụng điều này để giả vờ là một người bạn và lừa đảo bạn tiết lộ mật khẩu hoặc thông tin bảo mật khác."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"đọc các sự kiện lịch và thông tin bí mật"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Cho phép ứng dụng đọc tất cả các sự kiện lịch được lưu trữ trên máy tính bảng của bạn, bao gồm các sự kiện của bạn bè hoặc đồng nghiệp. Ứng dụng độc hại có quyền này có thể trích xuất thông tin cá nhân từ những lịch này mà chủ sở hữu không hề biết."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Cho phép ứng dụng đọc tất cả các sự kiện lịch được lưu trữ trên điện thoại của bạn, bao gồm các sự kiện của bạn bè hoặc đồng nghiệp. Ứng dụng độc hại có quyền này có thể trích xuất thông tin cá nhân từ những lịch này mà chủ sở hữu không hề biết."</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Sao chép URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chọn văn bản..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Lựa chọn văn bản"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"thêm vào từ điển"</string>
+ <string name="deleteText" msgid="7070985395199629156">"xóa"</string>
<string name="inputMethod" msgid="1653630062304567879">"Phương thức nhập"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tác vụ văn bản"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Còn ít dung lượng"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Hoàn tác các tác vụ xóa."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ngay bây giờ bạn không cần làm gì cả."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Chọn tài khoản"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Thêm tài khoản"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Bạn muốn sử dụng tài khoản nào?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Thêm tài khoản"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Tăng dần"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Giảm dần"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Bấm và giữ <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Thay đổi chế độ"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Chọn ứng dụng"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Chia sẻ với"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Chia sẻ với <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Tay trượt. Bấm và giữ."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Xuống để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Máy ảnh"</string>
<string name="description_target_silent" msgid="893551287746522182">"Im lặng"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Bật âm thanh"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Phím. Yêu cầu phải có tai nghe để nghe phím khi nhập mật khẩu."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Phím. Yêu cầu phải có tai nghe để nghe phím khi nhập mật khẩu."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Điều hướng về trang chủ"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Điều hướng lên trên"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Tùy chọn khác"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Bộ lưu trữ USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Chỉnh sửa..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Cảnh báo sử dụng dữ liệu"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Chạm để xem việc s.dụng và c.đặt"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Đã tắt dữ liệu 2G-3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G dữ liệu bị vô hiệu hóa"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dữ liệu di động bị vô hiệu hóa"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index a306d67..d6cdcbc 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<无标题>"</string>
<string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(无电话号码)"</string>
<string name="unknownName" msgid="2277556546742746522">"(未知)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"语音信箱"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允许应用程序读取您设备上存储的个人资料信息(如您的姓名和联系人信息)。这意味着应用程序可以识别您的身份并将您的个人资料发送给他人。"</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"写入到您的个人资料数据"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允许应用程序更改您设备上存储的个人资料信息(如您的姓名和联系人信息),或者向其中添加信息。这意味着其他应用程序可以识别您的身份并将您的个人资料发送给他人。"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"读取您的社交视频流"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"允许应用程序访问并同步您和好友的社交最新动态。恶意应用程序可借此读取您与社交网络上的好友之间的私人交流信息。"</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"写入您的社交视频流"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"允许应用程序显示好友的社交最新动态。恶意应用程序可借此冒充为您的一位好友,诱骗您泄露密码或其他机密信息。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"读取日历活动和机密信息"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"允许应用程序读取您平板电脑上存储的所有日历活动(包括朋友或同事的活动)。拥有此权限的恶意应用程序可在所有者不知情的情况下,从这些日历中提取个人信息。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"允许应用程序读取您手机上存储的所有日历活动(包括朋友或同事的活动)。拥有此权限的恶意应用程序可在所有者不知情的情况下,从这些日历中提取个人信息。"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"选择文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"文字选择"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"添加到词典"</string>
+ <string name="deleteText" msgid="7070985395199629156">"删除"</string>
<string name="inputMethod" msgid="1653630062304567879">"输入法"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"文字操作"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"存储空间不足"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"撤消删除。"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"目前不进行任何操作。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"选择帐户"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"添加帐户"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"您希望使用哪个帐户?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"添加帐户"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"减少"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"点按 <xliff:g id="VALUE">%s</xliff:g> 次并按住。"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"模式更改"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"选择一个应用程序"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"共享对象"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"与“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”共享"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"滑动手柄。点按并按住。"</string>
<string name="description_direction_up" msgid="1983114130441878529">"向上滑动<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
<string name="description_direction_down" msgid="4294993639091088240">"向下滑动<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"相机"</string>
<string name="description_target_silent" msgid="893551287746522182">"静音"</string>
<string name="description_target_soundon" msgid="30052466675500172">"打开声音"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"按键声。需要插入耳机才能在键入密码时听到按键声。"</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"按键声。需要插入耳机才能在键入密码时听到按键声。"</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"导航首页"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上导航"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多选项"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB 存储器"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"编辑..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"数据使用情况警告"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"触摸可查看使用情况和设置"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G 数据已停用"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G 数据已停用"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"移动数据已停用"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 6b13a95..3149403 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -29,6 +29,7 @@
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"(未命名)"</string>
<string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(沒有電話號碼)"</string>
<string name="unknownName" msgid="2277556546742746522">"(不明)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"語音留言"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允許應用程式讀取儲存在裝置上的個人資料資訊,例如您的姓名和聯絡資訊。這表示該應用程式可以識別您的身分,並將您的個人資料資訊傳送給他人。"</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"寫入您的個人資料"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允許應用程式新增或變更儲存在裝置上的個人資料資訊,例如您的姓名和聯絡資訊。這表示其他應用程式可以識別您的身分,並將您的個人資料資訊傳送給他人。"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"閱讀您的社交串流"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"允許應用程式存取並同步處理來自好友的動態更新。惡意應用程式可能會藉此讀取您和好友在社交網路上的私人訊息。"</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"寫入您的社交串流"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"允許應用程式顯示好友的動態更新。惡意應用程式可能會藉此假裝成您的好友,欺騙您透露密碼或其他機密資訊。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"讀取日曆活動與機密資訊"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"允許應用程式讀取所有儲存在您平板電腦上的日曆活動,包含好友或同事的日曆活動。惡意應用程式可能藉此在未經擁有者同意的情況下,從這些日曆擷取個人資訊。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"允許應用程式讀取所有儲存在您手機上的日曆活動,包含好友或同事的日曆活動。惡意應用程式可能藉此在未經擁有者同意的情況下,從這些日曆擷取個人資訊。"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"複製網址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"選取文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"選取文字"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"新增至字典"</string>
+ <string name="deleteText" msgid="7070985395199629156">"刪除"</string>
<string name="inputMethod" msgid="1653630062304567879">"輸入方式"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"文字動作"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"儲存空間即將不足"</string>
@@ -1113,12 +1114,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"復原刪除。"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"暫不執行。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"選取帳戶"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"新增帳戶"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"您要使用哪個帳戶?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"新增帳戶"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減少"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> 持續輕按。"</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"模式變更"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 鍵"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 鍵"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"選擇應用程式"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"分享對象:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"與「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」分享"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"滑動控制。持續輕按。"</string>
<string name="description_direction_up" msgid="1983114130441878529">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
<string name="description_direction_down" msgid="4294993639091088240">"向下滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"相機"</string>
<string name="description_target_silent" msgid="893551287746522182">"靜音"</string>
<string name="description_target_soundon" msgid="30052466675500172">"開啟音效"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"提醒您,輸入密碼時需要使用耳機才能聽到按鍵名稱。"</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"提醒您,輸入密碼時需要使用耳機才能聽到按鍵名稱。"</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"瀏覽首頁"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上瀏覽"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多選項"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB 儲存裝置"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"編輯..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"資料用量警告"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"輕觸即可查看使用量和設定"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"已停用 2G-3G 數據"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"已停用 4G 數據"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"已停用行動數據"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index f7dde4f..8341e92 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -21,21 +21,22 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="byteShort" msgid="8340973892742019101">"B"</string>
- <string name="kilobyteShort" msgid="5973789783504771878">"I-KB"</string>
- <string name="megabyteShort" msgid="6355851576770428922">"I-MB"</string>
- <string name="gigabyteShort" msgid="3259882455212193214">"I-GB"</string>
- <string name="terabyteShort" msgid="231613018159186962">"I-TB"</string>
- <string name="petabyteShort" msgid="5637816680144990219">"I-PB"</string>
+ <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+ <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+ <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+ <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+ <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<untitled>"</string>
<string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ayikho inombolo yocingo)"</string>
<string name="unknownName" msgid="2277556546742746522">"(Akwaziwa)"</string>
- <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Umyalezo wezwi"</string>
+ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Ivoyisimeyili"</string>
<string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
<string name="mmiError" msgid="5154499457739052907">"Inkinga yoxhumano noma ikhadi ye-MMI engalungile."</string>
<string name="mmiFdnError" msgid="5224398216385316471">"Umsebenzi uvinjelwe ekudayeleni izinombolo ezingaguquki kuphela."</string>
- <string name="serviceEnabled" msgid="8147278346414714315">"Insizakalo ivaliwe."</string>
+ <string name="serviceEnabled" msgid="8147278346414714315">"Isevisi ivaliwe."</string>
<string name="serviceEnabledFor" msgid="6856228140453471041">"Isevisi ivulelwe:"</string>
<string name="serviceDisabled" msgid="1937553226592516411">"Isevisi ivaliwe."</string>
<string name="serviceRegistered" msgid="6275019082598102493">"Ukubhalisa kuphumelele."</string>
@@ -51,9 +52,9 @@
<string name="needPuk2" msgid="4526033371987193070">"Thayipha i-PUK2 ukuze uvule ikhadi le-SIM."</string>
<string name="ClipMmi" msgid="6952821216480289285">"I-ID Yocingo Olungenayo"</string>
<string name="ClirMmi" msgid="7784673673446833091">"I-ID Yomshayeli Ephumayo"</string>
- <string name="CfMmi" msgid="5123218989141573515">"Ukudlulisa ucingo"</string>
- <string name="CwMmi" msgid="9129678056795016867">"Ucingo lulindile"</string>
- <string name="BaMmi" msgid="455193067926770581">"Ukuvima ucingo"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"Ukudlulisa ikholi"</string>
+ <string name="CwMmi" msgid="9129678056795016867">"Ikholi ilindile"</string>
+ <string name="BaMmi" msgid="455193067926770581">"Ukuvimba ikholi"</string>
<string name="PwdMmi" msgid="7043715687905254199">"Shintsha iphasiwedi"</string>
<string name="PinMmi" msgid="3113117780361190304">"shintsha i-PIN"</string>
<string name="CnipMmi" msgid="3110534680557857162">"Ukushayela inombolo kukhona"</string>
@@ -80,11 +81,11 @@
<string name="serviceClassVoice" msgid="1258393812335258019">"Izwi"</string>
<string name="serviceClassData" msgid="872456782077937893">"Idatha"</string>
<string name="serviceClassFAX" msgid="5566624998840486475">"Ifeksi"</string>
- <string name="serviceClassSMS" msgid="2015460373701527489">"I-SMS"</string>
+ <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
<string name="serviceClassDataAsync" msgid="4523454783498551468">"Vumelanisa"</string>
<string name="serviceClassDataSync" msgid="7530000519646054776">"Vumelanisa"</string>
<string name="serviceClassPacket" msgid="6991006557993423453">"Iphakethe"</string>
- <string name="serviceClassPAD" msgid="3235259085648271037">"I-PAD"</string>
+ <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
<string name="roamingText0" msgid="7170335472198694945">"Isikhombisi Sokuzulazula Sivuliwe"</string>
<string name="roamingText1" msgid="5314861519752538922">"Isibonisi Sokuzulazula Sivaliwe"</string>
<string name="roamingText2" msgid="8969929049081268115">"Isikhombisi Sokuzulazula Siyafulesha"</string>
@@ -170,7 +171,7 @@
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Izilawuli zezingxenyekazi zekhompyutha"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Ukufinyelela okuqondile ihadiwe nehendsethi."</string>
- <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Izincingo zefoni"</string>
+ <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Amakholi efoni"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Qapha, bhala, futhi wenze amakholi wefoni."</string>
<string name="permgrouplab_systemTools" msgid="4652191644082714048">"Amathuluzi esistimu"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ukufinyelela kwezinga eliphansi nokulawula uhlelo."</string>
@@ -179,7 +180,7 @@
<string name="permgrouplab_storage" msgid="1971118770546336966">"Isitoreji"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela kwisitoreji se-USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
- <string name="permlab_statusBar" msgid="7417192629601890791">"vimbela noma guqula ibha yomumo"</string>
+ <string name="permlab_statusBar" msgid="7417192629601890791">"khubaza noma guqula ibha yomumo"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Ivumela uhlelo lokusebenza ukuvimbela umudwa ochaza ngesimo noma ukufaka noma ukukhipha izithonjana zohlelo."</string>
<string name="permlab_statusBarService" msgid="7247281911387931485">"umudwa ochaza ngesimo"</string>
<string name="permdesc_statusBarService" msgid="4097605867643520920">"Ivumela uhlelo lokusebenza ukuba umudwa ochaza ngesimo."</string>
@@ -251,13 +252,13 @@
<string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Ivumela uhlelo lokusebenza ukuqalisa ukuqinisekisw okuphelele kwesipele kwe-UI. Akumelwe kusetshenziswe noma yiluphi uhlelo lokusebenza."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"bonisa amawindi angavunyelwe"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Ivumela ukwenziwa kwemawindi ehloselwe ukusebenziswa uxhumano lomsebenzisi wohlelo lwangaphakathi. Ayisebenziswa izinhlelo zokusebenza ezivamile"</string>
- <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"bonisa izexwayiso zezinga lesistimu"</string>
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"bonisa izaziso zezinga lesistimu"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Ivumela uhlelo lokusebenza ukubonisa amawindi okuxwayisa ohlelo. Izinhlelo zokusebenza ezinonya zingase zithathe isikrini sonke."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"guqula isivinini sokugqwayiza jikelele"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Ivumela uhlelo lokusebenza ukushintsha isivinini sokugqwayiza jikelele (ukugqwayiza okusheshayo noma okulengayo) nganoma isiphi isikhathi."</string>
<string name="permlab_manageAppTokens" msgid="17124341698093865">"phatha amathokeni ohlelo lokusebenza"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"Ivumela izinhlelo zokusebenza ukwenza nokuphatha amathokhini awo, ngokudlula ukuhleleka kuka-Z. Akusoze kwadingeka ezinhlelweni ezivamile."</string>
- <string name="permlab_injectEvents" msgid="1378746584023586600">"cindizela okhiye nezinkinobho zokulawula"</string>
+ <string name="permlab_injectEvents" msgid="1378746584023586600">"chofoza okhiye nezinkinobho zokulawula"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Ivumela uhlelo lokusebenza ukuthumela izenzakalo zawo zokufakwayo (ukucindezela ukhiye, nokunye) kwezinye izihlelo zokusebenza. Izinhlelo ezinonya zingasebenzisa lokhu ukuthatha ithebhulethi."</string>
<string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Ivumela uhlelo lokusebenza ukuthumela izenzakalo zawo zokufakwayo (ukucindezela ukhiye, nokunye) kwezinye izihlelo zokusebeza. Izinhlelo ezinonya zingasebenzisa lokhu ukuthatha ifoni."</string>
<string name="permlab_readInputState" msgid="469428900041249234">"qopha lokho okuthayiphayo nezinyathelo ozithathayo"</string>
@@ -285,7 +286,7 @@
<string name="permlab_deletePackages" msgid="3343439331576348805">"susa izinhlelo zokusebenza"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"Ivumela izinhlelo zokusebenza ukususa amaphakheji e-Android. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukususa izinhlelo zokusebenza ezibalulekile."</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"susa enye idatha yezinhlelo zokusebenza"</string>
- <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Ivumela uhlelo lokusebenza ukuba lisule idatha yomsebenzisi."</string>
+ <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Ivumela uhlelo lokusebenza ukuthi lisule idatha yomsebenzisi."</string>
<string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"susa ezinye izilondolozi zesikhashana zezinhlelo zokusebenza"</string>
<string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Ivumela uhlelo lokusebenza ukususa amafayela okulondoloza okwesikhashana."</string>
<string name="permlab_getPackageSize" msgid="4799785352306641460">"linganisa isikhala sokugcina uhlelo lokusebenza"</string>
@@ -329,6 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ivumela isisetshenziswa ukuthi sifunde imininingwane yakho egcinwe kwi-device yakho, efana igama lakho kanye nemininingwane yokuxhumana. Lokhu kuchaza ukuthi isisetshenziswa singakwazi ukubona ukuthi nguwe bese sithumela imininingwane yakho kwabanye."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"bhala imininingwane yemininingo yakho"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ivumela isisetshenziswa ukuthi sifunde imininingwane yakho egcinwe kwi-device yakho, efana igama lakho kanye nemininingwane yokuxhumana. Lokhu kuchaza ukuthi isisetshenziswa singakwazi ukubona ukuthi nguwe bese sithumela imininingwane yakho kwabanye."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"funda ngezindlela zakho zokuxhumana nabanye abantu"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Ivumela insiza ukuthi ifinyelele iphinde ivumelanisa izaziso zokuxhumana nabanye abantu. Izinsiza ezinobungozi zingasebnzisa lokhu ukufunda ukuxhumana okuyimfihlo phakathi kwakho nabangani bakho."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"bhala indlela yakho yokuxhumana nabantu"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Ivumela insiza ukuthi ikhombise izaziso zokuxhumana komphakathi ebanganini bakho. Izinsiza ezinobungozi zingasebenzisa lokhu ukwenza sengathi umngani zikukhohlise ukuze uveze iphasiwedi yakho noma eminye imininingwane yakho eyimfihlo."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"funda izenzakalo zekhalenda kanye nokwaziswa okuyimfihlo"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezilondolozwe kwithebhulethi yakho, kuhlanganise ezabangani noma osebenza nabo. Uhlelo lokusebenza olu-malicious olunalemvume lungase luthathe ukwaziswa komuntu siqu kulamakhalenda ngaphandle kolwazi lomnikazi."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezilondolozwe efonini yakho, kuhlanganise ezabangani noma osebenza nabo. Uhlelo lokusebenza olu-malicious olunalemvume lungase luthathe ukwaziswa komuntu siqu kulamakhalenda ngaphandle kolwazi lomnikazi."</string>
@@ -336,7 +341,7 @@
<string name="permdesc_writeCalendar" msgid="5368129321997977226">"Ivumela uhlelo lokusebenza ukuthumela izimemo njengomnikazi wekhalenda futhi ufake, ukhiphe, ushintshe izenzakalo ongakwazi ukuziguqula kwidivaysi yakho, kuhlanganise lezo zabangani noma osebenza nabo. Uhlelo lokusebenza olu-malicious olunalemvume lungase luthumele ama-imeyili angafuneki ukuba aphume kubanikazi bekhalenda, luguqule izenzakalo ngaphandle kolwazi lomnikazi, noma lufake izenzakalo mbumbulu ezintsha."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"lungisela imithombo yendawo ukuhlolwa"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Yenza imithombo yendawo ukuhlola. Izinhlelo ezinonya zingase zisebenzise lokhu ukukhipha indawo futhi/noma isimo esibuyiswe imithombo yendawo yangempela njengabahlinzeki be-GPS noma Inethiwekhi."</string>
- <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"finyelela eminye imiyalo yokunikeza indawo"</string>
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"finyelela kweminye imiyalo yokunikeza indawo"</string>
<string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Finyelela kweminye imiyalo yendawo eyengeziwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukuphazamaisa ukusebenza kwe-GPS noma eminye imithombo yezinye izindawo."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"imvume yokufaka umhlinzeki wendawo"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Yenza imithombo yokudlala ukuhlola. Izinhlelo ezinonya zingase zisebenzise lokhu ukukhipha indawo futhi/noma isimo esibuyiswe imithombo yendawo yangempela njenge-GPS noma abahlinzeki Benethiwekhi noma zigade futhi zibike indawo yakho njengomthombo wangaphandle."</string>
@@ -397,7 +402,7 @@
<string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Ivumela uhlelo lokusebenza ukuqalisa amalungiselelo e-CDMA. Izinhlelo ezinonya ngokungadingekile zingaqalisa amalungiselelo e-CDMA."</string>
<string name="permlab_locationUpdates" msgid="7785408253364335740">"lawula izaziso zokubuyekeza indawo"</string>
<string name="permdesc_locationUpdates" msgid="2300018303720930256">"Ivumela ukuvula/ukuvimbela izaziso zesibuyekezo sendawo kusuka emsakazweni. Akumele isebenziswe izinhlelo zokusebenza ezivamile."</string>
- <string name="permlab_checkinProperties" msgid="7855259461268734914">"finyelela izakhiwo zokuhlola"</string>
+ <string name="permlab_checkinProperties" msgid="7855259461268734914">"finyelela kwizakhiwo zokuhlola"</string>
<string name="permdesc_checkinProperties" msgid="7150307006141883832">"Ivumela ukufinyelela kokufunda/ukubhalela ezicini ezilayishwe insizakalo zokuhlola. Akuyona eyokusebenziswa izinhlelo zokusebenza ezivamile."</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"khetha izinqunjwana"</string>
<string name="permdesc_bindGadget" msgid="2098697834497452046">"Ivumela uhlelo lokusebenza ukutshela isistimu ukuthi yimaphi amawijethi angasebenziswa yiziphi izinhlelo zokusebenza. Ngalemvume, izinhlelo zokusebenza zinganikeza ukufinyelela idatha yomuntu siqu kwezinye izinhlelo zokusebenza. Ayisebenziswa izinhlelo zokusebenza ezivamile."</string>
@@ -416,7 +421,7 @@
<string name="permlab_factoryTest" msgid="3715225492696416187">"sebenzisa kwimodi yokuhlola yemboni"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yethebhulethi. Itholakala kuphela lapho ithebhulethi isebenza kwimodi yokuhlola yomkhiqizi."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yefoni. Itholakala kuphela lapho ifoni isebenza kwimodi yokuhlola yomkhiqizi."</string>
- <string name="permlab_setWallpaper" msgid="6627192333373465143">"setha iphepha donga"</string>
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"setha iphephadonga"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"Ivumela uhlelo lokusebenza ukuhlela iphephadonga lesistimu."</string>
<string name="permlab_setWallpaperHints" msgid="3600721069353106851">"setha izixwayiso zosayizi wephephadonga"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Ivumela uhlelo lokusebenza ukuhlela izihlawumbisela zosayizi wephephadonga lohlelo."</string>
@@ -460,12 +465,12 @@
<string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"ukubhalisela i-bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Ivumela uhlelo lokusebenza ukumisa ithebhulethi ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Ivumela uhlelo lokusebenza ukumisa ifoni ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
- <string name="permlab_bluetooth" msgid="8361038707857018732">"Yenza uxhumano lwe-Bluetooth"</string>
+ <string name="permlab_bluetooth" msgid="8361038707857018732">"Dala uxhumano lwe-Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Ivumela uhlelo lokusebenza ukubuka ukumisa ifoni yethebhulethi ye-Bluetooth yasendaweni, nokwenza futhi nokwamukela uxhumano ngamadivaysi abhangqene."</string>
<string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Ivumela uhlelo lokusebenza ukubuka ukumisa ifoni ye-Bluetooth yasendaweni, nokwenza futhi nokwamukela uxhumano ngamadivaysi abhangqene."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"lawula Uxhumano Lwenkambu Eseduze"</string>
<string name="permdesc_nfc" msgid="9171401851954407226">"Ivumela uhlelo lokusebenza ukuxhumana nezilengisi, amakhadi, nabafundi Bokuxhumana Nenkambu Eseduze (NFC)."</string>
- <string name="permlab_disableKeyguard" msgid="4977406164311535092">"vimbela ukuvala ukhiye"</string>
+ <string name="permlab_disableKeyguard" msgid="4977406164311535092">"khubaza ukuvala ukhiye"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Ivumela uhlelo lokusebenza ukuvimbela ukuvala ukhiye nanoma yikuphi ukuphepha kwephasiwedi okuhlobene. Isibonelo esisemthethweni salokhu ukuba ifoni ivimbele ukuvala ukhiye laphi ithola ikholi engenayo, bese ivumela futhi ukuvala ukhiye lapho ucingo seluqedile."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"funda izilungiselelo zokuvumelanisa"</string>
<string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Ivumela uhlelo lokusebenza ukufunda izilungiselelo zokuvumelanisa, njengokuthi ingabe ukuvumelanisa kuvulelwe yini Othintana nabo."</string>
@@ -638,14 +643,14 @@
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Faka iphasiwedi ukuvula"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Faka i-PIN ukuvula"</string>
<string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Ikhodi ye-PIN engalungile!"</string>
- <string name="keyguard_label_text" msgid="861796461028298424">"Ukuvula, cindezela Menyu bese 0."</string>
+ <string name="keyguard_label_text" msgid="861796461028298424">"Ukuvula, chofoza Menyu bese 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Inombolo ephuthumayo"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"Ayikho isevisi"</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Isikrini sivaliwe."</string>
- <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Cindezela Menyu ukuvula noma ukwenza ucingo oluphuthumayo."</string>
- <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Cindezela Menyu ukuvula."</string>
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Chofoza Menyu ukuvula noma ukwenza ikholi ephuthumayo."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Chofoza Menyu ukuvula."</string>
<string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Dweba iphathini ukuvula"</string>
- <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Ucingo oluphuthumayo"</string>
+ <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Ikholi ephuthumayo"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Buyela ekholini"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Lungile!"</string>
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Uxolo, zama futhi"</string>
@@ -675,13 +680,13 @@
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Uzame ngokusebenzisa indlela engafanele ukuvula izikhathi <xliff:g id="NUMBER_0">%d</xliff:g> zocingo. Ngemuva <xliff:g id="NUMBER_1">%d</xliff:g> kokuzama kaningana ngaphandle kwempumelelo, ucingo luzobiyiselwa kwizimiso zasembonini futhi yonke imininingo yomsebenzisi izolahleka."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Uzame ukuvula ngendlela engafanele izikhathi <xliff:g id="NUMBER">%d</xliff:g> ze-tablet. I-tablet manje seyizosethwa kabusha ibe yizimiso zasembonini."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Uzame ukuvula ngendlela engafanele izikhathi <xliff:g id="NUMBER">%d</xliff:g> zocingo. Ucingo manje seyizosethwa kabusha ibe yizimiso zasembonini."</string>
- <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Zama futhi emizuzwini engu <xliff:g id="NUMBER">%d</xliff:g>."</string>
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Zama futhi emaminithini angu <xliff:g id="NUMBER">%d</xliff:g>."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Ukhohlwe iphethini?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Ukuvulwa kwe-akhawunti"</string>
- <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Kunemizama eminingi kakhulu yephathini!"</string>
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Kunemizamo eminingi kakhulu yephathini!"</string>
<string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Ukuvula, ngena ngemvumekwi-akhawunti ye-Google"</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Igama lomsebenzisi (i-imeyli)"</string>
- <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"I-password"</string>
+ <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Iphasiwedi"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Ngena ngemvume"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Igama lomsebezisi elingalungile noma iphasiwedi."</string>
<string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"Ukhohlwe igama lomsebenzisi noma i-password?"\n"Vakashela"<b>"google.com/accounts/recovery"</b></string>
@@ -753,7 +758,7 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"xazulula umbuzo"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Thumela umbuzo"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Ukucinga ngezwi"</string>
- <string name="oneMonthDurationPast" msgid="7396384508953779925">"inyanga eyi-1 edlule"</string>
+ <string name="oneMonthDurationPast" msgid="7396384508953779925">"inyanga engu-1 edlule"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ngaphambi kwenyanga engu-1 edlule"</string>
<plurals name="num_seconds_ago">
<item quantity="one" msgid="4869870056547896011">"isekhondi elingu-1 eledlule"</item>
@@ -833,7 +838,7 @@
<string name="hours" msgid="894424005266852993">"amahora"</string>
<string name="minute" msgid="9148878657703769868">"Okuncane"</string>
<string name="minutes" msgid="5646001005827034509">"imizuzu"</string>
- <string name="second" msgid="3184235808021478">"umzuzwana"</string>
+ <string name="second" msgid="3184235808021478">"isekhondi"</string>
<string name="seconds" msgid="3161515347216589235">"amasekhondi"</string>
<string name="week" msgid="5617961537173061583">"iviki"</string>
<string name="weeks" msgid="6509623834583944518">"amaviki"</string>
@@ -859,12 +864,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopisha i-URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Khetha umbhalo..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Inketho yombhalo"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
- <skip />
- <!-- no translation found for addToDictionary (9090375111134433012) -->
- <skip />
- <!-- no translation found for deleteText (7070985395199629156) -->
- <skip />
+ <string name="addToDictionary" msgid="9090375111134433012">"Faka esichazinimazwi"</string>
+ <string name="deleteText" msgid="7070985395199629156">"susa"</string>
<string name="inputMethod" msgid="1653630062304567879">"Indlela yokufakwayo"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Izenzo zombhalo"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Isikhala sincane"</string>
@@ -880,9 +881,9 @@
<string name="capital_off" msgid="6815870386972805832">"VALIWE"</string>
<string name="whichApplication" msgid="4533185947064773386">"Qedela isenzo usebenzisa"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Sebenzisa ngokuzenzakalelayo kulesenzo."</string>
- <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Sula okuzenzakalelayo Emalungiselelweni Asekhaya > Uhlelo Lokusebenza > Phatha izinhlelo zokusebenza"</string>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Sula okuzenzakalelayo Emalungiselelweni Asekhaya; Uhlelo Lokusebenza; Phatha izinhlelo zokusebenza"</string>
<string name="chooseActivity" msgid="1009246475582238425">"Khetha isenzo"</string>
- <string name="chooseUsbActivity" msgid="7892597146032121735">"Khethela idivayisi ye-USB uhlelolokusebenza"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"Khethela idivayisi ye-USB uhlelo lokusebenza"</string>
<string name="noApplications" msgid="1691104391758345586">"Azikho izinhlelo zokusebenza ezingenza lesi sinyathelo."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<string name="aerr_application" msgid="932628488013092776">"Ngeshwa, <xliff:g id="APPLICATION">%1$s</xliff:g> kumile."</string>
@@ -1113,14 +1114,11 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Guqula okususiwe."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ungenzi lutho okwamanje."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Khetha i-akhawunti"</string>
- <!-- no translation found for add_account_label (2935267344849993553) -->
- <skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
- <skip />
- <!-- no translation found for add_account_button_label (3611982894853435874) -->
- <skip />
+ <string name="add_account_label" msgid="2935267344849993553">"Yengeza i-akhawunti"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"Ikuphi ongathanda ukukusebenzisa?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"Engeza i-akhawunti"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Nciphisa"</string>
- <string name="number_picker_decrement_button" msgid="2576606679160067262">"i-Descrement"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrement"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> chofoza bese ucindezela."</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Shishilizisa kwenyuke kuye ekwenyusweni kwehle kuye ekwehlisweni."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Umzuzu wokwenyusa."</string>
@@ -1150,6 +1148,9 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ukushintsha kwendlela esetshenziswayo"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Beka kwenye indawo"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Faka"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"Khetha insiza"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Yabelana no"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Yabelana no <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Isibambo esishelelayo. Thepha bese uyabamba."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Phezulu kwe <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Ngaphansi kwe <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1159,7 +1160,9 @@
<string name="description_target_camera" msgid="969071997552486814">"Ikhamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Thulile"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Umsindo uvuliwe"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Izinkinobho. I-Headset edingeka ukuze kuzwakale izinkinobho ngesikhathi uthayipha i-password."</string>
+ <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Izinkinobho. I-Headset edingeka ukuze kuzwakale izinkinobho ngesikhathi uthayipha i-password."</string>
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Zulazulela ekhaya"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Zulazulela phezulu"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Izinketho ezingaphezulu"</string>
@@ -1168,10 +1171,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Isitoreji se-USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Hlela..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Isexwayiso sokusetshenziswa kwedatha"</string>
- <!-- unknown placeholder SIZE in data_usage_warning_body -->
- <skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
- <skip />
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Thinta ze ubone ukusebenza kanye nezisetho"</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Idatha ye-2G-3G ikhubasekisiwe"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Idatha ye-4G ikhubazekisiwe"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Idatha yeselula ikhubazekile"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index c990125..6c7a981 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -158,6 +158,9 @@
<!-- The underline color and thickness for misspelled suggestion -->
<attr name="textAppearanceMisspelledSuggestion" format="reference" />
+ <!-- The underline color and thickness for auto correction suggestion -->
+ <attr name="textAppearanceAutoCorrectionSuggestion" format="reference" />
+
<!-- The underline color -->
<attr name="textUnderlineColor" format="reference|color" />
<!-- The underline thickness -->
@@ -3181,6 +3184,12 @@
<!-- Base text color, typeface, size, and style. -->
<attr name="textAppearance" />
</declare-styleable>
+ <declare-styleable name="SelectionModeDrawables">
+ <attr name="actionModeSelectAllDrawable" />
+ <attr name="actionModeCutDrawable" />
+ <attr name="actionModeCopyDrawable" />
+ <attr name="actionModePasteDrawable" />
+ </declare-styleable>
<declare-styleable name="SuggestionSpan">
<attr name="textUnderlineColor" />
<attr name="textUnderlineThickness" />
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 727c6ea..dbd49fb 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1566,7 +1566,7 @@
<!-- The attribute that holds a Base64-encoded public key. -->
<attr name="publicKey" format="string" />
- <!-- Attributes relating to a package verifier -->
+ <!-- Attributes relating to a package verifier. -->
<declare-styleable name="AndroidManifestPackageVerifier" parent="AndroidManifest">
<!-- Specifies the Java-style package name that defines this
package verifier. -->
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index f0c6d09..a9c603f 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -61,7 +61,7 @@
<color name="suggestion_highlight_text">#177bbd</color>
<drawable name="stat_notify_sync_noanim">@drawable/stat_notify_sync_anim0</drawable>
- <drawable name="stat_sys_download_done">@drawable/stat_sys_download_anim0</drawable>
+ <drawable name="stat_sys_download_done">@drawable/stat_sys_download_done_static</drawable>
<drawable name="stat_sys_upload_done">@drawable/stat_sys_upload_anim0</drawable>
<drawable name="dialog_frame">@drawable/panel_background</drawable>
<drawable name="alert_dark_frame">@drawable/popup_full_dark</drawable>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index ae39760..bde2c72 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -182,6 +182,28 @@
<!-- Regex of wired ethernet ifaces -->
<string translatable="false" name="config_ethernet_iface_regex">eth\\d</string>
+ <!-- If the mobile hotspot feature requires provisioning, an intent string can be provided
+ to the launch a supported application that provisions the devices.
+
+ Example Usage:
+
+ Intent intent = new Intent(R.string.config_mobile_hotspot_provision_intent);
+ startActivityForResult(intent, 0);
+
+ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+ super.onActivityResult(requestCode, resultCode, intent);
+ if (requestCode == 0) {
+ if (resultCode == Activity.RESULT_OK) {
+ //Mobile hotspot provisioning successful
+ } else {
+ //Mobile hotspot provisioning failed
+ }
+ }
+
+ See src/com/android/settings/TetherSettings.java for more details.
+ -->
+ <string translatable="false" name="config_mobile_hotspot_provision_intent"></string>
+
<!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering -->
<!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or
<!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH -->
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 1cd3911..dfd8306 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -183,4 +183,10 @@
<!-- Volume panel y offset -->
<dimen name="volume_panel_top">80dp</dimen>
+
+ <!-- Default padding to apply to AppWidgetHostViews containing widgets targeting API level 14 and up. -->
+ <dimen name="default_app_widget_padding_left">8dp</dimen>
+ <dimen name="default_app_widget_padding_top">8dp</dimen>
+ <dimen name="default_app_widget_padding_right">8dp</dimen>
+ <dimen name="default_app_widget_padding_bottom">8dp</dimen>
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 2d5d4cc..fb4783b 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -941,6 +941,19 @@
information. This means other applications can identify you and send your profile
information to others.</string>
+ <!-- Title of the read social stream permission, listed so the user can decide whether to allow the application to read information from the user's social stream. [CHAR LIMIT=30] -->
+ <string name="permlab_readSocialStream" product="default">read your social stream</string>
+ <string name="permdesc_readSocialStream" product="default">Allows the application to access
+ and sync social updates from you and your friends. Malicious apps can use this to read
+ private communications between you and your friends on social networks.</string>
+
+ <!-- Title of the write social stream permission, listed so the user can decide whether to allow the application to write information to the user's social stream. [CHAR LIMIT=30] -->
+ <string name="permlab_writeSocialStream" product="default">write to your social stream</string>
+ <string name="permdesc_writeSocialStream" product="default">Allows the application to display
+ social updates from your friends. Malicious apps can use this to pretend to be a friend
+ and trick you into revealing passwords or other confidential information.</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_readCalendar">read calendar events plus confidential information</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -1818,6 +1831,17 @@
<string name="lockscreen_permanent_disabled_sim_instructions">Your SIM card is permanently disabled.\n
Please contact your wireless service provider to obtain another SIM card.</string>
+ <!-- Shown on transport control of lockscreen. Pressing button goes to previous track. -->
+ <string name="lockscreen_transport_prev_description">Previous track button</string>
+ <!-- Shown on transport control of lockscreen. Pressing button goes to next track. -->
+ <string name="lockscreen_transport_next_description">Next track button</string>
+ <!-- Shown on transport control of lockscreen. Pressing button pauses playback -->
+ <string name="lockscreen_transport_pause_description">Pause button</string>
+ <!-- Shown on transport control of lockscreen. Pressing button pauses playback -->
+ <string name="lockscreen_transport_play_description">Play button</string>
+ <!-- Shown on transport control of lockscreen. Pressing button pauses playback -->
+ <string name="lockscreen_transport_stop_description">Stop button</string>
+
<!-- Shown in the lock screen when there is emergency calls only mode. -->
<string name="emergency_calls_only" msgid="2485604591272668370">Emergency calls only</string>
@@ -1945,6 +1969,15 @@
<!-- Displayed on lock screen's right tab - turn sound off -->
<string name="lockscreen_sound_off_label">Sound off</string>
+ <!-- Accessibility description sent when user starts drawing a lock pattern. [CHAR LIMIT=NONE] -->
+ <string name="lockscreen_access_pattern_start">Pattern started</string>
+ <!-- Accessibility description sent when the pattern times out and is cleared. [CHAR LIMIT=NONE] -->
+ <string name="lockscreen_access_pattern_cleared">Pattern cleared</string>
+ <!-- Accessibility description sent when user adds a cell to the pattern. [CHAR LIMIT=NONE] -->
+ <string name="lockscreen_access_pattern_cell_added">Cell added</string>
+ <!-- Accessibility description sent when user completes drawing a pattern. [CHAR LIMIT=NONE] -->
+ <string name="lockscreen_access_pattern_detected">Pattern completed</string>
+
<!-- Password keyboard strings. Used by LockScreen and Settings --><skip />
<!-- Label for "switch to symbols" key. Must be short to fit on key! -->
<string name="password_keyboard_label_symbol_key">\?123</string>
@@ -3182,6 +3215,16 @@
<!-- Description of the Enter button in a KeyboardView. [CHAR LIMIT=NONE] -->
<string name="keyboardview_keycode_enter">Enter</string>
+ <!-- ActivityChooserView - accessibility support -->
+ <!-- Description of the shwoing of a popup window with activities to choose from. [CHAR LIMIT=NONE] -->
+ <string name="activitychooserview_choose_application">Choose an application</string>
+
+ <!-- ShareActionProvider - accessibility support -->
+ <!-- Description of the choose target button in a ShareActionProvider (share UI). [CHAR LIMIT=NONE] -->
+ <string name="shareactionprovider_share_with">Share with</string>
+ <!-- Description of a share target (both in the list of such or the default share button) in a ShareActionProvider (share UI). [CHAR LIMIT=NONE] -->
+ <string name="shareactionprovider_share_with_application">Share with <xliff:g id="application_name" example="Bluetooth">%s</xliff:g></string>
+
<!-- Slide lock screen -->
<!-- Description of the sliding handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
@@ -3206,8 +3249,9 @@
<string name="description_target_soundon">Sound on</string>
<!-- Announce that a headset is required to hear keyboard keys while typing a password. [CHAR LIMIT=NONE] -->
- <string name="keyboard_headset_required_to_hear_password">Key. Headset required to hear
- keys while typing a password.</string>
+ <string name="keyboard_headset_required_to_hear_password">Plug in a headset to hear password keys spoken aloud.</string>
+ <!-- The value of a keyboard key announced when accessibility is enabled and no headsed is used. [CHAR LIMIT=NONE] -->
+ <string name="keyboard_password_character_no_headset">Dot.</string>
<!-- Content description for the action bar "home" affordance. [CHAR LIMIT=NONE] -->
<string name="action_bar_home_description">Navigate home</string>
@@ -3306,4 +3350,4 @@
<!-- Delimeter used between each item in a textual list; for example "Alpha, Beta". [CHAR LIMIT=3] -->
<string name="list_delimeter">", "</string>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index b6e213c..20af731 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -250,13 +250,17 @@
</style>
<style name="TextAppearance.EasyCorrectSuggestion" parent="TextAppearance.Suggestion">
- <item name="android:textUnderlineColor">#ff888888</item>
+ <item name="android:textUnderlineColor">#ffC8C8C8</item>
</style>
<style name="TextAppearance.MisspelledSuggestion" parent="TextAppearance.Suggestion">
<item name="android:textUnderlineColor">@color/holo_red_light</item>
</style>
+ <style name="TextAppearance.AutoCorrectionSuggestion" parent="TextAppearance.Suggestion">
+ <item name="android:textUnderlineColor">@color/holo_blue_light</item>
+ </style>
+
<!-- Widget Styles -->
<style name="Widget">
@@ -1513,8 +1517,8 @@
</style>
<style name="Widget.Holo.StackView">
- <item name="android:resOutColor">#ff6699ff</item>
- <item name="android:clickColor">#886699ff</item>
+ <item name="android:resOutColor">@android:color/holo_blue_light</item>
+ <item name="android:clickColor">@android:color/holo_blue_light</item>
</style>
<style name="Widget.Holo.Button.Borderless">
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 1987d99..b18d88f 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -91,6 +91,7 @@
<item name="textAppearanceEasyCorrectSuggestion">@android:style/TextAppearance.EasyCorrectSuggestion</item>
<item name="textAppearanceMisspelledSuggestion">@android:style/TextAppearance.MisspelledSuggestion</item>
+ <item name="textAppearanceAutoCorrectionSuggestion">@android:style/TextAppearance.AutoCorrectionSuggestion</item>
<item name="textAppearanceButton">@android:style/TextAppearance.Widget.Button</item>
diff --git a/core/res/res/xml/password_kbd_numeric.xml b/core/res/res/xml/password_kbd_numeric.xml
index 2fd5aa0..560f867 100755
--- a/core/res/res/xml/password_kbd_numeric.xml
+++ b/core/res/res/xml/password_kbd_numeric.xml
@@ -49,12 +49,10 @@
</Row>
<Row android:rowEdgeFlags="bottom">
+ <Key android:codes="48" android:keyIcon="@drawable/sym_keyboard_num0_no_plus"
+ android:keyWidth="66.66%p" android:keyEdgeFlags="left"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_ok"
- android:keyEdgeFlags="left"/>
- <Key android:codes="48" android:keyIcon="@drawable/sym_keyboard_num0_no_plus"/>
- <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete"
- android:iconPreview="@drawable/sym_keyboard_feedback_delete"
- android:isRepeatable="true" android:keyEdgeFlags="right"/>
+ android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
diff --git a/services/tests/servicestests/res/raw/net_dev_typical b/core/tests/coretests/res/raw/net_dev_typical
similarity index 100%
rename from services/tests/servicestests/res/raw/net_dev_typical
rename to core/tests/coretests/res/raw/net_dev_typical
diff --git a/services/tests/servicestests/res/raw/xt_qtaguid_extended b/core/tests/coretests/res/raw/xt_qtaguid_extended
similarity index 100%
rename from services/tests/servicestests/res/raw/xt_qtaguid_extended
rename to core/tests/coretests/res/raw/xt_qtaguid_extended
diff --git a/core/tests/coretests/res/raw/xt_qtaguid_iface_typical b/core/tests/coretests/res/raw/xt_qtaguid_iface_typical
new file mode 100644
index 0000000..610723a
--- /dev/null
+++ b/core/tests/coretests/res/raw/xt_qtaguid_iface_typical
@@ -0,0 +1,6 @@
+rmnet3 1 0 0 0 0 20822 501 1149991 815
+rmnet2 1 0 0 0 0 1594 15 1313 15
+rmnet1 1 0 0 0 0 207398 458 166918 565
+rmnet0 1 0 0 0 0 2112 24 700 10
+test1 1 1 2 3 4 5 6 7 8
+test2 0 1 2 3 4 5 6 7 8
diff --git a/services/tests/servicestests/res/raw/xt_qtaguid_typical b/core/tests/coretests/res/raw/xt_qtaguid_typical
similarity index 100%
rename from services/tests/servicestests/res/raw/xt_qtaguid_typical
rename to core/tests/coretests/res/raw/xt_qtaguid_typical
diff --git a/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set b/core/tests/coretests/res/raw/xt_qtaguid_typical_with_set
similarity index 99%
rename from services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set
rename to core/tests/coretests/res/raw/xt_qtaguid_typical_with_set
index f9f34ac..b302bb7 100644
--- a/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set
+++ b/core/tests/coretests/res/raw/xt_qtaguid_typical_with_set
@@ -1,13 +1,13 @@
-idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_packets rx_tcp_bytes rx_udp_packets rx_udp_bytes rx_other_packets rx_other_bytes tx_tcp_packets tx_tcp_bytes tx_udp_packets tx_udp_bytes tx_other_packets tx_other_bytes
-2 rmnet0 0x0 0 0 14855 82 2804 47 2000 45 12799 35 56 2 676 13 2128 34 0 0
-3 rmnet0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-4 rmnet0 0x0 1000 0 278102 253 10487 182 277342 243 760 10 0 0 9727 172 760 10 0 0
-5 rmnet0 0x0 1000 1 26033 30 1401 26 25881 28 152 2 0 0 1249 24 152 2 0 0
-6 rmnet0 0x0 10012 0 40524 272 134138 293 40524 272 0 0 0 0 134138 293 0 0 0 0
-7 rmnet0 0x0 10012 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-8 rmnet0 0x0 10034 0 15791 59 9905 69 15791 59 0 0 0 0 9905 69 0 0 0 0
-9 rmnet0 0x0 10034 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-10 rmnet0 0x0 10055 0 3602 29 7739 59 3602 29 0 0 0 0 7739 59 0 0 0 0
-11 rmnet0 0x0 10055 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-12 rmnet0 0x7fff000300000000 1000 0 483 4 1931 6 483 4 0 0 0 0 1931 6 0 0 0 0
-13 rmnet0 0x7fff000300000000 1000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_packets rx_tcp_bytes rx_udp_packets rx_udp_bytes rx_other_packets rx_other_bytes tx_tcp_packets tx_tcp_bytes tx_udp_packets tx_udp_bytes tx_other_packets tx_other_bytes
+2 rmnet0 0x0 0 0 14855 82 2804 47 2000 45 12799 35 56 2 676 13 2128 34 0 0
+3 rmnet0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 rmnet0 0x0 1000 0 278102 253 10487 182 277342 243 760 10 0 0 9727 172 760 10 0 0
+5 rmnet0 0x0 1000 1 26033 30 1401 26 25881 28 152 2 0 0 1249 24 152 2 0 0
+6 rmnet0 0x0 10012 0 40524 272 134138 293 40524 272 0 0 0 0 134138 293 0 0 0 0
+7 rmnet0 0x0 10012 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 rmnet0 0x0 10034 0 15791 59 9905 69 15791 59 0 0 0 0 9905 69 0 0 0 0
+9 rmnet0 0x0 10034 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+10 rmnet0 0x0 10055 0 3602 29 7739 59 3602 29 0 0 0 0 7739 59 0 0 0 0
+11 rmnet0 0x0 10055 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+12 rmnet0 0x7fff000300000000 1000 0 483 4 1931 6 483 4 0 0 0 0 1931 6 0 0 0 0
+13 rmnet0 0x7fff000300000000 1000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java b/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
index cd8dcb9..3521296 100644
--- a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
+++ b/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
@@ -19,14 +19,10 @@
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_SELECT;
-import com.android.frameworks.coretests.R;
-
import android.content.Context;
import android.graphics.Rect;
-import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
-import android.provider.Settings;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.util.Log;
@@ -36,8 +32,8 @@
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.IAccessibilityManager;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import com.android.frameworks.coretests.R;
+
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -55,14 +51,9 @@
private static String LOG_TAG = "InterrogationActivityTest";
- // Timeout before give up wait for the system to process an accessibility setting change.
+ // Timeout before give up wait for the system to process an accessibility setting change.
private static final int TIMEOUT_PROPAGATE_ACCESSIBLITY_SETTING = 2000;
- // Helpers to figure out the first and last test methods
- // This is a workaround for the lack of such support in JUnit3
- private static int sTestMethodCount;
- private static int sExecutedTestMethodCount;
-
// Handle to a connection to the AccessibilityManagerService
private static IAccessibilityServiceConnection sConnection;
@@ -71,19 +62,20 @@
public InterrogationActivityTest() {
super(InterrogationActivity.class);
- sTestMethodCount = getTestMethodCount();
}
@LargeTest
public void testFindAccessibilityNodeInfoByViewId() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertNotNull(button);
assertEquals(0, button.getChildCount());
@@ -116,7 +108,6 @@
assertEquals(ACTION_FOCUS | ACTION_SELECT | ACTION_CLEAR_SELECTION,
button.getActions());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testFindAccessibilityNodeInfoByViewId: "
@@ -127,18 +118,19 @@
@LargeTest
public void testFindAccessibilityNodeInfoByViewText() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view by text
List<AccessibilityNodeInfo> buttons = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfosByViewTextInActiveWindow(getConnection(), "butto");
+ .findAccessibilityNodeInfosByViewTextInActiveWindow(connection, "butto");
assertEquals(9, buttons.size());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testFindAccessibilityNodeInfoByViewText: "
@@ -149,19 +141,20 @@
@LargeTest
public void testFindAccessibilityNodeInfoByViewTextContentDescription() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view by text
List<AccessibilityNodeInfo> buttons = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfosByViewTextInActiveWindow(getConnection(),
+ .findAccessibilityNodeInfosByViewTextInActiveWindow(connection,
"contentDescription");
assertEquals(1, buttons.size());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testFindAccessibilityNodeInfoByViewTextContentDescription: "
@@ -172,9 +165,11 @@
@LargeTest
public void testTraverseAllViews() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
@@ -195,7 +190,7 @@
classNameAndTextList.add("android.widget.ButtonButton9");
AccessibilityNodeInfo root = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.root);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.root);
assertNotNull("We must find the existing root.", root);
Queue<AccessibilityNodeInfo> fringe = new LinkedList<AccessibilityNodeInfo>();
@@ -221,7 +216,6 @@
}
}
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testTraverseAllViews: " + elapsedTimeMillis + "ms");
@@ -231,15 +225,17 @@
@LargeTest
public void testPerformAccessibilityActionFocus() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view and make sure it is not focused
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isFocused());
// focus the view
@@ -247,10 +243,9 @@
// find the view again and make sure it is focused
button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertTrue(button.isFocused());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testPerformAccessibilityActionFocus: " + elapsedTimeMillis + "ms");
@@ -260,15 +255,17 @@
@LargeTest
public void testPerformAccessibilityActionClearFocus() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view and make sure it is not focused
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isFocused());
// focus the view
@@ -276,7 +273,7 @@
// find the view again and make sure it is focused
button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertTrue(button.isFocused());
// unfocus the view
@@ -284,10 +281,9 @@
// find the view again and make sure it is not focused
button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isFocused());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testPerformAccessibilityActionClearFocus: "
@@ -298,15 +294,17 @@
@LargeTest
public void testPerformAccessibilityActionSelect() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view and make sure it is not selected
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isSelected());
// select the view
@@ -314,10 +312,9 @@
// find the view again and make sure it is selected
button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertTrue(button.isSelected());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testPerformAccessibilityActionSelect: " + elapsedTimeMillis + "ms");
@@ -327,15 +324,17 @@
@LargeTest
public void testPerformAccessibilityActionClearSelection() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view and make sure it is not selected
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isSelected());
// select the view
@@ -343,7 +342,7 @@
// find the view again and make sure it is selected
button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertTrue(button.isSelected());
// unselect the view
@@ -351,10 +350,9 @@
// find the view again and make sure it is not selected
button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isSelected());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testPerformAccessibilityActionClearSelection: "
@@ -365,15 +363,17 @@
@LargeTest
public void testAccessibilityEventGetSource() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
- getActivity();
+ getActivity();
// find a view and make sure it is not focused
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
assertFalse(button.isSelected());
// focus the view
@@ -419,7 +419,6 @@
assertSame(button.isCheckable(), source.isCheckable());
assertSame(button.isChecked(), source.isChecked());
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testAccessibilityEventGetSource: " + elapsedTimeMillis + "ms");
@@ -429,15 +428,17 @@
@LargeTest
public void testObjectContract() throws Exception {
- beforeClassIfNeeded();
final long startTimeMillis = SystemClock.uptimeMillis();
try {
+ // hook into the system first
+ IAccessibilityServiceConnection connection = getConnection();
+
// bring up the activity
getActivity();
// find a view and make sure it is not focused
AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
- .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(connection, R.id.button5);
AccessibilityNodeInfo parent = button.getParent();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
@@ -451,7 +452,6 @@
}
fail("Parent's children do not have the info whose parent is the parent.");
} finally {
- afterClassIfNeeded();
if (DEBUG) {
final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
Log.i(LOG_TAG, "testObjectContract: " + elapsedTimeMillis + "ms");
@@ -464,90 +464,10 @@
/* intentionally do not scrub */
}
- /**
- * Sets accessibility in a given state by writing the state to the
- * settings and waiting until the accessibility manager service picks
- * it up for max {@link #TIMEOUT_PROPAGATE_ACCESSIBLITY_SETTING}.
- *
- * @param state The accessibility state.
- * @throws Exception If any error occurs.
- */
- private void ensureAccessibilityState(boolean state) throws Exception {
- Context context = getInstrumentation().getContext();
- // If the local manager ready => nothing to do.
- AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(context);
- if (accessibilityManager.isEnabled() == state) {
- return;
- }
- synchronized (this) {
- // Check if the system already knows about the desired state.
- final boolean currentState = Settings.Secure.getInt(context.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED) == 1;
- if (currentState != state) {
- // Make sure we wake ourselves as the desired state is propagated.
- accessibilityManager.addAccessibilityStateChangeListener(
- new AccessibilityManager.AccessibilityStateChangeListener() {
- public void onAccessibilityStateChanged(boolean enabled) {
- synchronized (this) {
- notifyAll();
- }
- }
- });
- Settings.Secure.putInt(context.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED, state ? 1 : 0);
- }
- // No while one attempt and that is it.
- try {
- wait(TIMEOUT_PROPAGATE_ACCESSIBLITY_SETTING);
- } catch (InterruptedException ie) {
- /* ignore */
- }
- }
- if (accessibilityManager.isEnabled() != state) {
- throw new IllegalStateException("Could not set accessibility state to: " + state);
- }
- }
-
- /**
- * Execute some set up code before any test method.
- *
- * NOTE: I miss Junit4's @BeforeClass
- *
- * @throws Exception If an error occurs.
- */
- private void beforeClassIfNeeded() throws Exception {
- sExecutedTestMethodCount++;
- if (sExecutedTestMethodCount == 1) {
- ensureAccessibilityState(true);
- }
- }
-
- /**
- * Execute some clean up code after all test methods.
- *
- * NOTE: I miss Junit4's @AfterClass
- *
- * @throws Exception If an error occurs.
- */
- public void afterClassIfNeeded() throws Exception {
- if (sExecutedTestMethodCount == sTestMethodCount) {
- sExecutedTestMethodCount = 0;
- ensureAccessibilityState(false);
- }
- }
-
- private static IAccessibilityServiceConnection getConnection() throws Exception {
+ private IAccessibilityServiceConnection getConnection() throws Exception {
if (sConnection == null) {
IEventListener listener = new IEventListener.Stub() {
- public void setConnection(IAccessibilityServiceConnection connection)
- throws RemoteException {
- AccessibilityServiceInfo info = new AccessibilityServiceInfo();
- info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
- info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
- info.notificationTimeout = 0;
- info.flags = AccessibilityServiceInfo.DEFAULT;
- connection.setServiceInfo(info);
- }
+ public void setConnection(IAccessibilityServiceConnection connection) {}
public void onInterrupt() {}
@@ -560,26 +480,33 @@
}
}
};
- IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
- ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
- sConnection = manager.registerEventListener(listener);
- }
- return sConnection;
- }
- /**
- * @return The number of test methods.
- */
- private int getTestMethodCount() {
- int testMethodCount = 0;
- for (Method method : getClass().getMethods()) {
- final int modifiers = method.getModifiers();
- if (method.getName().startsWith("test")
- && (modifiers & Modifier.PUBLIC) != 0
- && (modifiers & Modifier.STATIC) == 0) {
- testMethodCount++;
+ AccessibilityManager accessibilityManager =
+ AccessibilityManager.getInstance(getInstrumentation().getContext());
+
+ synchronized (this) {
+ if (!accessibilityManager.isEnabled()) {
+ // Make sure we wake ourselves as the desired state is propagated.
+ accessibilityManager.addAccessibilityStateChangeListener(
+ new AccessibilityManager.AccessibilityStateChangeListener() {
+ public void onAccessibilityStateChanged(boolean enabled) {
+ synchronized (this) {
+ notifyAll();
+ }
+ }
+ });
+ IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
+ ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
+ sConnection = manager.registerEventListener(listener);
+
+ wait(TIMEOUT_PROPAGATE_ACCESSIBLITY_SETTING);
+ } else {
+ IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
+ ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
+ sConnection = manager.registerEventListener(listener);
+ }
}
}
- return testMethodCount;
+ return sConnection;
}
}
diff --git a/core/tests/coretests/src/android/database/DatabaseCursorTest.java b/core/tests/coretests/src/android/database/DatabaseCursorTest.java
index d5b9ee6..179338d 100644
--- a/core/tests/coretests/src/android/database/DatabaseCursorTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseCursorTest.java
@@ -290,110 +290,7 @@
public void onInvalidated() {
}
}
-
- //@Large
- @Suppress
- public void testLoadingThreadDelayRegisterData() throws Exception {
- mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
-
- final int count = 505;
- String sql = "INSERT INTO test (data) VALUES (?);";
- SQLiteStatement s = mDatabase.compileStatement(sql);
- for (int i = 0; i < count; i++) {
- s.bindLong(1, i);
- s.execute();
- }
- int maxRead = 500;
- int initialRead = 5;
- SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
- null, initialRead, maxRead);
-
- TestObserver observer = new TestObserver(count, c);
- c.getCount();
- c.registerDataSetObserver(observer);
- if (!observer.quit) {
- Looper.loop();
- }
- c.close();
- }
-
- //@LargeTest
- @BrokenTest("Consistently times out")
- @Suppress
- public void testLoadingThread() throws Exception {
- mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
-
- final int count = 50000;
- String sql = "INSERT INTO test (data) VALUES (?);";
- SQLiteStatement s = mDatabase.compileStatement(sql);
- for (int i = 0; i < count; i++) {
- s.bindLong(1, i);
- s.execute();
- }
-
- int maxRead = 1000;
- int initialRead = 5;
- SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
- null, initialRead, maxRead);
-
- TestObserver observer = new TestObserver(count, c);
- c.registerDataSetObserver(observer);
- c.getCount();
-
- Looper.loop();
- c.close();
- }
-
- //@LargeTest
- @BrokenTest("Consistently times out")
- @Suppress
- public void testLoadingThreadClose() throws Exception {
- mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
-
- final int count = 1000;
- String sql = "INSERT INTO test (data) VALUES (?);";
- SQLiteStatement s = mDatabase.compileStatement(sql);
- for (int i = 0; i < count; i++) {
- s.bindLong(1, i);
- s.execute();
- }
-
- int maxRead = 11;
- int initialRead = 5;
- SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
- null, initialRead, maxRead);
-
- TestObserver observer = new TestObserver(count, c);
- c.registerDataSetObserver(observer);
- c.getCount();
- c.close();
- }
-
- @LargeTest
- public void testLoadingThreadDeactivate() throws Exception {
- mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
-
- final int count = 1000;
- String sql = "INSERT INTO test (data) VALUES (?);";
- SQLiteStatement s = mDatabase.compileStatement(sql);
- for (int i = 0; i < count; i++) {
- s.bindLong(1, i);
- s.execute();
- }
-
- int maxRead = 11;
- int initialRead = 5;
- SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
- null, initialRead, maxRead);
-
- TestObserver observer = new TestObserver(count, c);
- c.registerDataSetObserver(observer);
- c.getCount();
- c.deactivate();
- c.close();
- }
-
@LargeTest
public void testManyRowsLong() throws Exception {
mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
diff --git a/core/tests/coretests/src/android/net/NetworkStatsTest.java b/core/tests/coretests/src/android/net/NetworkStatsTest.java
index c36685d..7082deb 100644
--- a/core/tests/coretests/src/android/net/NetworkStatsTest.java
+++ b/core/tests/coretests/src/android/net/NetworkStatsTest.java
@@ -18,13 +18,19 @@
import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.SET_FOREGROUND;
+import static android.net.NetworkStats.SET_ALL;
+import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
import android.test.suitebuilder.annotation.SmallTest;
+import com.google.android.collect.Sets;
+
import junit.framework.TestCase;
+import java.util.HashSet;
+
@SmallTest
public class NetworkStatsTest extends TestCase {
@@ -176,13 +182,98 @@
assertEquals(64L, uidTag.getTotalBytes());
}
+ public void testGroupedByIfaceEmpty() throws Exception {
+ final NetworkStats uidStats = new NetworkStats(TEST_START, 3);
+ final NetworkStats grouped = uidStats.groupedByIface();
+
+ assertEquals(0, uidStats.size());
+ assertEquals(0, grouped.size());
+ }
+
+ public void testGroupedByIfaceAll() throws Exception {
+ final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
+ .addValues(IFACE_ALL, 100, SET_ALL, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
+ .addValues(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, 128L, 8L, 0L, 2L, 20L);
+ final NetworkStats grouped = uidStats.groupedByIface();
+
+ assertEquals(2, uidStats.size());
+ assertEquals(1, grouped.size());
+
+ assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 4L, 0L);
+ }
+
+ public void testGroupedByIface() throws Exception {
+ final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
+ .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
+
+ final NetworkStats grouped = uidStats.groupedByIface();
+
+ assertEquals(6, uidStats.size());
+
+ assertEquals(2, grouped.size());
+ assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 2L, 0L);
+ assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, 1024L, 64L, 0L, 0L, 0L);
+ }
+
+ public void testAddAllValues() {
+ final NetworkStats first = new NetworkStats(TEST_START, 5)
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
+
+ final NetworkStats second = new NetworkStats(TEST_START, 2)
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
+
+ first.combineAllValues(second);
+
+ assertEquals(3, first.size());
+ assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 64L, 0L, 0L, 0L, 0L);
+ assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
+ assertValues(first, 2, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
+ }
+
+ public void testGetTotal() {
+ final NetworkStats stats = new NetworkStats(TEST_START, 3)
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
+ .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
+
+ assertValues(stats.getTotal(null), 1280L, 80L, 0L, 2L, 20L);
+ assertValues(stats.getTotal(null, 100), 1152L, 72L, 0L, 2L, 20L);
+ assertValues(stats.getTotal(null, 101), 128L, 8L, 0L, 0L, 0L);
+
+ final HashSet<String> ifaces = Sets.newHashSet();
+ assertValues(stats.getTotal(null, ifaces), 0L, 0L, 0L, 0L, 0L);
+
+ ifaces.add(TEST_IFACE2);
+ assertValues(stats.getTotal(null, ifaces), 1024L, 64L, 0L, 0L, 0L);
+ }
+
private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set,
- int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
+ int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) {
final NetworkStats.Entry entry = stats.getValues(index, null);
+ assertValues(entry, iface, uid, set, tag);
+ assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations);
+ }
+
+ private static void assertValues(
+ NetworkStats.Entry entry, String iface, int uid, int set, int tag) {
assertEquals(iface, entry.iface);
assertEquals(uid, entry.uid);
assertEquals(set, entry.set);
assertEquals(tag, entry.tag);
+ }
+
+ private static void assertValues(NetworkStats.Entry entry, long rxBytes, long rxPackets,
+ long txBytes, long txPackets, long operations) {
assertEquals(rxBytes, entry.rxBytes);
assertEquals(rxPackets, entry.rxPackets);
assertEquals(txBytes, entry.txBytes);
diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java b/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java
similarity index 85%
rename from services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
rename to core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java
index ab1597c..8a64f2b 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
+++ b/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server;
+package com.android.internal.net;
import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.SET_FOREGROUND;
@@ -25,9 +25,8 @@
import android.content.res.Resources;
import android.net.NetworkStats;
import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.frameworks.servicestests.R;
+import com.android.frameworks.coretests.R;
import java.io.File;
import java.io.FileOutputStream;
@@ -39,12 +38,11 @@
import libcore.io.Streams;
/**
- * Tests for {@link NetworkManagementService}.
+ * Tests for {@link NetworkStatsFactory}.
*/
-@LargeTest
-public class NetworkManagementServiceTest extends AndroidTestCase {
+public class NetworkStatsFactoryTest extends AndroidTestCase {
private File mTestProc;
- private NetworkManagementService mService;
+ private NetworkStatsFactory mFactory;
@Override
public void setUp() throws Exception {
@@ -55,12 +53,12 @@
IoUtils.deleteContents(mTestProc);
}
- mService = NetworkManagementService.createForTest(mContext, mTestProc, true);
+ mFactory = new NetworkStatsFactory(mTestProc);
}
@Override
public void tearDown() throws Exception {
- mService = null;
+ mFactory = null;
if (mTestProc.exists()) {
IoUtils.deleteContents(mTestProc);
@@ -72,7 +70,7 @@
public void testNetworkStatsDetail() throws Exception {
stageFile(R.raw.xt_qtaguid_typical, new File(mTestProc, "net/xt_qtaguid/stats"));
- final NetworkStats stats = mService.getNetworkStatsDetail();
+ final NetworkStats stats = mFactory.readNetworkStatsDetail();
assertEquals(31, stats.size());
assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0, 14615L, 4270L);
assertStatsEntry(stats, "wlan0", 10004, SET_DEFAULT, 0, 333821L, 53558L);
@@ -84,7 +82,7 @@
public void testNetworkStatsDetailExtended() throws Exception {
stageFile(R.raw.xt_qtaguid_extended, new File(mTestProc, "net/xt_qtaguid/stats"));
- final NetworkStats stats = mService.getNetworkStatsDetail();
+ final NetworkStats stats = mFactory.readNetworkStatsDetail();
assertEquals(2, stats.size());
assertStatsEntry(stats, "test0", 1000, SET_DEFAULT, 0, 1024L, 2048L);
assertStatsEntry(stats, "test0", 1000, SET_DEFAULT, 0xF00D, 512L, 512L);
@@ -93,7 +91,7 @@
public void testNetworkStatsSummary() throws Exception {
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
- final NetworkStats stats = mService.getNetworkStatsSummary();
+ final NetworkStats stats = mFactory.readNetworkStatsSummary();
assertEquals(6, stats.size());
assertStatsEntry(stats, "lo", UID_ALL, SET_DEFAULT, TAG_NONE, 8308L, 8308L);
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L, 489339L);
@@ -111,7 +109,7 @@
stageLong(2048L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_bytes"));
stageLong(256L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_packets"));
- final NetworkStats stats = mService.getNetworkStatsSummary();
+ final NetworkStats stats = mFactory.readNetworkStatsSummary();
assertEquals(7, stats.size());
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L, 489339L);
assertStatsEntry(stats, "wlan0", UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 2048L);
@@ -125,7 +123,7 @@
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
- final NetworkStats stats = mService.getNetworkStatsSummary();
+ final NetworkStats stats = mFactory.readNetworkStatsSummary();
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L + 10L,
2205L + 20L, 489339L + 30L, 2237L + 40L);
}
@@ -138,7 +136,7 @@
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
- final NetworkStats stats = mService.getNetworkStatsSummary();
+ final NetworkStats stats = mFactory.readNetworkStatsSummary();
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 10L, 20L, 30L, 40L);
}
@@ -153,12 +151,22 @@
public void testNetworkStatsWithSet() throws Exception {
stageFile(R.raw.xt_qtaguid_typical_with_set, new File(mTestProc, "net/xt_qtaguid/stats"));
- final NetworkStats stats = mService.getNetworkStatsDetail();
+ final NetworkStats stats = mFactory.readNetworkStatsDetail();
assertEquals(12, stats.size());
assertStatsEntry(stats, "rmnet0", 1000, SET_DEFAULT, 0, 278102L, 253L, 10487L, 182L);
assertStatsEntry(stats, "rmnet0", 1000, SET_FOREGROUND, 0, 26033L, 30L, 1401L, 26L);
}
+ public void testNetworkStatsSingle() throws Exception {
+ stageFile(R.raw.xt_qtaguid_iface_typical, new File(mTestProc, "net/xt_qtaguid/iface_stat_all"));
+
+ final NetworkStats stats = mFactory.readNetworkStatsSummary();
+ assertEquals(6, stats.size());
+ assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 2112L, 24L, 700L, 10L);
+ assertStatsEntry(stats, "test1", UID_ALL, SET_DEFAULT, TAG_NONE, 6L, 8L, 10L, 12L);
+ assertStatsEntry(stats, "test2", UID_ALL, SET_DEFAULT, TAG_NONE, 1L, 2L, 3L, 4L);
+ }
+
/**
* Copy a {@link Resources#openRawResource(int)} into {@link File} for
* testing purposes.
diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk
new file mode 100644
index 0000000..02d2f3d
--- /dev/null
+++ b/data/fonts/Android.mk
@@ -0,0 +1,83 @@
+# 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.
+
+# We have to use BUILD_PREBUILT instead of PRODUCT_COPY_FIES,
+# because SMALLER_FONT_FOOTPRINT is only available in Android.mks.
+
+LOCAL_PATH := $(call my-dir)
+
+##########################################
+# We may only afford small font footprint.
+##########################################
+# Use only symlinks.
+# Symlink: DroidSans.ttf -> Roboto-Regular.ttf
+LOCAL_MODULE := DroidSans.ttf
+font_symlink_src := $(PRODUCT_OUT)/system/fonts/Roboto-Regular.ttf
+font_symlink := $(dir $(font_symlink_src))$(LOCAL_MODULE)
+$(font_symlink) : $(font_symlink_src)
+ @echo "Symlink: $@ -> $<"
+ @mkdir -p $(dir $@)
+ @rm -rf $@
+ $(hide) ln -sf $(notdir $<) $@
+
+# this magic makes LOCAL_REQUIRED_MODULES work
+ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \
+ $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(font_symlink)
+
+################################
+# Symlink: DroidSans-Bold.ttf -> Roboto-Bold.ttf
+LOCAL_MODULE := DroidSans-Bold.ttf
+font_symlink_src := $(PRODUCT_OUT)/system/fonts/Roboto-Bold.ttf
+font_symlink := $(dir $(font_symlink_src))$(LOCAL_MODULE)
+$(font_symlink) : $(font_symlink_src)
+ @echo "Symlink: $@ -> $<"
+ @mkdir -p $(dir $@)
+ @rm -rf $@
+ $(hide) ln -sf $(notdir $<) $@
+
+# this magic makes LOCAL_REQUIRED_MODULES work
+ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \
+ $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(font_symlink)
+
+################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := DroidSansEthiopic-Regular.ttf
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+include $(BUILD_PREBUILT)
+
+################################
+ifeq ($(SMALLER_FONT_FOOTPRINT),true)
+droidsans_fallback_src := DroidSansFallback.ttf
+extra_droidsans_fonts := DroidSans.ttf DroidSans-Bold.ttf
+else
+droidsans_fallback_src := DroidSansFallbackFull.ttf
+extra_droidsans_fonts := DroidSans.ttf DroidSans-Bold.ttf DroidSansEthiopic-Regular.ttf
+endif # SMALLER_FONT_FOOTPRINT
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := DroidSansFallback.ttf
+LOCAL_SRC_FILES := $(droidsans_fallback_src)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+LOCAL_REQUIRED_MODULES := $(extra_droidsans_fonts)
+include $(BUILD_PREBUILT)
+
+font_symlink_src :=
+font_symlink :=
+droidsans_fallback_src :=
+extra_droidsans_fonts :=
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index 67d04c9..3f51eb3 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -39,16 +39,7 @@
frameworks/base/data/fonts/system_fonts.xml:system/etc/system_fonts.xml \
frameworks/base/data/fonts/fallback_fonts.xml:system/etc/fallback_fonts.xml
-# Next, include additional fonts, depending on how much space we have
-ifeq ($(SMALLER_FONT_FOOTPRINT),true)
-# Smaller fonts alternatives
-PRODUCT_COPY_FILES += \
- frameworks/base/data/fonts/DroidSansFallback.ttf:system/fonts/DroidSansFallback.ttf
-else
-# Full font set alternatives
-PRODUCT_COPY_FILES += \
- frameworks/base/data/fonts/DroidSansFallbackFull.ttf:system/fonts/DroidSansFallback.ttf \
- frameworks/base/data/fonts/DroidSans.ttf:system/fonts/DroidSans.ttf \
- frameworks/base/data/fonts/DroidSans-Bold.ttf:system/fonts/DroidSans-Bold.ttf \
- frameworks/base/data/fonts/DroidSansEthiopic-Regular.ttf:system/fonts/DroidSansEthiopic-Regular.ttf
-endif
+# Next, include additional fonts, depending on how much space we have.
+# Details see module definitions in Android.mk.
+PRODUCT_PACKAGES := \
+ DroidSansFallback.ttf
diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
deleted file mode 100644
index 1fd7bba..0000000
--- a/data/fonts/fonts.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<!--
- This is only used by the layoutlib to display
- layouts in ADT.
--->
-<fonts>
- <font ttf="DroidSans">
- <name>sans-serif</name>
- <name>arial</name>
- <name>helvetica</name>
- <name>tahoma</name>
- <name>verdana</name>
- </font>
- <font ttf="DroidSerif">
- <name>serif</name>
- <name>times</name>
- <name>times new roman</name>
- <name>palatino</name>
- <name>georgia</name>
- <name>baskerville</name>
- <name>goudy</name>
- <name>fantasy</name>
- <name>cursive</name>
- <name>ITC Stone Serif</name>
- </font>
- <font ttf="DroidSansMono">
- <name>monospace</name>
- <name>courier</name>
- <name>courier new</name>
- <name>monaco</name>
- </font>
- <fallback ttf="DroidSansFallback" />
- <fallback ttf="MTLmr3m" />
-</fonts>
diff --git a/data/keyboards/keyboards.mk b/data/keyboards/keyboards.mk
index 564f41c..c964961 100644
--- a/data/keyboards/keyboards.mk
+++ b/data/keyboards/keyboards.mk
@@ -24,6 +24,3 @@
PRODUCT_COPY_FILES += $(foreach file,$(keyconfigs),\
frameworks/base/data/keyboards/$(file):system/usr/idc/$(file))
-
-PRODUCT_PACKAGES := $(keylayouts) $(keycharmaps) $(keyconfigs)
-
diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk
index 16171dc..66edb7a 100755
--- a/data/sounds/AudioPackage7.mk
+++ b/data/sounds/AudioPackage7.mk
@@ -26,27 +26,37 @@
$(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \
$(LOCAL_PATH)/effects/ogg/Lock.ogg:system/media/audio/ui/Lock.ogg \
$(LOCAL_PATH)/effects/ogg/Unlock.ogg:system/media/audio/ui/Unlock.ogg \
- $(LOCAL_PATH)/notifications/ogg/Altair.ogg:system/media/audio/notifications/Altair.ogg \
- $(LOCAL_PATH)/notifications/ogg/Antares.ogg:system/media/audio/notifications/Antares.ogg \
- $(LOCAL_PATH)/notifications/ogg/Deneb.ogg:system/media/audio/notifications/Deneb.ogg \
- $(LOCAL_PATH)/notifications/ogg/Lalande.ogg:system/media/audio/notifications/Lalande.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Adara.ogg:system/media/audio/notifications/Adara.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Arcturus.ogg:system/media/audio/notifications/Arcturus.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Bellatrix.ogg:system/media/audio/notifications/Bellatrix.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Capella.ogg:system/media/audio/notifications/Capella.ogg \
+ $(LOCAL_PATH)/notifications/ogg/CetiAlpha.ogg:system/media/audio/notifications/CetiAlpha.ogg \
$(LOCAL_PATH)/notifications/ogg/Hojus.ogg:system/media/audio/notifications/Hojus.ogg \
- $(LOCAL_PATH)/notifications/ogg/Proxima.ogg:system/media/audio/notifications/Proxima.ogg \
- $(LOCAL_PATH)/notifications/ogg/Betelgeuse.ogg:system/media/audio/notifications/Betelgeuse.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Lalande.ogg:system/media/audio/notifications/Lalande.ogg \
$(LOCAL_PATH)/notifications/ogg/Mira.ogg:system/media/audio/notifications/Mira.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Polaris.ogg:system/media/audio/notifications/Polaris.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Pollux.ogg:system/media/audio/notifications/Pollux.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Procyon.ogg:system/media/audio/notifications/Procyon.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Proxima.ogg:system/media/audio/notifications/Proxima.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Shaula.ogg:system/media/audio/notifications/Shaula.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Spica.ogg:system/media/audio/notifications/Spica.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Tejat.ogg:system/media/audio/notifications/Tejat.ogg \
$(LOCAL_PATH)/notifications/ogg/Upsilon.ogg:system/media/audio/notifications/Upsilon.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Vega.ogg:system/media/audio/notifications/Vega.ogg \
$(LOCAL_PATH)/ringtones/ogg/Andromeda.ogg:system/media/audio/ringtones/Andromeda.ogg \
$(LOCAL_PATH)/ringtones/ogg/Aquila.ogg:system/media/audio/ringtones/Aquila.ogg \
$(LOCAL_PATH)/ringtones/ogg/ArgoNavis.ogg:system/media/audio/ringtones/ArgoNavis.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/CanisMajor.ogg:system/media/audio/ringtones/CanisMajor.ogg \
$(LOCAL_PATH)/ringtones/ogg/Carina.ogg:system/media/audio/ringtones/Carina.ogg \
- $(LOCAL_PATH)/ringtones/ogg/Cassiopeia.ogg:system/media/audio/ringtones/Cassiopeia.ogg \
$(LOCAL_PATH)/ringtones/ogg/Centaurus.ogg:system/media/audio/ringtones/Centaurus.ogg \
$(LOCAL_PATH)/ringtones/ogg/Cygnus.ogg:system/media/audio/ringtones/Cygnus.ogg \
$(LOCAL_PATH)/ringtones/ogg/Draco.ogg:system/media/audio/ringtones/Draco.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Girtab.ogg:system/media/audio/ringtones/Girtab.ogg \
$(LOCAL_PATH)/ringtones/ogg/Hydra.ogg:system/media/audio/ringtones/Hydra.ogg \
$(LOCAL_PATH)/ringtones/ogg/Machina.ogg:system/media/audio/ringtones/Machina.ogg \
$(LOCAL_PATH)/ringtones/ogg/Orion.ogg:system/media/audio/ringtones/Orion.ogg \
$(LOCAL_PATH)/ringtones/ogg/Pegasus.ogg:system/media/audio/ringtones/Pegasus.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Perseus.ogg:system/media/audio/ringtones/Perseus.ogg \
$(LOCAL_PATH)/ringtones/ogg/Pyxis.ogg:system/media/audio/ringtones/Pyxis.ogg \
$(LOCAL_PATH)/ringtones/ogg/Rigel.ogg:system/media/audio/ringtones/Rigel.ogg \
$(LOCAL_PATH)/ringtones/ogg/Scarabaeus.ogg:system/media/audio/ringtones/Scarabaeus.ogg \
@@ -54,4 +64,4 @@
$(LOCAL_PATH)/ringtones/ogg/Solarium.ogg:system/media/audio/ringtones/Solarium.ogg \
$(LOCAL_PATH)/ringtones/ogg/Testudo.ogg:system/media/audio/ringtones/Testudo.ogg \
$(LOCAL_PATH)/ringtones/ogg/UrsaMinor.ogg:system/media/audio/ringtones/UrsaMinor.ogg \
- $(LOCAL_PATH)/ringtones/ogg/Vespa.ogg:system/media/audio/ringtones/Vespa.ogg
+ $(LOCAL_PATH)/ringtones/ogg/Zeta.ogg:system/media/audio/ringtones/Zeta.ogg
diff --git a/data/sounds/effects/ogg/Lock.ogg b/data/sounds/effects/ogg/Lock.ogg
index ed845be..e7928e4 100644
--- a/data/sounds/effects/ogg/Lock.ogg
+++ b/data/sounds/effects/ogg/Lock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Unlock.ogg b/data/sounds/effects/ogg/Unlock.ogg
index 0a47b5c..cca9594 100644
--- a/data/sounds/effects/ogg/Unlock.ogg
+++ b/data/sounds/effects/ogg/Unlock.ogg
Binary files differ
diff --git a/data/sounds/effects/wav/Lock.wav b/data/sounds/effects/wav/Lock.wav
index 1655a89..b8076369 100644
--- a/data/sounds/effects/wav/Lock.wav
+++ b/data/sounds/effects/wav/Lock.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Unlock.wav b/data/sounds/effects/wav/Unlock.wav
index 2229d03..e1d475e 100644
--- a/data/sounds/effects/wav/Unlock.wav
+++ b/data/sounds/effects/wav/Unlock.wav
Binary files differ
diff --git a/data/sounds/notifications/ogg/Acrux.ogg b/data/sounds/notifications/ogg/Acrux.ogg
new file mode 100644
index 0000000..74ad149
--- /dev/null
+++ b/data/sounds/notifications/ogg/Acrux.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Adara.ogg b/data/sounds/notifications/ogg/Adara.ogg
new file mode 100755
index 0000000..e87f379
--- /dev/null
+++ b/data/sounds/notifications/ogg/Adara.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Arcturus.ogg b/data/sounds/notifications/ogg/Arcturus.ogg
new file mode 100644
index 0000000..8b83285
--- /dev/null
+++ b/data/sounds/notifications/ogg/Arcturus.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Bellatrix.ogg b/data/sounds/notifications/ogg/Bellatrix.ogg
new file mode 100644
index 0000000..37a1bdc
--- /dev/null
+++ b/data/sounds/notifications/ogg/Bellatrix.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Capella.ogg b/data/sounds/notifications/ogg/Capella.ogg
new file mode 100755
index 0000000..88a955d
--- /dev/null
+++ b/data/sounds/notifications/ogg/Capella.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/CetiAlpha.ogg b/data/sounds/notifications/ogg/CetiAlpha.ogg
new file mode 100644
index 0000000..cd09526
--- /dev/null
+++ b/data/sounds/notifications/ogg/CetiAlpha.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Polaris.ogg b/data/sounds/notifications/ogg/Polaris.ogg
new file mode 100755
index 0000000..0f63a65
--- /dev/null
+++ b/data/sounds/notifications/ogg/Polaris.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Pollux.ogg b/data/sounds/notifications/ogg/Pollux.ogg
new file mode 100644
index 0000000..2f907fd
--- /dev/null
+++ b/data/sounds/notifications/ogg/Pollux.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Procyon.ogg b/data/sounds/notifications/ogg/Procyon.ogg
new file mode 100755
index 0000000..e5ffcdb
--- /dev/null
+++ b/data/sounds/notifications/ogg/Procyon.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Shaula.ogg b/data/sounds/notifications/ogg/Shaula.ogg
new file mode 100755
index 0000000..1c0aa89
--- /dev/null
+++ b/data/sounds/notifications/ogg/Shaula.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Spica.ogg b/data/sounds/notifications/ogg/Spica.ogg
new file mode 100755
index 0000000..a9e91cb
--- /dev/null
+++ b/data/sounds/notifications/ogg/Spica.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Tejat.ogg b/data/sounds/notifications/ogg/Tejat.ogg
new file mode 100644
index 0000000..04ba06c
--- /dev/null
+++ b/data/sounds/notifications/ogg/Tejat.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Vega.ogg b/data/sounds/notifications/ogg/Vega.ogg
new file mode 100644
index 0000000..7cdbf21
--- /dev/null
+++ b/data/sounds/notifications/ogg/Vega.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Acheron.ogg b/data/sounds/ringtones/ogg/Acheron.ogg
new file mode 100644
index 0000000..67d7388
--- /dev/null
+++ b/data/sounds/ringtones/ogg/Acheron.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Girtab.ogg b/data/sounds/ringtones/ogg/Girtab.ogg
new file mode 100644
index 0000000..f6b3a35
--- /dev/null
+++ b/data/sounds/ringtones/ogg/Girtab.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Nasqueron.ogg b/data/sounds/ringtones/ogg/Nasqueron.ogg
new file mode 100644
index 0000000..ae1a725
--- /dev/null
+++ b/data/sounds/ringtones/ogg/Nasqueron.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Zeta.ogg b/data/sounds/ringtones/ogg/Zeta.ogg
new file mode 100644
index 0000000..ef64d2f
--- /dev/null
+++ b/data/sounds/ringtones/ogg/Zeta.ogg
Binary files differ
diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd
index ccc63a2..137f138 100644
--- a/docs/html/guide/appendix/media-formats.jd
+++ b/docs/html/guide/appendix/media-formats.jd
@@ -14,7 +14,7 @@
<h2>See also</h2>
<ol>
-<li><a href="{@docRoot}guide/topics/media/index.html">Audio and Video</a></li>
+<li><a href="{@docRoot}guide/topics/media/index.html">Multimedia and Camera</a></li>
</ol>
<h2>Key classes</h2>
diff --git a/docs/html/guide/developing/building/building-cmdline.jd b/docs/html/guide/developing/building/building-cmdline.jd
index ec918dc..d78a4f5 100644
--- a/docs/html/guide/developing/building/building-cmdline.jd
+++ b/docs/html/guide/developing/building/building-cmdline.jd
@@ -18,6 +18,7 @@
<li><a href="#RunningOnEmulator">Running on the Emulator</a></li>
<li><a href="#RunningOnDevice">Running on a Device</a></li>
<li><a href="#Signing">Application Signing</a></li>
+ <li><a href="#AntReference">Ant Command Reference</a></li>
</ol>
<h2>See also</h2>
<ol>
@@ -58,11 +59,11 @@
<p class="note"><strong>Note:</strong> When installing JDK on Windows, the default is to install
in the "Program Files" directory. This location will cause <code>ant</code> to fail, because of
- the space. To fix the problem, you can specify the JAVA_HOME variable like this:
+ the space. To fix the problem, you can specify the JAVA_HOME variable like this:
<pre>set JAVA_HOME=c:\Progra~1\Java\<jdkdir></pre>
-
+
<p>The easiest solution, however, is to install JDK in a non-space directory, for example:</p>
-
+
<pre>c:\java\jdk1.6.0_02</pre>
<h2 id="DebugMode">Building in Debug Mode</h2>
@@ -141,7 +142,7 @@
<p>If you would like, you can configure the Android build script to automatically sign and align
your application package. To do so, you must provide the path to your keystore and the name of
- your key alias in your project's {@code build.properties} file. With this information provided,
+ your key alias in your project's {@code ant.properties} file. With this information provided,
the build script will prompt you for your keystore and alias password when you build in release
mode and produce your final application package, which will be ready for distribution.</p>
@@ -152,7 +153,7 @@
procedure manually, <a href="#ManualReleaseMode">build unsigned</a> and then continue with
<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.</p>
- <p>To specify your keystore and alias, open the project {@code build.properties} file (found in
+ <p>To specify your keystore and alias, open the project {@code ant.properties} file (found in
the root of the project directory) and add entries for {@code key.store} and {@code key.alias}.
For example:</p>
<pre>
@@ -180,16 +181,16 @@
<p>This creates your Android application .apk file inside the project <code>bin/</code>
directory, named <code><em><your_project_name></em>-release.apk</code>. This .apk file has
- been signed with the private key specified in {@code build.properties} and aligned with {@code
+ been signed with the private key specified in {@code ant.properties} and aligned with {@code
zipalign}. It's ready for installation and distribution.</p>
<h3 id="OnceBuilt">Once built and signed in release mode</h3>
<p>Once you have signed your application with a private key, you can install and run it on an
- <a href="#RunningOnEmulator">emulator</a> or <a href="#RunningOnDevice">device</a>. You can
- also try installing it onto a device from a web server. Simply upload the signed .apk to a web
- site, then load the .apk URL in your Android web browser to download the application and begin
- installation. (On your device, be sure you have enabled
+ <a href="#RunningOnEmulator">emulator</a> or <a href="#RunningOnDevice">device</a>. You can
+ also try installing it onto a device from a web server. Simply upload the signed .apk to a web
+ site, then load the .apk URL in your Android web browser to download the application and begin
+ installation. (On your device, be sure you have enabled
<em>Settings > Applications > Unknown sources</em>.)</p>
<h2 id="RunningOnEmulator">Running on the Emulator</h2>
@@ -260,10 +261,6 @@
device:</p>
<ul>
- <li>Ensure that your application is debuggable by setting the
- <code>android:debuggable</code> attribute of the <code><application></code>
- element to <code>true</code>. As of ADT 8.0, this is done by default when you build in debug mode.</li>
-
<li>Enable USB Debugging on your device. You can find the setting on most Android devices by
going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
@@ -276,7 +273,7 @@
<p>Once your device is set up and connected via USB, navigate to your SDK's <code>platform-tools/</code>
directory and install the <code>.apk</code> on the device:</p>
<pre>
-adb -d install <em>path/to/your/app</em>.apk
+adb -d install <em>path/to/your/app</em>.apk
</pre>
<p>The {@code -d} flag specifies that you want to use the attached device (in case you also have
@@ -315,4 +312,60 @@
<p>Please read <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your
Applications</a>, which provides a thorough guide to application signing on Android and what it
means to you as an Android application developer. The document also includes a guide to exporting
- and signing your application with the ADT's Export Wizard.</p>
\ No newline at end of file
+ and signing your application with the ADT's Export Wizard.</p>
+
+ <h2 id="AntReference">Ant Command Reference</h2>
+ <dt><code>ant clean</code></dt>
+ <dd>Cleans the project. If you include the <code>all</code> target before <code>clean</code>
+(<code>ant all clean</code>), other projects are also cleaned. For instance if you clean a
+test project, the tested project is also cleaned.</dd>
+
+ <dt><code>ant debug</code></dt>
+ <dd>Builds a debug package. Works on application, library, and test projects and compiles
+ dependencies as needed.</dd>
+
+ <dt id="emma"><code>ant emma debug</code></dt>
+ <dd>Builds a test project while building the tested project with instrumentation turned on.
+ This is used to run tests with code coverage enabled.</dd>
+
+ <dt><code>ant release</code></dt>
+ <dd>Builds a release package.</dd>
+
+ <dt><code>ant instrument</code>
+ </dt>
+ <dd>Builds an instrumented debug package. This is generally called automatically when building a
+ test project with code coverage enabled (with the <code>emma</code>
+ target)</dd>
+
+ <dt><code>ant <build_target> install</code></dt>
+ <dd>Builds and installs a package. Using <code>install</code> by itself fails.</dd>
+
+ <dt><code>ant installd</code></dt>
+ <dd>Installs an already compiled debug package. This fails if the <code>.apk</code> is not
+ already built.</dd>
+
+ <dt><code>ant installr</code></dt>
+ <dd>Installs an already compiled release package. This fails if the <code>.apk</code> is not
+ already built.</dd>
+
+ <dt><code>ant installt</code></dt>
+ <dd>Installs an already compiled test package. Also installs the <code>.apk</code> of the
+ tested application. This fails if the <code>.apk</code> is not already built.</dd>
+
+ <dt><code>ant installi</code></dt>
+ <dd>Installs an already compiled instrumented package. This is generally not used manually as
+ it's called when installing a test package. This fails if the <code>.apk</code> is not already
+ built.</dd>
+
+ <dt><code>ant test</code></dt>
+ <dd>Runs the tests (for test projects). The tested and test <code>.apk</code> files must be
+ previously installed.</dd>
+
+ <dt><code>ant debug installt test</code></dt>
+ <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
+ runs the tests.</dd>
+
+ <dt><code>ant emma debug installt test</code></dt>
+ <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
+ runs the tests with code coverage enabled.</dd>
+
diff --git a/docs/html/guide/developing/projects/index.jd b/docs/html/guide/developing/projects/index.jd
index 273a405..ac8a1a5 100644
--- a/docs/html/guide/developing/projects/index.jd
+++ b/docs/html/guide/developing/projects/index.jd
@@ -15,7 +15,7 @@
</li>
<li><a href="#TestProjects">Test Projects</a></li>
-
+
<li><a href="#testing">Testing a Library Project</a></li>
</ol>
</div>
@@ -43,7 +43,7 @@
<dt><strong>Library Projects</strong></dt>
<dd>These projects contain shareable Android source code and resources that you can reference
- in Android projects. This is useful when you have common code that you want to reuse.
+ in Android projects. This is useful when you have common code that you want to reuse.
Library projects cannot be installed onto a device, however, they are
pulled into the <code>.apk</code> file at build time.</dd>
</dl>
@@ -125,7 +125,7 @@
<dt><code>menu/</code></dt>
- <dd>For XML files that define application menus.
+ <dd>For XML files that define application menus.
See the <a href="{@docRoot}guide/topics/resources/menu-resource.html">Menus</a>
resource type.</dd>
@@ -168,23 +168,33 @@
<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
documentation for more information</dd>
- <dt><code>build.properties</code></dt>
+ <dt><code>project.properties</code></dt>
+
+ <dd>This file contains project settings, such as the build target. This file is integral to
+ the project, so maintain it in a source revision control system. To edit project
+ properties in Eclipse, right-click the project folder and select
+ <strong>Properties</strong>.</dd>
+
+ <dt><code>local.properties</code></dt>
+
+ <dd>Customizable computer-specific properties for the build system. If you use Ant to build
+ the project, this contains the path to the SDK installation. Because the content of the file
+ is specific to the local installation of the SDK, maintained it in a source
+ revision control system. If you use Eclipse, this file is not used.</dd>
+
+ <dt><code>ant.properties</code></dt>
<dd>Customizable properties for the build system. You can edit this file to override default
- build settings used by Ant and provide a pointer to your keystore and key alias so that the
- build tools can sign your application when built in release mode. If you use Eclipse, this file
- is not used.</dd>
+ build settings used by Ant and also provide the location of your keystore and key alias so that
+ the build tools can sign your application when building in release mode. This file is integral
+ to the project, so maintain it in a source revision control system. If you use Eclipse, this
+ file is not used.</dd>
<dt><code>build.xml</code></dt>
<dd>The Ant build file for your project. This is only applicable for projects that
- you create on the command line.</dd>
+ you build with Ant.</dd>
- <dt><code>default.properties</code></dt>
-
- <dd>This file contains project settings, such as the build target. This files is integral to
- the project, as such, it should be maintained in a Source Revision Control system. Do not edit
- the file manually.</dd>
</dl>
<h2 id="LibraryProjects">Library Projects</h2>
@@ -199,7 +209,7 @@
<p>To download the sample applications and run them as projects in
your environment, use the <em>Android SDK and AVD Manager</em> to download the "Samples for
- SDK API 8" component into your SDK.</p>
+ SDK API 8" (or later) component into your SDK.</p>
<p>For more information and to browse the code of the samples, see
the <a href="{@docRoot}resources/samples/TicTacToeMain/index.html">TicTacToeMain
@@ -212,9 +222,10 @@
and, at build time, include its compiled sources in their <code>.apk</code> files. Multiple
application projects can reference the same library project and any single application project
can reference multiple library projects.</p>
-
- <p class="note"><strong>Note:</strong> You need SDK Tools r8 or newer to fully support library projects
- for all Android platform versions. You can download the tools and platforms using the
+
+ <p class="note"><strong>Note:</strong> You need SDK Tools r14 or newer to use the new library
+ project feature that generates each library project into its own JAR file.
+ You can download the tools and platforms using the
<em>Android SDK and AVD Manager</em>, as described in
<a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>.</p>
@@ -246,12 +257,12 @@
library in the dependent application and building that application.</p>
<p>When you build an application that depends on a library project, the SDK tools compile the
- library and merge its sources with those in the main project, then use the result to generate
- the <code>.apk</code>. In cases where a resource ID is defined in both the application and the
- library, the tools ensure that the resource declared in the application gets priority and that
- the resource in the library project is not compiled into the application <code>.apk</code>.
- This gives your application the flexibility to either use or redefine any resource behaviors or
- values that are defined in any library.</p>
+ library into a temporary JAR file and uses it in the main project, then uses the
+ result to generate the <code>.apk</code>. In cases where a resource ID is defined in both the
+ application and the library, the tools ensure that the resource declared in the application gets
+ priority and that the resource in the library project is not compiled into the application
+ <code>.apk</code>. This gives your application the flexibility to either use or redefine any
+ resource behaviors or values that are defined in any library.</p>
<p>To organize your code further, your application can add references to multiple library
projects, then specify the relative priority of the resources in each library. This lets you
@@ -259,15 +270,13 @@
libraries referenced from an application define the same resource ID, the tools select the
resource from the library with higher priority and discard the other.</p>
- <p>Once you have added references to library projects to your Android project,
+ <p>Once you have added references to library projects to your Android project,
you can set their relative priority. At build time, the
libraries are merged with the application one at a time, starting from the lowest priority to
the highest.</p>
- <p>Note that a library project cannot itself reference another library project and that, at
- build time, library projects are <em>not</em> merged with each other before being merged with
- the application. However, note that a library can import an external library (JAR) in the
- normal way.</p>
+ <p>Library projects can reference other library projects and can import an external library
+ (JAR) in the normal way.</p>
<h3 id="considerations">Development considerations</h3>
@@ -283,22 +292,23 @@
defined in more than one project and will be merged, with the resource from the application or
highest-priority library taking precedence.</p>
</li>
-
+
<li><p><strong>Use prefixes to avoid resource conflicts</strong></p>
<p>To avoid resource conflicts for common resource IDs, consider using a prefix or other
consistent naming scheme that is unique to the project (or is unique across all projects).</p></li>
-
+
<li><p><strong>You cannot export a library project to a JAR file</strong></p>
- <p>A library cannot be distributed as a binary file (such as a jar file). This is because the
- library project is compiled by the main project to use the correct resource IDs.</p></li>
+ <p>A library cannot be distributed as a binary file (such as a JAR file). This will
+be added in a future
+ version of the SDK Tools.</p></li>
<li><p><strong>A library project can include a JAR library</strong></p>
<p>You can develop a library project that itself includes a JAR library, however you need to
manually edit the dependent application project's build path and add a path to the JAR file.</p></li>
-
+
<li><p><strong>A library project can depend on an external JAR library</strong></p>
<p>You can develop a library project that depends on an external library (for example, the Maps
@@ -316,7 +326,7 @@
used by an application must be stored in the <code>assets/</code> directory of the application
project itself. However, resource files saved in the
<code>res/</code> directory are supported.</p></li>
-
+
<li><p><strong>Platform version must be lower than or equal to the Android project</strong></p>
<p>A library is compiled as part of the dependent application project, so the API used in the
@@ -327,12 +337,12 @@
higher than that of the application, the application project will not compile. It is
perfectly acceptable to have a library that uses the Android 1.5 API (API level 3) and that is
used in an Android 1.6 (API level 4) or Android 2.1 (API level 7) project, for instance.</p></li>
-
+
<li> <p><strong>No restriction on library package names</strong></p>
<p>There is no requirement for the package name of a library to be the same as that of
applications that use it.</p></li>
-
+
<li><p><strong>Each library project creates its own R class </strong></p>
<p>When you build the dependent application project, library projects are compiled and
@@ -340,7 +350,7 @@
to the library's package name. The <code>R</code> class generated from main
project and the library project is created in all the packages that are needed including the main
project's package and the libraries' packages.</p></li>
-
+
<li><p><strong>Library project storage location</strong></p>
<p>There are no specific requirements on where you should store a library project, relative to a
@@ -351,7 +361,7 @@
<h2 id="TestProjects">Test Projects</h2>
- <p>Test projects contain Android applications that you write using the
+ <p>Test projects contain Android applications that you write using the
<a href="{@docRoot}guide/topics/testing/index.html">Testing and
Instrumentation framework</a>. The framework is an extension of the JUnit test framework and adds
access to Android system objects. The file structure of a test project is the same as an
@@ -387,24 +397,36 @@
<code><instrumentation></code></a>
element that connects the test project with the application project.</dd>
- <dt><code>build.properties</code></dt>
+ <dt><code>project.properties</code></dt>
+
+ <dd>This file contains project settings, such as the build target and links to the project being
+tested. This file is integral to the project, so maintain it in a source
+revision control system. To edit project properties in Eclipse, right-click the project folder
+and select <strong>Properties</strong>.</dd>
+
+ <dt><code>local.properties</code></dt>
+
+ <dd>Customizable computer-specific properties for the build system. If you use Ant to build
+ the project, this contains the path to the SDK installation. Because the content of the file
+ is specific to the local installation of the SDK, it should not be maintained in a Source
+ Revision Control system. If you use Eclipse, this file is not used.</dd>
+
+ <dt><code>ant.properties</code></dt>
<dd>Customizable properties for the build system. You can edit this file to override default
- build settings used by Ant and provide a pointer to your keystore and key alias so that the
- build tools can sign your application when built in release mode.</dd>
+ build settings used by Ant and provide the location to your keystore and key alias, so that the
+ build tools can sign your application when building in release mode. This file is integral to
+ the project, so maintain it in a source revision control system.
+ If you use Eclipse, this file is not used.</dd>
<dt><code>build.xml</code></dt>
- <dd>The Ant build file for your project.</dd>
+ <dd>The Ant build file for your project. This is only applicable for projects that
+ you build with Ant.</dd>
+ </dl>
- <dt><code>default.properties</code></dt>
-
- <dd>This file contains project settings, such as the build target. This files is integral to
- the project, as such, it should be maintained in a Source Revision Control system. It should
- never be edited manually — to edit project properties, right-click the project folder and
- select "Properties".</dd>
- </dl>For more information, see the <a href=
- "{@docRoot}guide/developing/testing/index.html">Testing</a> section.
+ <p>For more information, see the <a href=
+ "{@docRoot}guide/developing/testing/index.html">Testing</a> section.</p>
<h2 id="testing">Testing a Library Project</h2>
diff --git a/docs/html/guide/developing/projects/projects-cmdline.jd b/docs/html/guide/developing/projects/projects-cmdline.jd
index 90f88fb..08e0d9a 100644
--- a/docs/html/guide/developing/projects/projects-cmdline.jd
+++ b/docs/html/guide/developing/projects/projects-cmdline.jd
@@ -37,8 +37,8 @@
<p>The <code>android</code> tool provides you with commands to create all three types of
projects. An Android project contains all of the files and resources that are needed to build a
- project into an .apk file for installation.
-
+ project into an .apk file for installation.
+
<ul>
<li>An Android project contains all of the files and resources that are needed to build a project into
an .apk file for installation. You need to create an Android project for any application that you
@@ -107,13 +107,14 @@
"{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a> (adb) — located in the
SDK <code>platform-tools/</code> directory — to send your application to the emulator (discussed
later). So you need access between your project solution and the <code>platform-tools/</code> folder.</p>
-
+
<p class="note"><strong>Tip:</strong> Add the <code>platform-tools/</code> as well as the <code>tools/</code> directory
to your <code>PATH</code> environment variable.</p>
-
+
<p class="caution"><strong>Caution:</strong> You should refrain from moving the location of the
- SDK directory, because this will break the build scripts. (They will need to be manually updated
- to reflect the new SDK location before they will work again.)</p>
+ SDK directory, because this will break the SDK location property located in <code>local.properties</code>.
+ If you need to update the SDK location, use the <code>android update project</code> command.
+ See <a href="UpdatingAProject">Updating a Project</a> for more information.</p>
<h2 id="UpdatingAProject">Updating a Project</h2>
@@ -166,7 +167,7 @@
<p>The <code>create lib-project</code> command creates a standard project structure that includes
preset property that indicates to the build system that the project is a library. It does this by
- adding this line to the project's <code>default.properties</code> file:</p>
+ adding this line to the project's <code>project.properties</code> file:</p>
<pre class="no-pretty-print">
android.library=true
</pre>
@@ -176,7 +177,7 @@
<p>If you want to convert an existing application project to a library project, so that other
applications can use it, you can do so by adding a the <code>android.library=true</code> property
- to the application's <code>default.properties</code> file.</p>
+ to the application's <code>project.properties</code> file.</p>
<h3 id="CreatingManifestFile">Creating the manifest file</h3>
@@ -225,13 +226,13 @@
<p>This command updates the application project's build properties to include a reference to the
library project. Specifically, it adds an <code>android.library.reference.<em>n</em></code>
- property to the project's <code>default.properties</code> file. For example:</p>
+ property to the project's <code>project.properties</code> file. For example:</p>
<pre class="no-pretty-print">
android.library.reference.1=path/to/library_projectA
</pre>
<p>If you are adding references to multiple libraries, note that you can set their relative
- priority (and merge order) by manually editing the <code>default.properties</code> file and
+ priority (and merge order) by manually editing the <code>project.properties</code> file and
adjusting the each reference's <code>.<em>n</em></code> index as appropriate. For example, assume
these references:</p>
<pre class="no-pretty-print">
diff --git a/docs/html/guide/developing/tools/proguard.jd b/docs/html/guide/developing/tools/proguard.jd
index b97babe..eca262a 100644
--- a/docs/html/guide/developing/tools/proguard.jd
+++ b/docs/html/guide/developing/tools/proguard.jd
@@ -59,7 +59,7 @@
customizing the ProGuard configuration file.</p>
<p>To enable ProGuard so that it runs as part of an Ant or Eclipse build, set the
- <code>proguard.config</code> property in the <code><project_root>/default.properties</code>
+ <code>proguard.config</code> property in the <code><project_root>/project.properties</code>
file. The path can be an absolute path or a path relative to the project's root.</p>
<p>If you left the <code>proguard.cfg</code> file in its default location (the project's root directory),
you can specify its location like this:</p>
diff --git a/docs/html/guide/developing/tools/zipalign.jd b/docs/html/guide/developing/tools/zipalign.jd
index ebf177b..3216080 100644
--- a/docs/html/guide/developing/tools/zipalign.jd
+++ b/docs/html/guide/developing/tools/zipalign.jd
@@ -21,7 +21,7 @@
The build scripts used
when compiling your application with Ant will also zipalign your .apk,
as long as you have provided the path to your keystore and the key alias in
-your project {@code build.properties} file, so that the build tools
+your project {@code ant.properties} file, so that the build tools
can sign the package first.</p>
<p class="caution"><strong>Caution:</strong> zipalign must only be performed
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 5f74e50..f3540e2 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -101,41 +101,41 @@
</a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/ui/declaring-layout.html">
- <span class="en">Declaring Layout</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/ui/menus.html">
- <span class="en">Creating Menus</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/ui/actionbar.html">
- <span class="en">Using the Action Bar</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/ui/dialogs.html">
- <span class="en">Creating Dialogs</span>
+ <span class="en">XML Layouts</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/ui-events.html">
- <span class="en">Handling UI Events</span>
+ <span class="en">Input Events</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/menus.html">
+ <span class="en">Menus</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/actionbar.html">
+ <span class="en">Action Bar</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/dialogs.html">
+ <span class="en">Dialogs</span>
</a></li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/index.html">
- <span class="en">Notifying the User</span>
+ <span class="en">Notifications</span>
</a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/toasts.html">
- <span class="en">Creating Toast Notifications</span>
+ <span class="en">Toast Notifications</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/notifications.html">
- <span class="en">Creating Status Bar Notifications</span>
+ <span class="en">Status Bar Notifications</span>
</a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/drag-drop.html">
- <span class="en">Dragging and Dropping</span>
+ <span class="en">Drag and Drop</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/themes.html">
- <span class="en">Applying Styles and Themes</span>
+ <span class="en">Styles and Themes</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/custom-components.html">
- <span class="en">Building Custom Components</span>
+ <span class="en">Custom Components</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/binding.html">
<span class="en">Binding to Data with AdapterView</span>
@@ -233,23 +233,32 @@
</ul>
<ul>
- <li class="toggle-list">
+ <li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/graphics/index.html">
<span class="en">Graphics</span>
- </a></div>
+ </a><span class="new-child">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/2d-graphics.html">
- <span class="en">2D Graphics</span>
- </a></li>
+ <span class="en">Canvas and Drawables</span></a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/graphics/hardware-accel.html">
+ <span class="en">Hardware Acceleration</span></a>
+ <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/opengl.html">
- <span class="en">3D with OpenGL</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/graphics/animation.html">
- <span class="en">Property Animation</span>
- </a></li>
+ <span class="en">OpenGL</span>
+ </a><span class="new">updated</span></li>
+ </ul>
+ </li>
+ <li class="toggle-list">
+ <div><a href="<?cs var:toroot ?>guide/topics/graphics/animation.html">
+ <span class="en">Animation</span>
+ </a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>guide/topics/graphics/prop-animation.html">
+ <span class="en">Property Animation</span></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/view-animation.html">
- <span class="en">View Animation</span>
- </a></li>
+ <span class="en">View Animation</span></a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/graphics/drawable-animation.html">
+ <span class="en">Drawable Animation</span></a></li>
</ul>
</li>
<li class="toggle-list">
@@ -258,7 +267,7 @@
</a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/renderscript/graphics.html">
- <span class="en">3D Graphics</span>
+ <span class="en">Graphics</span>
</a>
</li>
<li><a href="<?cs var:toroot ?>guide/topics/renderscript/compute.html">
@@ -268,9 +277,26 @@
</ul>
</li>
- <li><a href="<?cs var:toroot ?>guide/topics/media/index.html">
- <span class="en">Media</span>
- </a></li>
+ <li class="toggle-list">
+ <div><a href="<?cs var:toroot ?>guide/topics/media/index.html">
+ <span class="en">Multimedia and Camera</span>
+ </a><span class="new">updated</span></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>guide/topics/media/mediaplayer.html">
+ <span class="en">Media Playback</span></a>
+ </li>
+ <li><a href="<?cs var:toroot ?>guide/topics/media/jetplayer.html">
+ <span class="en">JetPlayer</span></a>
+ </li>
+ <li><a href="<?cs var:toroot ?>guide/topics/media/camera.html">
+ <span class="en">Camera</span></a>
+ <span class="new">new!</span>
+ </li>
+ <li><a href="<?cs var:toroot ?>guide/topics/media/audio-capture.html">
+ <span class="en">Audio Capture</span></a>
+ </li>
+ </ul>
+ </li>
<li>
<a href="<?cs var:toroot ?>guide/topics/clipboard/copy-paste.html">
<span class="en">Copy and Paste</span>
@@ -693,17 +719,20 @@
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design.html">
- <span class="en">Icon Design</span>
+ <span class="en">Icon Design <span class="new">updated</span></span>
</a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_launcher.html">
- <span class="en">Launcher Icons</span>
+ <span class="en">Launcher Icons <span class="new">updated</span></span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_menu.html">
<span class="en">Menu Icons</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_action_bar.html">
+ <span class="en">Action Bar Icons <span class="new">new!</span></span>
+ </a></li>
<li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_status_bar.html">
- <span class="en">Status Bar Icons</span>
+ <span class="en">Status Bar Icons <span class="new">updated</span></span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design_tab.html">
<span class="en">Tab Icons</span>
@@ -791,7 +820,7 @@
<span class="en">App Install Location</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/appendix/media-formats.html">
- <span class="en">Supported Media Formats</span>
+ <span class="en">Supported Media Formats <span class="new">updated</span></span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/appendix/g-app-intents.html">
<span class="en">Intents List: Google Apps</span>
diff --git a/docs/html/guide/practices/design/seamlessness.jd b/docs/html/guide/practices/design/seamlessness.jd
index dedc16f..6c73426 100644
--- a/docs/html/guide/practices/design/seamlessness.jd
+++ b/docs/html/guide/practices/design/seamlessness.jd
@@ -171,7 +171,7 @@
avoid rolling your own as much as possible. Instead, use a Theme. You
can override or extend those parts of the theme that you need to, but at least
you're starting from the same UI base as all the other applications. For all
-the details, read <a href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
+the details, read <a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
<h2 id="flexui">Design Your UI to Work with Multiple Screen Resolutions</h2>
diff --git a/docs/html/guide/practices/screen-compat-mode.jd b/docs/html/guide/practices/screen-compat-mode.jd
index a792386..6a77d60 100644
--- a/docs/html/guide/practices/screen-compat-mode.jd
+++ b/docs/html/guide/practices/screen-compat-mode.jd
@@ -48,7 +48,7 @@
to resize for larger screens such as tablets. Since Android 1.6, Android has supported a
variety of screen sizes and does most of the work to resize application layouts so that they
properly fit each screen. However, if your application does not successfully follow the guide to
-<a href="{@docRoot}guide/topics/practices/screens_support.html">Supporting Multiple Screens</a>,
+<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>,
then it might encounter some rendering issues on larger screens. For applications with this
problem, screen compatibility mode can make the application a little more usable on larger
screens.</p>
@@ -83,7 +83,7 @@
<p>This was introduced with Android 3.2 to further
assist applications on the latest tablet devices when the applications have not yet
implemented techniques for <a
-href="{@docRoot}guide/topics/practices/screens_support.html">Supporting Multiple
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
Screens</a>.</p>
<p>In general, large screen devices running Android 3.2 or higher allow users to enable
screen compatibility mode when the application does not <strong>explicitly declare that it supports
@@ -211,7 +211,7 @@
which you should want your application to run—it causes pixelation and blurring in your UI,
due to zooming. The proper way to make your application work well on large screens is to follow the
guide to <a
-href="{@docRoot}guide/topics/practices/screens_support.html">Supporting Multiple Screens</a> and
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> and
provide alternative layouts for different screen sizes.</p>
<p>By default, when you've set either <a
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design.jd b/docs/html/guide/practices/ui_guidelines/icon_design.jd
index d3b702d..07b73bb 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design.jd
@@ -36,6 +36,8 @@
<h2>Downloads</h2>
<ol>
+<li><a href="{@docRoot}shareables/icon_templates-v4.0.zip">Android Icon
+Templates Pack, v4.0 »</a></li>
<li><a href="{@docRoot}shareables/icon_templates-v2.3.zip">Android Icon
Templates Pack, v2.3 »</a></li>
<li><a href="{@docRoot}shareables/icon_templates-v2.0.zip">Android Icon
@@ -74,6 +76,10 @@
<dt><strong><a href="icon_design_menu.html">Menu Icons</a></strong></dt>
<dd>Menu icons are graphical elements placed in the options menu shown to
users when they press the Menu button.</dd>
+ <dt><strong><a href="icon_design_action_bar.html">Action Bar Icons</a>
+ <span class="new">new!</span></strong></dt>
+ <dd>Action Bar icons are graphical elements representing action items in the
+ <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>.</dd>
<dt><strong><a href="icon_design_status_bar.html">Status Bar Icons</a></strong></dt>
<dd>Status bar icons are used to represent notifications from your
application in the status bar.</dd>
@@ -112,8 +118,8 @@
</p>
<p style="margin-left:2em"><a
-href="{@docRoot}shareables/icon_templates-v2.3.zip">Download the Icon Templates
-Pack for Android 2.3 »</a>
+href="{@docRoot}shareables/icon_templates-v4.0.zip">Download the Icon Templates
+Pack for Android 4.0 »</a>
<p>For previous versions of the Icon Templates Pack, see the <em>Downloads</em>
section in the box at the top-right corner of this page.</p>
@@ -134,7 +140,7 @@
regardless of the device's screen size or resolution.</p>
<p>In general, the recommended approach is to create a separate set of icons for
-each of the three generalized screen densities listed in Table 1. Then,
+each generalized screen density. Then,
store them in density-specific resource directories in your application. When
your application runs, the Android platform will check the characteristics of
the device screen and load icons from the appropriate density-specific
@@ -146,145 +152,6 @@
<p>For tips on how to create and manage icon sets for multiple densities, see
<a href="#design-tips">Tips for Designers</a>.</p>
-<p class="table-caption" id="screens-table"><strong>Table 1.</strong> Summary of
-finished icon dimensions for each of the three generalized screen densities, by
-icon type.</p>
-
- <table>
- <tbody>
-<tr>
-<th>Icon Type</th><th colspan="3">Standard Asset Sizes (in Pixels), for
-Generalized Screen Densities</th></tr>
- <tr>
- <td style="background-color:#f3f3f3"></td>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>Low density screen <em>(ldpi)</em></nobr>
- </th>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>Medium density screen <em>(mdpi)</em></nobr>
- </th>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>High density screen <em>(hdpi)</em><nobr>
- </th>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- Launcher
- </th>
- <td>
- 36 x 36 px
- </td>
-
- <td>
- 48 x 48 px
- </td>
- <td>
- 72 x 72 px
- </td>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- Menu
- </th>
- <td>
- 36 x 36 px
- </td>
-
- <td>
- 48 x 48 px
- </td>
- <td>
- 72 x 72 px
- </td>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- Status Bar (Android 2.3 and later)
- </th>
- <td>
- 12w x 19h px<br>
- (preferred, width may vary)
- </td>
-
- <td>
- 16w x 25h px<br>
- (preferred, width may vary)
- </td>
- <td>
- 24w x 38h px<br>
- (preferred, width may vary)
- </td>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- Status Bar (Android 2.2 and below)
- </th>
- <td>
- 19 x 19 px
- </td>
-
- <td>
- 25 x 25 px
- </td>
- <td>
- 38 x 38 px
- </td>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- Tab
- </th>
- <td>
- 24 x 24 px
- </td>
-
- <td>
- 32 x 32 px
- </td>
- <td>
- 48 x 48 px
- </td>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- Dialog
- </th>
- <td>
- 24 x 24 px
- </td>
-
- <td>
- 32 x 32 px
- </td>
- <td>
- 48 x 48 px
- </td>
- </tr>
-
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- List View
- </th>
- <td>
- 24 x 24 px
- </td>
-
- <td>
- 32 x 32 px
- </td>
- <td>
- 48 x 48 px
- </td>
- </tr>
- </tbody>
- </table>
-
@@ -317,7 +184,7 @@
<td><code>ic_launcher_calendar.png</code></td>
</tr>
<tr>
-<td>Menu icons</td>
+<td>Menu icons and Action Bar icons</td>
<td><code>ic_menu</code></td>
<td><code>ic_menu_archive.png</code></td>
</tr>
@@ -349,7 +216,7 @@
find, we recommend creating a directory structure in your working space that
organizes asset files per resolution. For example:</p>
-<pre>assets/...
+<pre>art/...
ldpi/...
_pre_production/...
<em>working_file</em>.psd
@@ -361,6 +228,10 @@
hdpi/...
_pre_production/...
<em>working_file</em>.psd
+ <em>finished_asset</em>.png
+ xhdpi/...
+ _pre_production/...
+ <em>working_file</em>.psd
<em>finished_asset</em>.png</pre>
<p>This structure parallels the density-specific structure in which you will
@@ -380,6 +251,8 @@
drawable-mdpi/...
<em>finished_asset</em>.png
drawable-hdpi/...
+ <em>finished_asset</em>.png
+ drawable-xhdpi/...
<em>finished_asset</em>.png</pre>
@@ -398,25 +271,16 @@
<h3>Start with large artboards</h3>
-<p>Because you will need to create assets for different screen densities, as
-shown in <a href="#screens-table">Table 1</a>, it is best to start your icon
+<p>Because you will need to create assets for different screen densities,
+it is best to start your icon
designs on large artboards with dimensions that are multiples of the target icon
sizes. For example, <a
href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html">launcher
-icons</a> are 72, 48, or 36 pixels wide, depending on screen density. If you
+icons</a> are 96, 72, 48, or 36 pixels wide, depending on screen density. If you
initially draw launcher icons on an 864x864 artboard, it will be easier and
cleaner to tweak the icons when you scale the artboard down to the target
sizes for final asset creation.</p>
-<p>It's also beneficial to add guide lines (also known as guides) to your large
-artboard for the recommended safe margins at the highest target density.
-Continuing with the example above, per the <a
-href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html#size5">guidelines</a>,
-launcher icon content should be 60x60 pixels (56x56 for square icons) within the
-full 72x72 asset, or a safe margin of 6 pixels on each side. On an 864x864
-artboard, this corresponds to horizontal and vertical guide lines 72 pixels from
-each side of the artboard.</p>
-
<h3>When scaling, redraw bitmap layers as needed</h3>
@@ -431,22 +295,12 @@
<h3>When saving image assets, remove unnecessary metadata</h3>
-<p>To help keep each image asset as small as possible, make sure to remove any
-unnecessary headers from the file, such as Adobe Fireworks metadata or Adobe
-Photoshop headers. To remove the Photoshop header, follow these steps: </p>
-
-<ol>
-<li>Under the <strong>File</strong> menu, choose the <strong>Save for Web &
-Devices</strong> command </li>
-<li>On the "Save for Web & Devices" panel, set the Preset pop-up to
-"PNG-24," set the pop-up under Presets to "PNG-24" as well, and select the
-Transparency box (if the image uses transparency)</li>
-<li>Select <strong>Save</strong>.</li>
-</ol>
-
-<p>It is also useful to use PNG file size optimization tools such as <a
+<p>Although the Android SDK tools will automatically compress PNGs when packaging
+application resources into the application binary, a good practice is to remove
+unnecessary headers and metadata from your PNG assets. Tools such as <a
href="http://optipng.sourceforge.net/">OptiPNG</a> or <a
-href="http://pmt.sourceforge.net/pngcrush/">Pngcrush</a>.
+href="http://pmt.sourceforge.net/pngcrush/">Pngcrush</a> can ensure that this
+metadata is removed and that your image asset file sizes are optimized.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
new file mode 100644
index 0000000..449c27f
--- /dev/null
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
@@ -0,0 +1,189 @@
+page.title=Action Bar Icons
+parent.title=Icon Design Guidelines
+parent.link=icon_design.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#icon11">Android 3.0 and Later</a>
+ <ol>
+ <li><a href="#size11">Size and format</a></li>
+ <li><a href="#style11">Style, colors, and effects</a></li>
+ <li><a href="#examples11">Example icons</a></li>
+ </ol>
+</li>
+</ol>
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a></li>
+<li><a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a></li>
+</ol>
+
+</div>
+</div>
+
+
+
+<p>Action Bar icons are graphical elements placed in the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> representing individual action
+items.</p>
+
+<p>As described in <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#icon-sets">Providing Density-Specific
+Icon Sets</a> and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>, you should create separate icons for all generalized screen densities, including low-,
+medium-, high-, and extra-high-density screens. This ensures that your icons will display properly
+across the range of devices on which your application can be installed. See <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">Tips for Designers</a>
+for suggestions on how to work with multiple sets of icons.</p>
+
+<p><strong>Final art must be exported as a transparent PNG file. Do not include
+a background color</strong>.</p>
+
+<p>Templates for creating icons in Adobe Photoshop are available in the <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#templatespack">Icon
+Templates Pack</a>.</p>
+
+
+
+<h2 id="icon11">Android 3.0 and Later</h2>
+
+<p>The following guidelines describe how to design action bar icons for Android
+3.0 (API Level 11) and later.</p>
+
+
+<h3 id="size11">Size and format</h2>
+
+<p>Action Bar icons should be 32-bit PNGs with an alpha channel for transparency. The finished
+action bar icon dimensions, corresponding to a given generalized screen density, are shown in
+the table below.</p>
+
+<p class="table-caption" id="screens_table"><strong>Table 1.</strong> Summary of
+finished Action Bar icon dimensions for each generalized screen density.</p>
+
+<table>
+ <tbody>
+ <tr>
+ <th></th>
+ <th>
+ <code>ldpi</code> (120 dpi)<br>
+ <small style="font-weight: normal">(Low density screen)</small>
+ </th>
+ <th>
+ <code>mdpi</code> (160 dpi)<br>
+ <small style="font-weight: normal">(Medium density screen)</small>
+ </th>
+ <th>
+ <code>hdpi</code> (240 dpi)<br>
+ <small style="font-weight: normal">(High density screen)</small>
+ </th>
+ <th>
+ <code>xhdpi</code> (320 dpi)<br>
+ <small style="font-weight: normal">(Extra-high density screen)</small>
+ </th>
+ </tr>
+ <tr>
+ <th style="background-color:#f3f3f3;font-weight:normal">
+ Action Bar Icon Size
+ </th>
+ <td>
+ 18 x 18 px
+ </td>
+ <td>
+ 24 x 24 px
+ </td>
+ <td>
+ 36 x 36 px
+ </td>
+ <td>
+ 48 x 48 px
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+
+
+<h3 id="style11">Style, colors, and effects</h3>
+
+<p>Action Bar icons are flat, pictured face on, and generally greyscale, depending on the
+application's theme. Action Bar icons should not look three-dimensional.</p>
+
+<p>In order to maintain consistency across the application's Action Bar, all Action Bar icons should
+use the same color palette and effects.</p>
+
+<p>When using the default "Holo Light" or "Holo Dark" themes, icons should use the color palette
+and effects shown in Figure 1 and Figure 2, below.</p>
+
+
+
+<table class="image-caption">
+<tr>
+<td class="image-caption-i">
+ <img src="{@docRoot}images/icon_design/action_bar_holo_light_style.png"
+ alt="A view of effects for Action Bar icons for the 'Holo Light' theme.">
+</td>
+<td class="image-caption-c">
+ <div class="caption grad-rule-top">
+ <p><strong>Figure 1. </strong>Style and effects for "Holo Light" theme Action Bar icons.</p>
+ <div class="image-caption-nested">
+ <table>
+ <tr><td><em>1.</em></td><td nowrap>Fill color:</td><td><code>#333333</code>, 60% opacity
+ <br><br></td></tr>
+ <tr><td><em>2.</em></td><td nowrap>Inner content:</td><td>Inner content should subtract from
+ the outer shape and consist purely of transparent pixels.</td></tr>
+ </table>
+ </div>
+ </div>
+</td>
+</tr>
+</table>
+
+<table class="image-caption">
+<tr>
+<td class="image-caption-i">
+ <img src="{@docRoot}images/icon_design/action_bar_holo_dark_style.png"
+ alt="A view of effects for Action Bar icons for the 'Holo Dark' theme.">
+</td>
+<td class="image-caption-c">
+ <div class="caption grad-rule-top">
+ <p><strong>Figure 2. </strong>Style and effects for "Holo Dark" theme Action Bar icons.</p>
+ <div class="image-caption-nested">
+ <table>
+ <tr><td><em>1.</em></td><td nowrap>Fill color:</td><td><code>#ffffff</code>, 80% opacity
+ <br><br></td></tr>
+ <tr><td><em>2.</em></td><td nowrap>Inner content:</td><td>Inner content should subtract from
+ the outer shape and consist purely of transparent pixels.</td></tr>
+ </table>
+ <p class="note"><strong>Note: </strong> icons should should have a transparent background;
+ the dark background here is for effect only.</p>
+ </div>
+ </div>
+</td>
+</tr>
+</table>
+
+
+
+
+<h3 id="examples11">Example icons</h3>
+
+<p>Shown below are example extra-high-density Action Bar icons that are used throughout Android
+system applications.</p>
+
+<p class="warning"><strong>Warning:</strong> Because resources can change between platform versions,
+you should not reference built-in icons using the Android platform resource IDs (i.e. menu or Action
+Bar icons under <code>android.R.drawable</code>). If you want to use any icons or other internal
+drawable resources, you should store a local copy of those icons or drawables in your application
+resources, then reference the local copy from your application code. In that way, you can maintain
+control over the appearance of your icons, even if the system's copy changes. Note that the grid
+below is not intended to be complete.</p>
+
+<img src="{@docRoot}images/icon_design/action_bar_examples.png" />
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
index cb04b55..3f6061c 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
@@ -9,23 +9,15 @@
<h2>In this document</h2>
<ol>
-<li><a href="#market">Application Icons in Android Market</a></li>
-<li><a href="#icon5">Android 2.0 and Later</a>
- <ol>
- <li><a href="#style5">Style</a></li>
- <li><a href="#size5">Size</a></li>
- <li><a href="#materialscolors5">Materials and colors</a></li>
- <li><a href="#effects5">Effects</a></li>
- <li><a href="#dodonts5">Do's and don'ts</a></li>
- <li><a href="#examples5">Example icons</a></li>
- </ol>
-</li>
-<li><a href="#icon1">Android 1.6 and Earlier</a></li>
+<li><a href="#goals">Goals of the Launcher Icon</a></li>
+<li><a href="#dos_donts">Do's and Don'ts</a></li>
+<li><a href="#size">Size and Format</a></li>
</ol>
<h2>See also</h2>
<ol>
+<li><a href="icon_design_launcher_archive.html">Older guidelines</a></li>
<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
Screens</a></li>
</ol>
@@ -34,487 +26,225 @@
</div>
-<p>A Launcher icon is a graphic that represents your application on the device's
-Home screen and in the Launcher window.</p>
+<p>A launcher icon is a graphic that represents your application. Launcher icons are used by
+Launcher applications and appear on the user’s Home screen. Launcher icons can also be used to
+represent shortcuts into your application (for example, a contact shortcut icon that opens detail
+information for a contact).</p>
-<p>The user opens the Launcher by touching the icon at the bottom of the Home
-screen. The Launcher opens and exposes the icons for all of the installed
-applications. The user selects an application and opens it by touching the
-Launcher icon or by means of any hardware navigation controls available, such as
-a trackball or d-pad.</p>
+<p>As described in <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#icon-sets">Providing Density-Specific
+Icon Sets</a> and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>, you should create separate icons for all generalized screen densities, including low-,
+medium-, high-, and extra-high-density screens. This ensures that your icons will display properly
+across the range of devices on which your application can be installed. See <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">Tips for Designers</a>
+for suggestions on how to work with multiple sets of icons.</p>
-<p>As described in <a href="icon_design.html#icon-sets">Providing
-Density-Specific Icon Sets</a>, you should create separate icons for low-,
-medium-, and high-density screens. This ensures that your icons will display
-properly across the range of devices on which your application can be installed.
-See <a href="icon_design.html#design-tips">Tips for Designers</a> for
-suggestions on how to work with multiple sets of icons.</p>
+<p>A high-resolution version of your application launcher icon is also required by Android Market
+for use in application listings. For more details on this, see <a
+href="#icons_in_market">Application Icons in Android Market</a> below.</p>
+<p class="note"><strong>Note:</strong>
-<h2 id="market">Application Icons in Android Market</h2>
+The launcher icon guidelines pertaining to all versions of Android have been re-written. If you
+need to review the old guidelines, see the
+<a href="icon_design_launcher_archive.html">launcher icon guidelines archive</a>.
-<p>If you are <a href="{@docRoot}guide/publishing/publishing.html">publishing
-your application on Android Market</a>, you will also need to provide a 512x512
-pixel, high-resolution application icon in the <a
-href="http://market.android.com/publish">developer console</a> at upload-time.
-This icon will be used in various locations in Android Market and does
-not replace your launcher icon.</p>
-
-<p>For tips and recommendations on creating high-resolution launcher icons that
-can easily be scaled up to 512x512, see
-<a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">
-Tips for Designers</a>.</p>
-
-<p>For information and specifications about high-resolution application
-icons in Android Market, see the following article:</p>
-
-<p style="margin-left:2em"><a
-href="http://market.android.com/support/bin/answer.py?answer=1078870">
- Graphic Assets for your Application (Android Market Help) »</a>
+</p>
+<h2 id="goals">Goals of the Launcher Icon</h2>
-<h2 id="icon5">Android 2.0 and Later</h2>
-
-<p>Starting with Android 2.0, launcher icons should be front-facing, instead of
-at a three-quarter perspective. The following guidelines describe how to design
-launcher icons for Android 2.0 (API Level 5) and later.</p>
-
-<h3 id="style5">Style</h3>
-
-<p>The launcher icons that you create should follow the general style principles
-below. The guidelines aren't meant to restrict what you can do with your icons,
-but rather they are meant to emphasize the common approaches that your icons can
-share with others on the device. Figure 1, at right, provides examples. </p>
-
-<div class="figure">
- <img src="{@docRoot}images/icon_design/IconGraphic_Icons_i.png"
- width="340">
+<div class="figure" style="width:400px" id="launcher_examples">
+ <img src="{@docRoot}images/icon_design/launcher_examples.png"
+ alt="Example launcher icons for system and third-party applications"
+ width="400" />
<p class="img-caption">
- <strong>Figure 1.</strong> Example launcher icons for Android 2.0 and
- greater.
+ <strong>Figure 1.</strong> Example launcher icons for system applications (left) and
+ third-party applications (right).
</p>
</div>
-<p>Clean and contemporary:</p>
-<ul>
- <li>Launcher icons should be modern and sometimes quirky; they should not
-appear aged or ragged. You should avoid overused symbolic metaphors whenever
-possible.</li>
-</ul>
+<p>Application launcher icons have three primary goals:</p>
-<p>Simple and iconic:</p>
-<ul>
- <li>Android Launcher icons are caricatural in nature; your icons should be
-highly simplified and exaggerated, so that they are appropriate for use at small
-sizes. Your icons should not be overly complicated. </li>
- <li>Try featuring a single part of an application as a symbolic
-representation of the whole (for example, the Music icon features a speaker).
-</li>
- <li>Consider using natural outlines and shapes, both geometric and organic,
-with a realistic (but never photorealistic) rendering. </li>
- <li>Your icons <em>should not</em> present a cropped view of a larger
-image.</li>
-</ul>
-
-<p>Tactile and textured:</p>
-<ul>
- <li>Icons should feature non-glossy, textured material. See
- <a href="#materialscolors5">Materials and colors</a>, below, for more
- information.</li>
-</ul>
-
-<p>Forward-facing and top-lit:</p>
-<ul>
- <li><em>New for Android 2.0 and later platforms</em>: Android Launcher
-icons should be forward-facing, with very little perspective, and they
-should be top-lit.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Android applies separate text labels
-using the application name when displaying launcher icons, so you should avoid
-embedding text in your icon and instead focus on designing a distinct and
-memorable icon.</p>
-
-
-
-<h3 id="size5">Size and positioning</h3>
-
-<p>Launcher icons should use a variety of shapes and forms that are scaled and
-positioned inside the asset to create consistent visual weight with other
-icons.</p>
-
-<p>Figure 2 illustrates various ways of positioning the icon inside the
-asset. You should size the icons <em>smaller than the actual bounds of the
-asset</em> to create a consistent visual weight and to allow for shadows. If
-your icon is square or nearly square, it should be scaled even smaller.</p>
-
-<p>In order to indicate the recommended size for the icon, each example in
-Figure 2 includes three different guide rectangles:</p>
-
-<ul>
-<li>The red box is the bounding box for the full asset.</li>
-<li>The blue box is the recommended bounding box for the actual icon.
-The icon box is sized smaller than the full asset box so that there is space to
-include shadows and allow for special icon treatments.</li>
-<li>The orange box is the recommended bounding box for the actual icon when
-the content is square. The box for square icons is smaller than that for other
-icons to establish a consistent visual weight across the two types.</li>
-</ul>
-
-<table>
-<tr>
-
-<td style="border:0;">
-<ol class="nolist">
- <li>Launcher icon dimensions for high-density (<code>hdpi</code>) screens:</li>
- <ol class="nolist">
- <li>Full Asset: 72 x 72 px</li>
- <li>Icon: 60 x 60 px</li>
- <li>Square Icon: 56 x 56 px</li>
- </ol>
- </li>
+<ol>
+ <li>Promote the brand and tell the story of the app.</li>
+ <li>Help users discover the app in Android Market.</li>
+ <li>Function well in the Launcher.</li>
</ol>
-</td>
-<td style="border:0;">
- <img src="{@docRoot}images/icon_design/launcher_size_hdpi.png" width="450">
-</td>
-</tr>
-<tr>
-<td style="border:0;">
- <ol class="nolist">
- <li>Launcher icon dimensions for medium-density (<code>mdpi</code>) screens:</li>
- <ol class="nolist">
- <li>Full Asset: 48 x 48 px</li>
- <li>Icon: 40 x 40 px</li>
- <li>Square Icon: 38 x 38 px</li>
- </ol>
+
+<h3 id="promoting_brand_story">Promote the brand story</h3>
+
+<p>App launcher icons are an opportunity to showcase the brand and hint at the story of what your
+app is about. Thus, you should:</p>
+
+<ul>
+ <li>Create an icon that is unique and memorable.</li>
+ <li>Use a color scheme that suits your brand.</li>
+ <li>Don't try to communicate too much with the icon. A simple icon will have more impact and be
+ more memorable.</li>
+ <li>Avoid including the application name in the icon. The app name will always be displayed
+ adjacent to the icon.</li>
+</ul>
+
+
+<h3 id="help_users_discover">Help users discover the app in Android Market</h3>
+
+<p>App launcher icons are the first look that prospective users will get of your app in Android
+Market. A high quality app icon can influence users to find out more as they scroll through lists of
+applications.</p>
+
+<p>Quality matters here. A well-designed icon can be a strong signal that your app
+is of similarly high quality. Consider working with an icon designer to develop the app’s launcher
+icon.</p>
+
+<p class="note"><strong>Note:</strong> Android Market requires a high-resolution version of your
+icon; for more details on this, see <a href="#icons_in_market">Application Icons in Android
+Market</a> below.</p>
+
+
+<h3 id="function_well_in_launcher">Function well in the Launcher</h3>
+
+<p>The launcher is where users will interact with the icon most frequently. A successful app
+launcher icon will look great in all situations: on any background and next to any other icons and
+app widgets. To do this, icons should:</p>
+
+<ul>
+ <li>Communicate well at small sizes.</li>
+ <li>Work on a wide variety of backgrounds.</li>
+ <li>Reflect the implied lighting model of the launcher (top-lit).</li>
+ <li>If the icon is 3D, use a perspective that doesn't feel out of place with other icons;
+ forward-facing works best. <ul>
+ <li>3D icons work best with a shallow depth.</li></ul>
</li>
-</ol>
-</td>
-
-<td style="border:0;">
- <img src="{@docRoot}images/icon_design/launcher_size_mdpi.png" width="450">
-</td>
-</tr>
-<tr>
-<td style="border:0;">
- <ol class="nolist">
- <li>Launcher icon dimensions for low-density (<code>ldpi</code>) screens:</li>
- <ol class="nolist">
- <li>Full Asset: 36 x 36 px</li>
- <li>Icon: 30 x 30 px</li>
- <li>Square Icon: 28 x 28 px</li>
- </ol>
+ <li>Have a unique silhouette for faster recognition; not all Android app icons should be square. <ul>
+ <li>Icons should not present a cropped view of a larger image.</li></ul>
</li>
-</ol>
-</td>
-
-<td style="border:0;">
- <img src="{@docRoot}images/icon_design/launcher_size_ldpi.png" width="450">
-</td>
-</tr>
-
-<tr>
-<td style="border:0;"></td>
-<td style="border:0;">
- <p class="table-caption"><strong>Figure 2.</strong>
- Launcher icon sizing and positioning inside the bounds of the
- icon asset.</p>
-</td>
-</tr>
-
-</table>
+ <li>Have similar weight to other icons. Icons that are too spindly or that don't use enough of
+ the space may not successfully attract the user’s attention, or may not stand out well on all
+ backgrounds.</li>
+</ul>
+<h2 id="dos_donts">Do's and Don'ts</h2>
+<p>Below are some "do and don't" examples to consider when creating icons for your application.</p>
-<h3 id="materialscolors5">Materials and colors</h3>
-
-<p>Launcher icons should make use of tactile, top-lit, textured materials. Even
-if your icon is just a simple shape, you should try to render in a way that
-makes it appear to be sculpted from some real-world material.</p>
-
-<p>Android launcher icons usually consist of a smaller shape within a
-larger base shape and combine one neutral and one primary color. Icons may
-use a combination of neutral colors but should maintain a fairly high level of
-contrast. Icons should not use more than one primary color per icon, if
-possible.</p>
-
-<p>Launcher icons should use a limited color palette that includes a range
-of neutral and primary colors. The icons should not be over-saturated.</p>
-
-<p>The recommended color palette to use for Launcher icons is shown in Figure 3.
-You can use elements of the palette for both the base color and the highlight
-color. You can use the colors of the palette in conjunction with a
-white-to-black vertical linear gradient overlay. This creates the impression
-that the icon is lit from above and keeps the color less saturated.</p>
-
-<img src="{@docRoot}images/icon_design/IconGraphic_Colors.png" width="530">
-<p class="img-caption">
-<strong>Figure 3.</strong> Recommended color palette for icons.</p>
-
-<p>When you combine the materials in Figure 4 with a color highlight from the
-recommended palette above, you can create materials combinations such as those
-shown in Figure 5. To get you started, the
-<a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#templatespack">Icon Templates Pack</a>
-includes a Photoshop file (<code>ic_launcher_template/example_materials.psd</code>)
-that provides all of the default materials, colors, and gradients. </p>
-
-<table>
+<table style="width: 600px">
<tbody>
+
<tr>
- <td style="border:0;">
-<img src="{@docRoot}images/icon_design/IconGraphic_Materials.png" width="450">
-<p class="img-caption">
-<strong>Figure 4.</strong> Example materials that you can use to create
-your icons.</p>
- </td>
- <td style="border:0;border-left:1px solid #ccc;margin-left:1em;padding-left:1em">
-<img src="{@docRoot}images/icon_design/IconGraphic_AccentColor.png" width="450">
-<p class="img-caption">
-<strong>Figure 5.</strong> Examples of materials combined with base
-and highlight colors from the recommended palette.</p>
- </td>
+ <td style="border:0"><img src="{@docRoot}images/icon_design/launcher_dodont_settings.png"
+ alt="Side by side: overly complicated vs. simpler launcher icons"></td>
+ <td style="border:0; vertical-align:middle">Icons should not be overly complicated. Remember
+ that launcher icons will be used at often small sizes, so they should be distinguishable at
+ small sizes.</td>
</tr>
+
+ <tr>
+ <td style="border:0"><img src="{@docRoot}images/icon_design/launcher_dodont_clock.png"
+ alt="Side by side: cropped and glossy vs. matte and single-shape launcher icons"></td>
+ <td style="border:0; vertical-align:middle">Icons should not be cropped. Use unique shapes
+ where appropriate; remember that launcher icons should differentiate your application from
+ others. Additionally, do not use too glossy a finish unless the represented object has a
+ glossy material.</td>
+ </tr>
+
+ <tr>
+ <td style="border:0"><img src="{@docRoot}images/icon_design/launcher_dodont_custom_2.png"
+ alt="Side by side: overly thin vs. thicker, weightier icons"></td>
+ <td style="border:0; vertical-align:middle">Icons should not be thin. They should have a
+ similar weight to other icons. Overly thin icons will not stand out well on all
+ backgrounds.</td>
+ </tr>
+
+ <tr>
+ <td style="border:0"><img src="{@docRoot}images/icon_design/launcher_dodont_custom.png"
+ alt="Side by side: full-frame vs. subtly rounded and treated icons"></td>
+ <td style="border:0; vertical-align:middle">Icons should make use of the alpha channel, and
+ should not simply be full-frame images. Where appropriate, distinguish your icon with
+ subtle yet appealing visual treatment.</td>
+ </tr>
+
</tbody>
</table>
+<h2 id="size">Size and Format</h2>
-<h3 id="effects5">Effects</h3>
+<p>Launcher icons should be 32-bit PNGs with an alpha channel for transparency. The finished
+launcher icon dimensions corresponding to a given generalized screen density are shown in the
+table below.</p>
-<p>Launcher icons are flat and the perspective is straight-on, rather than at an
-angle. A drop shadow is used to create a sense of depth. Launcher icons can use
-varying textures and lighting effects, but must be lit directly from above
-(straight down).</p>
-
-<p>In order to maintain consistency, all launcher icons should use the same
-drop shadow effect, as shown in Figure 6.</p>
-
-<table class="image-caption">
-<tr>
-<td class="image-caption-i">
- <img src="{@docRoot}images/icon_design/launcher_style.png"/>
-</td>
-<td class="image-caption-c">
- <div class="caption grad-rule-top">
- <p><strong>Figure 6. </strong>Style, light and effects for launcher icons.</p>
- <div class="image-caption-nested">
- <p><em>Note: all pixel dimensions are for medium density and should be scaled appropriately for other densities.</em></p>
- <table>
- <tr><td><em>1.</em></td><td nowrap>Lighting:</td><td>Top-lit, using appropriate lighting details<br><br></td></tr>
- <tr><td><em>2.</em></td><td nowrap>Drop shadow:</td><td><code>#000000</code>, 75% opacity<br>angle 90°<br>distance 1px<br>size 3px<br><br></td></tr>
- <tr><td><em>3.</em></td><td nowrap>Textures:</td><td>Tactile, appear to use real-world materials (monochromatic noise in example image)<br><br></td></tr>
- </table>
- </div>
- </div>
-</td>
-</tr>
-</table>
-
-
-
-<h3 id="dodonts5">Do's and don'ts</h3>
-
-<p>Below are some "do and don't" examples to consider when creating icons for
-your application. </p>
-
+<p class="table-caption" id="screens_table"><strong>Table 1.</strong> Summary of
+finished launcher icon dimensions for each generalized screen density.</p>
<table>
-<tr>
-<td style="border:0;width:50%">
-
-<h4>Android Launcher icons are...</h4>
-
-<ul>
-<li>Modern, minimal, matte, tactile, and textured</li>
-<li>Forward-facing and top-lit, whole, limited in color
-palette</li>
-</ul>
-</td>
-<td style="border:0;width:50%">
-
-<h4>Android Launcher icons are not...</h4>
-
-<ul>
-<li>Antique, over-complicated, glossy, flat vector</li>
-<li>Rotated, Cropped, Over-Saturated</li>
-</ul>
-</td>
-</tr>
-<tr>
+ <tbody>
+ <tr>
+ <th></th>
+ <th>
+ <code>ldpi</code> (120 dpi)<br>
+ <small style="font-weight: normal">(Low density screen)</small>
+ </th>
+ <th>
+ <code>mdpi</code> (160 dpi)<br>
+ <small style="font-weight: normal">(Medium density screen)</small>
+ </th>
+ <th>
+ <code>hdpi</code> (240 dpi)<br>
+ <small style="font-weight: normal">(High density screen)</small>
+ </th>
+ <th>
+ <code>xhdpi</code> (320 dpi)<br>
+ <small style="font-weight: normal">(Extra-high density screen)</small>
+ </th>
+ </tr>
+ <tr>
+ <th style="background-color:#f3f3f3;font-weight:normal">
+ Launcher Icon Size
+ </th>
+ <td>
+ 36 x 36 px
+ </td>
+ <td>
+ 48 x 48 px
+ </td>
+ <td>
+ 72 x 72 px
+ </td>
+ <td>
+ 96 x 96 px
+ </td>
+ </tr>
+ </tbody>
</table>
-<img src="{@docRoot}images/icon_design/IconGraphic_DosDonts.png"/>
-<p class="img-caption">
-<strong>Figure 7.</strong> Side-by-side examples of "do's and don'ts" for
-Android launcher icons. </p>
+<p>You can also include a few pixels of padding in launcher icons to maintain a
+consistent visual weight with adjacent icons. For example, a 96 x 96 pixel <code>xhdpi</code>
+launcher icon can contain a 88 x 88 pixel shape with 4 pixels on each side for padding.
+This padding can also be used to make room for a subtle drop shadow, which can help ensure
+that launcher icons are legible across on any background color.</p>
+<h3 id="icons_in_market">Application Icons in Android Market</h3>
+<p>If you are <a href="{@docRoot}guide/publishing/publishing.html">publishing your application on
+Android Market</a>, you will also need to provide a 512 x 512 pixel, high-resolution application icon
+in the <a href="http://market.android.com/publish">developer console</a> at upload time. This icon
+will be used in various locations in Android Market and does not replace your launcher icon.</p>
+<p>For tips and recommendations on creating high-resolution launcher icons that can easily be scaled
+up to 512x512, see <a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">
+Tips for Designers</a>.</p>
-<h3 id="examples5">Example icons</h3>
+<p>For information and specifications about high-resolution application icons in Android Market, see
+the following article:</p>
-<p>Shown below are examples of high-density launcher icons used by
-Android applications. The icons are provided for your reference only —
-please do not reuse these icons in your applications.</code>.</p>
+<p style="margin-left:2em"><a href="http://market.android.com/support/bin/answer.py?answer=1078870">
+Graphic Assets for your Application (Android Market Help) »</a>
-<img src="{@docRoot}images/icon_design/IconGraphic_Icons.png" />
-
-
-
-<h2 id="icon1">Android 1.6 and earlier</h2>
-
-<p>The following guidelines describe how to design launcher icons for Android
-1.6 (API Level 4) and earlier. Launcher icons for Android 1.6 and below are
-simplified 3D icons with a fixed perspective. The required perspective is shown
-in Figure 8.</p>
-
-<h3 id="structure1">Structure</h3>
-
-<ul>
-<li>The base of a launcher icon can face either the top view or the front
-view.</li>
-
-<li>The majority of a launcher icon’s surface should be created using the
-launcher icon <a href="#palette1">color palette</a>. To add emphasis, use
-one or more bright accent colors to highlight specific characteristics.</li>
-
-<li>All launcher icons must be created with rounded corners to make them look
-friendly and simple—as shown in Figure 8.</li>
-
-<li>All dimensions specified are based on a 250x250 pixel artboard size
-in a vector graphics editor like Adobe Illustrator, where the icon fits within
-the artboard boundaries.</li>
-
-<li><strong>Final art must be scaled down and exported as a transparent PNG file
-using a raster image editor such as Adobe Photoshop. Do not include a background
-color.</strong></li>
-
-<li>Templates for creating icons in Adobe Photoshop are available in the <a
-href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#templatespack">Icon
-Templates Pack</a>.</li>
-
-</ul>
-
-<table class="image-caption">
-<tr>
-<td class="image-caption-i">
- <img src="{@docRoot}images/icon_design/launcher_structure.png" alt="A view of
-launcher icon corners and perspective angles" />
-</td>
-<td class="image-caption-c">
- <div class="caption grad-rule-top">
- <p><strong>Figure 8.</strong> Rounded corners and perspective angles for
- launcher icons (90° is vertical).</p>
- <div class="image-caption-nested">
- <table>
- <tr><td><em>1.</em></td><td>92°</td></tr>
- <tr><td><em>2.</em></td><td>92°</td></tr>
- <tr><td><em>3.</em></td><td>173°</td></tr>
- <tr><td><em>4.</em></td><td>171°</td></tr>
- <tr><td><em>5.</em></td><td>49°</td></tr>
- <tr><td><em>6.</em></td><td>171°</td></tr>
- <tr><td><em>7.</em></td><td>64°</td></tr>
- <tr><td><em>8.</em></td><td>97°</td></tr>
- <tr><td><em>9.</em></td><td>75°</td></tr>
- <tr><td><em>10.</em></td><td>93°</td></tr>
- <tr><td><em>11.</em></td><td>169°</td></tr>
- </table>
- </div>
- </div>
-</td>
-</tr>
-</table>
-
-<h3 id="style1">Light, effects, and shadows</h3>
-
-<p>Launcher icons are simplified 3D icons using light and shadows for
-definition. A light source is placed slightly to the left in front of the icon,
-and therefore the shadow expands to the right and back.</p>
-
-<table class="image-caption">
-<tr>
-<td class="image-caption-i">
- <img src="{@docRoot}images/icon_design/launcher_light.png" alt="A view of
-light, effects, and shadows for launcher icons."/>
-</td>
-<td class="image-caption-c">
- <div class="caption grad-rule-top">
- <p><strong>Figure 9. </strong>Light, effects, and shadows for launcher icons.</p>
- <div class="image-caption-nested">
- <table>
- <tr><td><em>1.</em></td><td>Edge highlight:</td><td>white</td></tr>
- <tr><td><em>2.</em></td><td>Icon shadow:</td><td>black | 20px blur<br>50% opacity | angle 67°</td></tr>
- <tr><td><em>3.</em></td><td>Front part:</td><td>Use light gradient from color palette</td></tr>
- <tr><td><em>4.</em></td><td>Detail shadow:</td><td>black | 10px blur<br>75% opacity</td></tr>
- <tr><td><em>5.</em></td><td> Side part:</td><td>Use medium gradient from color palette</td></tr>
- </table>
- </div>
- </div>
-</td>
-</tr>
-</table>
-
-<table>
-<tr>
-<td style="border:0">
-
-<h4 id="palette1">Launcher icon color palette</h4>
-
-<table>
-<tr>
-<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_white.png"/></td>
-<td class="image-caption-c">White<br>r 255 | g 255 | b 255<br>Used for highlights on edges.</td>
-</tr>
-
-<tr>
-<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_gradient_light.png"/></td>
-<td class="image-caption-c">Light gradient<br><em>1: </em>r 0 | g 0 | b 0<br><em>2: </em>r 217 | g 217 | b 217<br>Used on the front (lit) part of the icon.</td>
-</tr>
-
-<tr>
-<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_gradient_medium.png"/></td>
-<td class="image-caption-c">Medium gradient<br><em>1: </em>r 190 | g 190 | b 190<br><em>2: </em>r 115 | g 115 | b 115<br>Used on the side (shaded) part of the icon.</td>
-</tr>
-
-<tr>
-<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_gradient_dark.png"/></td>
-<td class="image-caption-c">Dark gradient<br><em>1: </em>r 100 | g 100 | b 100<br><em>2: </em>r 25 | g 25 | b 25<br>Used on details and parts in the shade of the icon.</td>
-</tr>
-
-<tr>
-<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_black.png"/></td>
-<td class="image-caption-c">Black<br>r 0 | g 0 | b 0<br>Used as base color in shadows.</td>
-</tr>
-
-</table>
-
-</td>
-
-<td style="border:0">
-
-<h4 id="steps1">Step by step</h4>
-
-<ol>
- <li>Create the basic shapes with a tool like Adobe Illustrator, using the
-angles described in <a href="#structure1">Launcher icon: structure</a>.
-The shapes and effects must fit within a 250x250 pixel artboard.</li>
- <li>Add depth to shapes by extruding them and create the rounded corners as
-described for the launcher icon structure.</li>
- <li>Add details and colors. Gradients should be treated as if there is a light
-source placed slightly to the left in front of the icon.</li>
- <li>Create the shadows with the correct angle and blur effect.</li>
- <li>Import the icon into a tool like Adobe Photoshop and scale to fit an image
-size of 48x48 px on a transparent background.</li>
- <li>Export the icon at 48x48 as a PNG file with transparency enabled.</li>
-</ol>
-
-</td>
-</tr>
-</table>
+<br><br>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
new file mode 100644
index 0000000..ea036cd
--- /dev/null
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
@@ -0,0 +1,524 @@
+page.title=Launcher Icons (Archive)
+parent.title=Icon Design Guidelines
+parent.link=icon_design.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#icon5">Android 2.0</a>
+ <ol>
+ <li><a href="#style5">Style</a></li>
+ <li><a href="#size5">Size</a></li>
+ <li><a href="#materialscolors5">Materials and colors</a></li>
+ <li><a href="#effects5">Effects</a></li>
+ <li><a href="#dodonts5">Do's and don'ts</a></li>
+ <li><a href="#examples5">Example icons</a></li>
+ </ol>
+</li>
+<li><a href="#icon1">Android 1.6 and Earlier</a></li>
+</ol>
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a></li>
+</ol>
+
+</div>
+</div>
+
+<p class="warning">
+ <strong>Warning:</strong> This document describes obsolete guidelines for
+ creating launcher icons. Follow the <a href="icon_design_launcher.html">latest
+ launcher icon guidelines</a> instead.
+</p>
+
+<p>A Launcher icon is a graphic that represents your application on the device's
+Home screen and in the Launcher window.</p>
+
+<p>The user opens the Launcher by touching the icon at the bottom of the Home
+screen. The Launcher opens and exposes the icons for all of the installed
+applications. The user selects an application and opens it by touching the
+Launcher icon or by means of any hardware navigation controls available, such as
+a trackball or d-pad.</p>
+
+<p>As described in <a href="icon_design.html#icon-sets">Providing
+Density-Specific Icon Sets</a>, you should create separate icons for low-,
+medium-, and high-density screens. This ensures that your icons will display
+properly across the range of devices on which your application can be installed.
+See <a href="icon_design.html#design-tips">Tips for Designers</a> for
+suggestions on how to work with multiple sets of icons.</p>
+
+
+
+<h2 id="market">Application Icons in Android Market</h2>
+
+<p>If you are <a href="{@docRoot}guide/publishing/publishing.html">publishing
+your application on Android Market</a>, you will also need to provide a 512x512
+pixel, high-resolution application icon in the <a
+href="http://market.android.com/publish">developer console</a> at upload-time.
+This icon will be used in various locations in Android Market and does
+not replace your launcher icon.</p>
+
+<p>For tips and recommendations on creating high-resolution launcher icons that
+can easily be scaled up to 512x512, see
+<a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">
+Tips for Designers</a>.</p>
+
+<p>For information and specifications about high-resolution application
+icons in Android Market, see the following article:</p>
+
+<p style="margin-left:2em"><a
+href="http://market.android.com/support/bin/answer.py?answer=1078870">
+ Graphic Assets for your Application (Android Market Help) »</a>
+
+
+
+
+<h2 id="icon5">Android 2.0 and Later</h2>
+
+<p>Starting with Android 2.0, launcher icons should be front-facing, instead of
+at a three-quarter perspective. The following guidelines describe how to design
+launcher icons for Android 2.0 (API Level 5) and later.</p>
+
+<h3 id="style5">Style</h3>
+
+<p>The launcher icons that you create should follow the general style principles
+below. The guidelines aren't meant to restrict what you can do with your icons,
+but rather they are meant to emphasize the common approaches that your icons can
+share with others on the device. Figure 1, at right, provides examples. </p>
+
+<div class="figure">
+ <img src="{@docRoot}images/icon_design/IconGraphic_Icons_i.png"
+ width="340">
+ <p class="img-caption">
+ <strong>Figure 1.</strong> Example launcher icons for Android 2.0 and
+ greater.
+ </p>
+</div>
+
+<p>Clean and contemporary:</p>
+
+<ul>
+ <li>Launcher icons should be modern and sometimes quirky; they should not
+appear aged or ragged. You should avoid overused symbolic metaphors whenever
+possible.</li>
+</ul>
+
+<p>Simple and iconic:</p>
+<ul>
+ <li>Android Launcher icons are caricatural in nature; your icons should be
+highly simplified and exaggerated, so that they are appropriate for use at small
+sizes. Your icons should not be overly complicated. </li>
+ <li>Try featuring a single part of an application as a symbolic
+representation of the whole (for example, the Music icon features a speaker).
+</li>
+ <li>Consider using natural outlines and shapes, both geometric and organic,
+with a realistic (but never photorealistic) rendering. </li>
+ <li>Your icons <em>should not</em> present a cropped view of a larger
+image.</li>
+</ul>
+
+<p>Tactile and textured:</p>
+<ul>
+ <li>Icons should feature non-glossy, textured material. See
+ <a href="#materialscolors5">Materials and colors</a>, below, for more
+ information.</li>
+</ul>
+
+<p>Forward-facing and top-lit:</p>
+<ul>
+ <li><em>New for Android 2.0 and later platforms</em>: Android Launcher
+icons should be forward-facing, with very little perspective, and they
+should be top-lit.</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Android applies separate text labels
+using the application name when displaying launcher icons, so you should avoid
+embedding text in your icon and instead focus on designing a distinct and
+memorable icon.</p>
+
+
+
+<h3 id="size5">Size and positioning</h3>
+
+<p>Launcher icons should use a variety of shapes and forms that are scaled and
+positioned inside the asset to create consistent visual weight with other
+icons.</p>
+
+<p>Figure 2 illustrates various ways of positioning the icon inside the
+asset. You should size the icons <em>smaller than the actual bounds of the
+asset</em> to create a consistent visual weight and to allow for shadows. If
+your icon is square or nearly square, it should be scaled even smaller.</p>
+
+<p>In order to indicate the recommended size for the icon, each example in
+Figure 2 includes three different guide rectangles:</p>
+
+<ul>
+<li>The red box is the bounding box for the full asset.</li>
+<li>The blue box is the recommended bounding box for the actual icon.
+The icon box is sized smaller than the full asset box so that there is space to
+include shadows and allow for special icon treatments.</li>
+<li>The orange box is the recommended bounding box for the actual icon when
+the content is square. The box for square icons is smaller than that for other
+icons to establish a consistent visual weight across the two types.</li>
+</ul>
+
+<table>
+<tr>
+
+<td style="border:0;">
+<ol class="nolist">
+ <li>Launcher icon dimensions for high-density (<code>hdpi</code>) screens:</li>
+ <ol class="nolist">
+ <li>Full Asset: 72 x 72 px</li>
+ <li>Icon: 60 x 60 px</li>
+ <li>Square Icon: 56 x 56 px</li>
+ </ol>
+ </li>
+</ol>
+</td>
+<td style="border:0;">
+ <img src="{@docRoot}images/icon_design/launcher_size_hdpi.png" width="450">
+</td>
+</tr>
+<tr>
+<td style="border:0;">
+ <ol class="nolist">
+ <li>Launcher icon dimensions for medium-density (<code>mdpi</code>) screens:</li>
+ <ol class="nolist">
+ <li>Full Asset: 48 x 48 px</li>
+ <li>Icon: 40 x 40 px</li>
+ <li>Square Icon: 38 x 38 px</li>
+ </ol>
+ </li>
+</ol>
+</td>
+
+<td style="border:0;">
+ <img src="{@docRoot}images/icon_design/launcher_size_mdpi.png" width="450">
+</td>
+</tr>
+<tr>
+<td style="border:0;">
+ <ol class="nolist">
+ <li>Launcher icon dimensions for low-density (<code>ldpi</code>) screens:</li>
+ <ol class="nolist">
+ <li>Full Asset: 36 x 36 px</li>
+ <li>Icon: 30 x 30 px</li>
+ <li>Square Icon: 28 x 28 px</li>
+ </ol>
+ </li>
+</ol>
+</td>
+
+<td style="border:0;">
+ <img src="{@docRoot}images/icon_design/launcher_size_ldpi.png" width="450">
+</td>
+</tr>
+
+<tr>
+<td style="border:0;"></td>
+<td style="border:0;">
+ <p class="table-caption"><strong>Figure 2.</strong>
+ Launcher icon sizing and positioning inside the bounds of the
+ icon asset.</p>
+</td>
+</tr>
+
+</table>
+
+
+
+
+<h3 id="materialscolors5">Materials and colors</h3>
+
+<p>Launcher icons should make use of tactile, top-lit, textured materials. Even
+if your icon is just a simple shape, you should try to render in a way that
+makes it appear to be sculpted from some real-world material.</p>
+
+<p>Android launcher icons usually consist of a smaller shape within a
+larger base shape and combine one neutral and one primary color. Icons may
+use a combination of neutral colors but should maintain a fairly high level of
+contrast. Icons should not use more than one primary color per icon, if
+possible.</p>
+
+<p>Launcher icons should use a limited color palette that includes a range
+of neutral and primary colors. The icons should not be over-saturated.</p>
+
+<p>The recommended color palette to use for Launcher icons is shown in Figure 3.
+You can use elements of the palette for both the base color and the highlight
+color. You can use the colors of the palette in conjunction with a
+white-to-black vertical linear gradient overlay. This creates the impression
+that the icon is lit from above and keeps the color less saturated.</p>
+
+<img src="{@docRoot}images/icon_design/IconGraphic_Colors.png" width="530">
+<p class="img-caption">
+<strong>Figure 3.</strong> Recommended color palette for icons.</p>
+
+<p>When you combine the materials in Figure 4 with a color highlight from the
+recommended palette above, you can create materials combinations such as those
+shown in Figure 5. To get you started, the
+<a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#templatespack">Icon Templates Pack</a>
+includes a Photoshop file (<code>ic_launcher_template/example_materials.psd</code>)
+that provides all of the default materials, colors, and gradients. </p>
+
+<table>
+ <tbody>
+ <tr>
+ <td style="border:0;">
+<img src="{@docRoot}images/icon_design/IconGraphic_Materials.png" width="450">
+<p class="img-caption">
+<strong>Figure 4.</strong> Example materials that you can use to create
+your icons.</p>
+ </td>
+ <td style="border:0;border-left:1px solid #ccc;margin-left:1em;padding-left:1em">
+<img src="{@docRoot}images/icon_design/IconGraphic_AccentColor.png" width="450">
+<p class="img-caption">
+<strong>Figure 5.</strong> Examples of materials combined with base
+and highlight colors from the recommended palette.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+
+
+<h3 id="effects5">Effects</h3>
+
+<p>Launcher icons are flat and the perspective is straight-on, rather than at an
+angle. A drop shadow is used to create a sense of depth. Launcher icons can use
+varying textures and lighting effects, but must be lit directly from above
+(straight down).</p>
+
+<p>In order to maintain consistency, all launcher icons should use the same
+drop shadow effect, as shown in Figure 6.</p>
+
+<table class="image-caption">
+<tr>
+<td class="image-caption-i">
+ <img src="{@docRoot}images/icon_design/launcher_style.png"/>
+</td>
+<td class="image-caption-c">
+ <div class="caption grad-rule-top">
+ <p><strong>Figure 6. </strong>Style, light and effects for launcher icons.</p>
+ <div class="image-caption-nested">
+ <p><em>Note: all pixel dimensions are for medium density and should be scaled appropriately for other densities.</em></p>
+ <table>
+ <tr><td><em>1.</em></td><td nowrap>Lighting:</td><td>Top-lit, using appropriate lighting details<br><br></td></tr>
+ <tr><td><em>2.</em></td><td nowrap>Drop shadow:</td><td><code>#000000</code>, 75% opacity<br>angle 90°<br>distance 1px<br>size 3px<br><br></td></tr>
+ <tr><td><em>3.</em></td><td nowrap>Textures:</td><td>Tactile, appear to use real-world materials (monochromatic noise in example image)<br><br></td></tr>
+ </table>
+ </div>
+ </div>
+</td>
+</tr>
+</table>
+
+
+
+<h3 id="dodonts5">Do's and don'ts</h3>
+
+<p>Below are some "do and don't" examples to consider when creating icons for
+your application. </p>
+
+
+<table>
+<tr>
+<td style="border:0;width:50%">
+
+<h4>Android Launcher icons are...</h4>
+
+<ul>
+<li>Modern, minimal, matte, tactile, and textured</li>
+<li>Forward-facing and top-lit, whole, limited in color
+palette</li>
+</ul>
+</td>
+<td style="border:0;width:50%">
+
+<h4>Android Launcher icons are not...</h4>
+
+<ul>
+<li>Antique, over-complicated, glossy, flat vector</li>
+<li>Rotated, Cropped, Over-Saturated</li>
+</ul>
+</td>
+</tr>
+<tr>
+</table>
+
+<img src="{@docRoot}images/icon_design/IconGraphic_DosDonts.png"/>
+<p class="img-caption">
+<strong>Figure 7.</strong> Side-by-side examples of "do's and don'ts" for
+Android launcher icons. </p>
+
+
+
+
+
+<h3 id="examples5">Example icons</h3>
+
+<p>Shown below are examples of high-density launcher icons used by
+Android applications. The icons are provided for your reference only —
+please do not reuse these icons in your applications.</code>.</p>
+
+<img src="{@docRoot}images/icon_design/IconGraphic_Icons.png" />
+
+
+
+<h2 id="icon1">Android 1.6 and earlier</h2>
+
+<p>The following guidelines describe how to design launcher icons for Android
+1.6 (API Level 4) and earlier. Launcher icons for Android 1.6 and below are
+simplified 3D icons with a fixed perspective. The required perspective is shown
+in Figure 8.</p>
+
+<h3 id="structure1">Structure</h3>
+
+<ul>
+<li>The base of a launcher icon can face either the top view or the front
+view.</li>
+
+<li>The majority of a launcher icon’s surface should be created using the
+launcher icon <a href="#palette1">color palette</a>. To add emphasis, use
+one or more bright accent colors to highlight specific characteristics.</li>
+
+<li>All launcher icons must be created with rounded corners to make them look
+friendly and simple—as shown in Figure 8.</li>
+
+<li>All dimensions specified are based on a 250x250 pixel artboard size
+in a vector graphics editor like Adobe Illustrator, where the icon fits within
+the artboard boundaries.</li>
+
+<li><strong>Final art must be scaled down and exported as a transparent PNG file
+using a raster image editor such as Adobe Photoshop. Do not include a background
+color.</strong></li>
+
+<li>Templates for creating icons in Adobe Photoshop are available in the <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#templatespack">Icon
+Templates Pack</a>.</li>
+
+</ul>
+
+<table class="image-caption">
+<tr>
+<td class="image-caption-i">
+ <img src="{@docRoot}images/icon_design/launcher_structure.png" alt="A view of
+launcher icon corners and perspective angles" />
+</td>
+<td class="image-caption-c">
+ <div class="caption grad-rule-top">
+ <p><strong>Figure 8.</strong> Rounded corners and perspective angles for
+ launcher icons (90° is vertical).</p>
+ <div class="image-caption-nested">
+ <table>
+ <tr><td><em>1.</em></td><td>92°</td></tr>
+ <tr><td><em>2.</em></td><td>92°</td></tr>
+ <tr><td><em>3.</em></td><td>173°</td></tr>
+ <tr><td><em>4.</em></td><td>171°</td></tr>
+ <tr><td><em>5.</em></td><td>49°</td></tr>
+ <tr><td><em>6.</em></td><td>171°</td></tr>
+ <tr><td><em>7.</em></td><td>64°</td></tr>
+ <tr><td><em>8.</em></td><td>97°</td></tr>
+ <tr><td><em>9.</em></td><td>75°</td></tr>
+ <tr><td><em>10.</em></td><td>93°</td></tr>
+ <tr><td><em>11.</em></td><td>169°</td></tr>
+ </table>
+ </div>
+ </div>
+</td>
+</tr>
+</table>
+
+<h3 id="style1">Light, effects, and shadows</h3>
+
+<p>Launcher icons are simplified 3D icons using light and shadows for
+definition. A light source is placed slightly to the left in front of the icon,
+and therefore the shadow expands to the right and back.</p>
+
+<table class="image-caption">
+<tr>
+<td class="image-caption-i">
+ <img src="{@docRoot}images/icon_design/launcher_light.png" alt="A view of
+light, effects, and shadows for launcher icons."/>
+</td>
+<td class="image-caption-c">
+ <div class="caption grad-rule-top">
+ <p><strong>Figure 9. </strong>Light, effects, and shadows for launcher icons.</p>
+ <div class="image-caption-nested">
+ <table>
+ <tr><td><em>1.</em></td><td>Edge highlight:</td><td>white</td></tr>
+ <tr><td><em>2.</em></td><td>Icon shadow:</td><td>black | 20px blur<br>50% opacity | angle 67°</td></tr>
+ <tr><td><em>3.</em></td><td>Front part:</td><td>Use light gradient from color palette</td></tr>
+ <tr><td><em>4.</em></td><td>Detail shadow:</td><td>black | 10px blur<br>75% opacity</td></tr>
+ <tr><td><em>5.</em></td><td> Side part:</td><td>Use medium gradient from color palette</td></tr>
+ </table>
+ </div>
+ </div>
+</td>
+</tr>
+</table>
+
+<table>
+<tr>
+<td style="border:0">
+
+<h4 id="palette1">Launcher icon color palette</h4>
+
+<table>
+<tr>
+<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_white.png"/></td>
+<td class="image-caption-c">White<br>r 255 | g 255 | b 255<br>Used for highlights on edges.</td>
+</tr>
+
+<tr>
+<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_gradient_light.png"/></td>
+<td class="image-caption-c">Light gradient<br><em>1: </em>r 0 | g 0 | b 0<br><em>2: </em>r 217 | g 217 | b 217<br>Used on the front (lit) part of the icon.</td>
+</tr>
+
+<tr>
+<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_gradient_medium.png"/></td>
+<td class="image-caption-c">Medium gradient<br><em>1: </em>r 190 | g 190 | b 190<br><em>2: </em>r 115 | g 115 | b 115<br>Used on the side (shaded) part of the icon.</td>
+</tr>
+
+<tr>
+<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_gradient_dark.png"/></td>
+<td class="image-caption-c">Dark gradient<br><em>1: </em>r 100 | g 100 | b 100<br><em>2: </em>r 25 | g 25 | b 25<br>Used on details and parts in the shade of the icon.</td>
+</tr>
+
+<tr>
+<td class="image-caption-i"><img src="{@docRoot}images/icon_design/launcher_palette_black.png"/></td>
+<td class="image-caption-c">Black<br>r 0 | g 0 | b 0<br>Used as base color in shadows.</td>
+</tr>
+
+</table>
+
+</td>
+
+<td style="border:0">
+
+<h4 id="steps1">Step by step</h4>
+
+<ol>
+ <li>Create the basic shapes with a tool like Adobe Illustrator, using the
+angles described in <a href="#structure1">Launcher icon: structure</a>.
+The shapes and effects must fit within a 250x250 pixel artboard.</li>
+ <li>Add depth to shapes by extruding them and create the rounded corners as
+described for the launcher icon structure.</li>
+ <li>Add details and colors. Gradients should be treated as if there is a light
+source placed slightly to the left in front of the icon.</li>
+ <li>Create the shadows with the correct angle and blur effect.</li>
+ <li>Import the icon into a tool like Adobe Photoshop and scale to fit an image
+size of 48x48 px on a transparent background.</li>
+ <li>Export the icon at 48x48 as a PNG file with transparency enabled.</li>
+</ol>
+
+</td>
+</tr>
+</table>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
index 2029def..974e48f 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
@@ -9,7 +9,8 @@
<h2>In this document</h2>
<ol>
-<li><a href="#icon9">Android 2.3 and Later</a>
+<li><a href="#icon11">Android 3.0 and Later</a>
+<li><a href="#icon9">Android 2.3</a>
<ol>
<li><a href="#size9">Size</a></li>
<li><a href="#style9">Style, colors, and effects</a></li>
@@ -37,11 +38,13 @@
in greyscale. Elements in a menu icon must not be visualized in 3D or
perspective.</p>
-<p>As described in <a href="icon_design.html#icon-sets">Providing
-Density-Specific Icon Sets</a>, you should create separate icon sets for low-,
-medium-, and high-density screens. This ensures that your icons will display
-properly across the range of devices on which your application can be installed.
-See <a href="icon_design.html#design-tips">Tips for Designers</a>
+<p>As described in <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#icon-sets">Providing Density-Specific
+Icon Sets</a> and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>, you should create separate icons for all generalized screen densities, including low-,
+medium-, high-, and extra-high-density screens. This ensures that your icons will display properly
+across the range of devices on which your application can be installed. See <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">Tips for Designers</a>
for suggestions on how to work with multiple sets of icons.</p>
<p><strong>Final art must be exported as a transparent PNG file. Do not include
@@ -52,6 +55,16 @@
Templates Pack</a>.</p>
+<h2 id="icon11">Android 3.0 and Later</h2>
+
+<p>As of Android 3.0, the options menu has been superseded by the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>. Please refer to the <a
+href="icon_design_action_bar.html">Action Bar Icon Design Guidelines</a> for recommendations on
+creating icons for action items.</p>
+
+
+<h2 id="icon9">Android 2.3</h2>
+
<p class="caution"><strong>Caution:</strong> The style and content sizing of
menu icons have changed in Android 2.3 compared to
<a href="#icon1">previous versions</a>:
@@ -67,12 +80,8 @@
</p>
-
-
-<h2 id="icon9">Android 2.3 and Later</h2>
-
<p>The following guidelines describe how to design menu icons for Android
-2.3 (API Level 9) and later.</p>
+2.3 (API Levels 9 and 10).</p>
<h3 id="size9">Size and positioning</h3>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
index 1fc3528..b8e07b5 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
@@ -9,11 +9,20 @@
<h2>In this document</h2>
<ol>
-<li><a href="#icon9">Android 2.3 and Later</a>
+<li><a href="#icon11">Android 3.0 and Later</a>
+ <ol>
+ <li><a href="#overview11">Overview of changes</a></li>
+ <li><a href="#size11">Size and format</a></li>
+ <li><a href="#style11">Style, colors, and effects</a></li>
+ <li><a href="#dimming11">Automatic dimming</a></li>
+ <li><a href="#examples11">Example icons</a></li>
+ </ol>
+</li>
+<li><a href="#icon9">Android 2.3</a>
<ol>
<li><a href="#size9">Size</a></li>
<li><a href="#style9">Style, color, and effects</a></li>
- <li><a href="#dodonts9">Do's and don'ts</a></li>
+ <li><a href="#dosdonts9">Do's and don'ts</a></li>
<li><a href="#examples9">Example icons</a></li>
</ol>
</li>
@@ -35,54 +44,217 @@
<p>Status bar icons are used to represent notifications from your application in
the status bar.</p>
-<p>As described in <a href="icon_design.html#icon-sets">Providing
-Density-Specific Icon Sets</a>, you should create separate icon sets for low-,
-medium-, and high-density screens. This ensures that your icons will display
-properly across the range of devices on which your application can be installed.
-See <a href="icon_design.html#design-tips">Tips for Designers</a> for
-suggestions on how to work with multiple sets of icons.</p>
-
-<p><strong>Final art must be exported as a transparent PNG file. Do not include
-a background color</strong>.</p>
+<p>As described in <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#icon-sets">Providing Density-Specific
+Icon Sets</a> and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>, you should create separate icons for all generalized screen densities, including low-,
+medium-, high-, and extra-high-density screens. This ensures that your icons will display properly
+across the range of devices on which your application can be installed. See <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#design-tips">Tips for Designers</a>
+for suggestions on how to work with multiple sets of icons.</p>
<p>Templates for creating icons in Adobe Photoshop are available in the <a
href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#templatespack">Icon
Templates Pack</a>.</p>
-<p class="warning"><strong>Warning:</strong>
+<div class="warning">
-The style and dimensions of status bar icons have changed drastically in
-Android 2.3 compared to <a href="#icon1">previous versions</a>. <strong>To
-provide support for all Android versions</strong>, developers should:
-<br>
-1. Place status bar icons for Android 2.3 and higher in the
-<code>drawable-hdpi-v9</code>, <code>drawable-mdpi-v9</code>, and <code>drawable-ldpi-v9</code> directories.
-<br>
-2. Place status bar icons for previous versions in
-<code>drawable-hdpi</code>, <code>drawable-mdpi</code>, and <code>drawable-ldpi</code> directories.
+<p><strong>Warning:</strong>The style and dimensions of status bar icons have changed dramatically
+in Android 3.0 and 2.3 compared to <a href="#icon1">previous versions</a>. <strong>To
+provide support for all Android versions</strong>, developers should:</p>
+<ol>
+<li>Place status bar icons for Android 3.0 and later in the
+ <code>drawable-xhdpi-v11</code>, <code>drawable-hdpi-v11</code>,<code>drawable-mdpi-v11</code>,
+ and <code>drawable-ldpi-v11</code> directories.</li>
+<li>Place status bar icons for Android 2.3 in the
+ <code>drawable-xhdpi-v9</code>, <code>drawable-hdpi-v9</code>, <code>drawable-mdpi-v9</code>,
+ and <code>drawable-ldpi-v9</code> directories.</li>
+<li>Place status bar icons for previous versions in
+ <code>drawable-xhdpi</code>, <code>drawable-hdpi</code>, <code>drawable-mdpi</code>,
+ and <code>drawable-ldpi</code> directories.</li>
+</ol>
+
+</div>
+
+
+
+
+<h2 id="icon11">Android 3.0 and Later</h2>
+
+<p>The following guidelines describe how to design status bar icons for Android
+3.0 (API Level 11) and later.</p>
+
+
+<h3 id="overview11">Overview of changes</h3>
+
+<p>The design for status bar (notification) icons has been revised in Android 3.0. Status bar icons
+ used in Android 3.0 and later are easier to create, and they allow for more flexible presentation
+ in a variety of situations:</p>
+
+<ul>
+ <li>Status bar icons are composed simply of <strong>white pixels on a transparent
+ backdrop</strong>, with alpha blending used for smooth edges and internal texture where
+ appropriate.</li>
+ <li>Icons are square icon contents should <strong>fill the available space</strong>, although a
+ small amount of internal padding can help maintain balance across status bar icons. See
+ <a href="#size11">Size and format</a> below for details.</li>
+</ul>
+
+<p>These larger and brighter icons, while highly legible, are too intense for use on dark phone
+status bars. These icons would be too distracting if used directly in the status bar. Therefore:
+</p>
+
+<ul>
+ <li><strong>The system automatically resizes and dims</strong> these icons in such situations and
+ developers do not need to supply a separate icon for this purpose. See
+ <a href="#dimming11">Automatic dimming</a> below for more on this behavior.</li>
+</ul>
+
+
+<h3 id="size11">Size and format</h2>
+
+<p>Status bar icons should be 32-bit PNGs with an alpha channel for transparency. The finished
+status bar icon dimensions corresponding to a given generalized screen density are shown in the
+table below.</p>
+
+<p class="note"><strong>Note:</strong> The system will shrink and dim status bar icons to minimize
+distractions, allowing users to focus on the foreground activity.</p>
+
+
+<p class="table-caption" id="screens_table"><strong>Table 1.</strong> Summary of
+finished icon dimensions for each generalized screen density.</p>
+
+<table>
+ <tbody>
+ <tr>
+ <th></th>
+ <th>
+ <code>ldpi</code> (120 dpi)<br>
+ <small style="font-weight: normal">(Low density screen)</small>
+ </th>
+ <th>
+ <code>mdpi</code> (160 dpi)<br>
+ <small style="font-weight: normal">(Medium density screen)</small>
+ </th>
+ <th>
+ <code>hdpi</code> (240 dpi)<br>
+ <small style="font-weight: normal">(High density screen)</small>
+ </th>
+ <th>
+ <code>xhdpi</code> (320 dpi)<br>
+ <small style="font-weight: normal">(Extra-high density screen)</small>
+ </th>
+ </tr>
+ <tr>
+ <th style="background-color:#f3f3f3;font-weight:normal">
+ Status Bar Icon Size<br><small>(Android 3.0 and Later)</small>
+ </th>
+ <td>
+ 18 x 18 px
+ </td>
+ <td>
+ 24 x 24 px
+ </td>
+ <td>
+ 36 x 36 px
+ </td>
+ <td>
+ 48 x 48 px
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>You can also include a few pixels of padding in status bar icons to maintain a
+consistent visual weight with adjacent icons. For example, a 48 x 48 pixel <code>xhdpi</code>
+status bar icon can contain a 44 x 44 pixel shape with 2 pixels on each side for padding.</p>
+
+
+<h3 id="style11">Style, colors, and effects</h3>
+
+<p>Status bar icons are flat, pictured face on, and must be white on a transparent background.</p>
+
+<p>In order to maintain consistency across all status bar notifications, status bar icons should
+use the styling shown in Figure 1.</p>
+
+
+
+<table class="image-caption">
+<tr>
+<td class="image-caption-i">
+ <img src="{@docRoot}images/icon_design/status_bar_honeycomb_style.png"
+ alt="A view of effects for status bar icons.">
+</td>
+<td class="image-caption-c">
+ <div class="caption grad-rule-top">
+ <p><strong>Figure 1. </strong>Style for status bar icons.</p>
+ <div class="image-caption-nested">
+ <table>
+ <tr><td><em>1.</em></td><td nowrap>Fill color:</td><td><code>#ffffff</code><br><br></td></tr>
+ <tr><td><em>2.</em></td><td nowrap>Inner content:</td><td>Inner content should subtract from
+ the outer shape and consist purely of transparent pixels.</td></tr>
+ </table>
+ </div>
+ </div>
+</td>
+</tr>
+</table>
+
+
+<h3 id="dimming11">Automatic dimming</h3>
+
+<p>The system may dim and shrink status bar icons to allow users to focus on the foreground
+activity. For example, in Android 4.0, the platform-standard status bar for handset-size devices
+reduces icons to 18 x 18 dip and 40% opacity in the status bar, while drawing them full-size and at
+full intensity in the expanded notification panel. An example of what this looks like is shown below
+in Figure 2.</p>
+
+
+<img src="{@docRoot}images/icon_design/status_bar_honeycomb_dimming.png"
+ alt="Automatic shrinking and dimming behavior in Android 3.0 and later">
+<p class="img-caption">
+ <strong>Figure 2.</strong> Automatic shrinking and dimming behavior in Android 3.0 and later.
</p>
+<h3 id="examples11">Example icons</h3>
-<h2 id="icon9">Android 2.3 and Later</h2>
+<p>Shown below are example extra-high-density status bar icons that are used throughout Android
+system applications.</p>
+
+<p class="warning"><strong>Warning:</strong> Because resources can change between platform versions,
+you should not reference built-in icons using the Android platform resource IDs (i.e. status bar
+icons under <code>android.R.drawable</code>). If you want to use any icons or other internal
+drawable resources, you should store a local copy of those icons or drawables in your application
+resources, then reference the local copy from your application code. In that way, you can maintain
+control over the appearance of your icons, even if the system's copy changes. Note that the grid
+below is not intended to be complete.</p>
+
+<img src="{@docRoot}images/icon_design/status_bar_honeycomb_examples.png" />
+
+
+
+
+
+<h2 id="icon9">Android 2.3</h2>
<p>The following guidelines describe how to design status bar icons for Android
-2.3 (API Level 9) and later.</p>
+2.3 (API Levels 9 and 10).</p>
<h3 id="size9">Size and positioning</h3>
<p>Status bar icons should use simple shapes and forms and those must be
scaled and positioned inside the final asset.</p>
-<p>Figure 1 illustrates various ways of positioning the icon inside the
+<p>Figure 3 illustrates various ways of positioning the icon inside the
asset. You should size the icons <em>smaller than the actual bounds of the
asset</em>. <strong>Status bar icons may vary in width, but only
minimally.</strong></p>
<p>In order to indicate the recommended size for the icon, each example in
-Figure 1 includes two different guide rectangles:</p>
+Figure 3 includes two different guide rectangles:</p>
<ul>
<li>The red box is the bounding box for the full asset.</li>
@@ -144,7 +316,7 @@
<tr>
<td style="border:0;"></td>
<td style="border:0;">
- <p class="table-caption"><strong>Figure 1.</strong>
+ <p class="table-caption"><strong>Figure 3.</strong>
Status bar icon sizing and positioning inside the bounds of the
icon asset.</p>
</td>
@@ -167,7 +339,7 @@
</td>
<td class="image-caption-c">
<div class="caption grad-rule-top">
- <p><strong>Figure 2. </strong>Style and effects for status icons.</p>
+ <p><strong>Figure 4. </strong>Style and effects for status icons.</p>
<div class="image-caption-nested">
<p><em>Note: all pixel dimensions are for medium density and should be scaled appropriately for other densities.</em></p>
<table>
@@ -223,7 +395,7 @@
<ul>
<li>Rounded corners must always be applied to the base shape and to the details
-of a status bar icon shown Figure 3.</li>
+of a status bar icon shown Figure 5.</li>
<li>All dimensions specified are based on a 25x25 pixel artboard size with a 2
pixel safeframe.</li>
@@ -245,7 +417,7 @@
</td>
<td class="image-caption-c">
<div class="caption grad-rule-top">
- <p><strong>Figure 3. </strong>Safeframe and corner-rounding for status bar
+ <p><strong>Figure 5. </strong>Safeframe and corner-rounding for status bar
icons. Icon size is 25x25.</p>
</div>
</td>
@@ -265,7 +437,7 @@
</td>
<td class="image-caption-c">
<div class="caption grad-rule-top">
- <p><strong>Figure 4. </strong>Light, effects, and shadows for status bar icons.</p>
+ <p><strong>Figure 6. </strong>Light, effects, and shadows for status bar icons.</p>
<div class="image-caption-nested">
<table>
<tr><td><em>1.</em></td><td>Front part:</td><td>Use fill gradient from primary color palette</td></tr>
@@ -320,8 +492,8 @@
<li>In a tool like Adobe Photoshop, create the base shape within a 25x25 px
image on a transparent background. Mind the safeframe, and keep the upper and
lower 2 pixels free.</li>
-<li>Add rounded corners as specified in Figure 3.</li>
-<li>Add light, effects, and shadows as specified in Figure 4.</li>
+<li>Add rounded corners as specified in Figure 5.</li>
+<li>Add light, effects, and shadows as specified in Figure 6.</li>
<li>Export the icon at 25x25 as a PNG file with transparency enabled.</li>
</ol>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
index 1f96c3e..271bd85 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
@@ -10,7 +10,7 @@
<ol>
<li><a href="#tabstates">Providing Icons for Two Tab States</a>
-<li><a href="#icon5">Android 2.0 and Later</a>
+<li><a href="#icon5">Android 2.0 through Android 2.3</a>
<ol>
<li><a href="#size5">Size</a></li>
<li><a href="#style5">Style, colors, and effects</a></li>
@@ -125,10 +125,10 @@
-<h2 id="icon5">Android 2.0 and Later</h2>
+<h2 id="icon5">Android 2.0 through Android 2.3</h2>
<p>The following guidelines describe how to design tab icons for Android
-2.0 (API Level 5) and later.</p>
+2.0 through Android 2.3 (API Levels 5 through 10).</p>
<h3 id="size5">Size and positioning</h3>
diff --git a/docs/html/guide/practices/ui_guidelines/index.jd b/docs/html/guide/practices/ui_guidelines/index.jd
index cb34d2e..0e42788 100644
--- a/docs/html/guide/practices/ui_guidelines/index.jd
+++ b/docs/html/guide/practices/ui_guidelines/index.jd
@@ -12,8 +12,8 @@
<dl>
<dt><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Icon
Design Guidelines</a> and <a
-href="{@docRoot}shareables/icon_templates-v2.3.zip">Android Icon Templates Pack
-» </a></dt>
+href="{@docRoot}shareables/icon_templates-v4.0.zip">Android Icon Templates Pack
+» </a> <span class="new">updated</span></dt>
<dd>Your applications need a wide variety of icons, from a launcher icon to
icons in menus, dialogs, tabs, the status bar, and lists. The Icon Guidelines
describe each kind of icon in detail, with specifications for the size, color,
@@ -22,7 +22,7 @@
filters that make it much simpler to create conforming icons.</dd>
</dl>
<dl>
- <dt><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">Widget Design Guidelines</a> </dt>
+ <dt><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">Widget Design Guidelines</a> <span class="new">updated</span></dt>
<dd>A widget displays an application's most important or timely information
at a glance, on a user's Home screen. These design guidelines describe how to
design widgets that fit with others on the Home screen. They include links to
diff --git a/docs/html/guide/practices/ui_guidelines/menu_design.jd b/docs/html/guide/practices/ui_guidelines/menu_design.jd
index 7751a7b..3edf33f 100644
--- a/docs/html/guide/practices/ui_guidelines/menu_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/menu_design.jd
@@ -260,8 +260,8 @@
<img src={@docRoot}images/menu_design/TaskFlowDiagram.png>
<p>
- For more technical information on menus, see
- <a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a>.
+ For more technical information on menus, see the
+ <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> developer guide.
</p>
<h3 id="commands_fixed">Commands Fixed in an Activity Screen</h4>
diff --git a/docs/html/guide/practices/ui_guidelines/widget_design.jd b/docs/html/guide/practices/ui_guidelines/widget_design.jd
index f111394..de20e00 100644
--- a/docs/html/guide/practices/ui_guidelines/widget_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/widget_design.jd
@@ -1,4 +1,4 @@
-page.title=Widget Design Guidelines
+page.title=App Widget Design Guidelines
parent.title=UI Guidelines
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/publishing/app-signing.jd b/docs/html/guide/publishing/app-signing.jd
index df240e2..193c0fd 100644
--- a/docs/html/guide/publishing/app-signing.jd
+++ b/docs/html/guide/publishing/app-signing.jd
@@ -434,13 +434,13 @@
<p>However, the Ant build script can also perform the signing
and aligning for you, if you have provided the path to your keystore and the name of
-your key alias in the project's {@code build.properties} file. With this information provided,
+your key alias in the project's {@code ant.properties} file. With this information provided,
the build script will prompt you for your keystore and alias password when you perform
<code>ant release</code>, it will sign the package and then align it. The final output
file in {@code bin/} will instead be
<code><em><your_project_name></em>-release.apk</code>. With these steps
automated for you, you're able to skip the manual procedures below (steps 3 and 4).
-To learn how to specify your keystore and alias in the {@code build.properties} file,
+To learn how to specify your keystore and alias in the {@code ant.properties} file,
see <a href="{@docRoot}guide/developing/building/building-cmdline.html#ReleaseMode">
Building and Running Apps on the Command Line</a>.</p>
diff --git a/docs/html/guide/publishing/licensing.jd b/docs/html/guide/publishing/licensing.jd
index d89a8ca..fc0de9d 100644
--- a/docs/html/guide/publishing/licensing.jd
+++ b/docs/html/guide/publishing/licensing.jd
@@ -662,7 +662,7 @@
</ol>
<p> When created, the project is
-predefined as a library project in its <code>default.properties</code> file, so
+predefined as a library project in its <code>project.properties</code> file, so
no further configuration is needed. </p>
<p>For more information about how to create an application project or work with
@@ -712,7 +712,7 @@
<p>If you are developing using the SDK command-line tools, navigate to the
directory containing your application project and open the
-<code>default.properties</code> file. Add a line to the file that specifies the
+<code>project.properties</code> file. Add a line to the file that specifies the
<code>android.library.reference.<n></code> key and the path to the
library. For example: </p>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index 22283cd..20ce701 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -297,8 +297,7 @@
<p>Creating the App Widget layout is simple if you're
familiar with <a
-href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout in
-XML</a>.
+href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a>.
However, you must be aware that App Widget layouts are based on {@link
android.widget.RemoteViews},
which do not support every kind of layout or view widget.</p>
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
index 5bcef6d..d34a798 100644
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -631,8 +631,9 @@
handle the selected item, then the event is passed to the fragment's callback. This is true for
the Options Menu and context menus.</p>
-<p>For more information about menus, see <a href="{@docRoot}guide/topics/ui/menus.html">Creating
-Menus</a> and <a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a>.</p>
+<p>For more information about menus, see the <a
+href="{@docRoot}guide/topics/ui/menus.html">Menus</a> and <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guides.</p>
diff --git a/docs/html/guide/topics/graphics/2d-graphics.jd b/docs/html/guide/topics/graphics/2d-graphics.jd
index 618cdf8..ac2b47c 100644
--- a/docs/html/guide/topics/graphics/2d-graphics.jd
+++ b/docs/html/guide/topics/graphics/2d-graphics.jd
@@ -1,296 +1,484 @@
-page.title=2D Graphics
+page.title=Canvas and Drawables
parent.title=Graphics
parent.link=index.html
@jd:body
-
<div id="qv-wrapper">
<div id="qv">
- <h2>In this document</h2>
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#draw-with-canvas">Draw with a Canvas</a>
<ol>
- <li><a href="#drawables">Drawables</a>
+ <li><a href="#on-view">On a View</a></li>
+ <li><a href="#on-surfaceview">On a SurfaceView</a></li>
+ </ol>
+ </li>
+ <li><a href="#drawables">Drawables</a>
<ol>
<li><a href="#drawables-from-images">Creating from resource images</a></li>
<li><a href="#drawables-from-xml">Creating from resource XML</a></li>
</ol>
- </li>
- <li><a href="#shape-drawable">Shape Drawable</a></li>
- <!-- <li><a href="#state-list">StateListDrawable</a></li> -->
- <li><a href="#nine-patch">Nine-patch</a></li>
- </ol>
+ </li>
+ <li><a href="#shape-drawable">Shape Drawable</a></li>
+ <li><a href="#nine-patch">Nine-patch</a></li>
+ </ol>
+
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL with the Framework
+APIs</a></li>
+ <li><a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a></li>
+ </ol>
</div>
</div>
-<p>Android offers a custom 2D graphics library for drawing and animating shapes and images.
-The {@link android.graphics.drawable} and {@link android.view.animation}
-packages are where you'll find the common classes used for drawing and animating in two-dimensions.
+<p>The Android framework APIs provides a set 2D drawing APIs that allow you to render your own
+custom graphics onto a canvas or to modify existing Views to customize their look and feel.
+When drawing 2D graphics, you'll typically do so in one of two ways:</p>
+
+<ol type="a">
+ <li>Draw your graphics or animations into a View object from your layout. In this manner,
+ the drawing of your graphics is handled by the system's
+ normal View hierarchy drawing process — you simply define the graphics to go inside the View.</li>
+ <li>Draw your graphics directly to a Canvas. This way, you personally call the appropriate class's
+ {@link android.view.View#onDraw onDraw()} method (passing it your Canvas), or one of the Canvas
+<code>draw...()</code> methods (like
+ <code>{@link android.graphics.Canvas#drawPicture(Picture,Rect) drawPicture()}</code>). In doing so, you are also in
+ control of any animation.</li>
+</ol>
+
+<p>Option "a," drawing to a View, is your best choice when you want to draw simple graphics that do not
+need to change dynamically and are not part of a performance-intensive game. For example, you should
+draw your graphics into a View when you want to display a static graphic or predefined animation, within
+an otherwise static application. Read <a href="#drawables">Drawables</a> for more information.</li>
</p>
-<p>This document offers an introduction to drawing graphics in your Android application.
-We'll discuss the basics of using Drawable objects to draw
-graphics, how to use a couple subclasses of the Drawable class, and how to
-create animations that either tween (move, stretch, rotate) a single graphic
-or animate a series of graphics (like a roll of film).</p>
+<p>Option "b," drawing to a Canvas, is better when your application needs to regularly re-draw itself.
+Applications such as video games should be drawing to the Canvas on its own. However, there's more than
+one way to do this:</p>
+<ul>
+ <li>In the same thread as your UI Activity, wherein you create a custom View component in
+ your layout, call <code>{@link android.view.View#invalidate()}</code> and then handle the
+ <code>{@link android.view.View#onDraw(Canvas) onDraw()}</code> callback.</li>
+ <li>Or, in a separate thread, wherein you manage a {@link android.view.SurfaceView} and
+ perform draws to the Canvas as fast as your thread is capable
+ (you do not need to request <code>invalidate()</code>).</li>
+</ul>
+
+<h2 id="draw-with-canvas">Draw with a Canvas</h2>
+
+<p>When you're writing an application in which you would like to perform specialized drawing
+and/or control the animation of graphics,
+you should do so by drawing through a {@link android.graphics.Canvas}. A Canvas works for you as
+a pretense, or interface, to the actual surface upon which your graphics will be drawn — it
+holds all of your "draw" calls. Via the Canvas, your drawing is actually performed upon an
+underlying {@link android.graphics.Bitmap}, which is placed into the window.</p>
+
+<p>In the event that you're drawing within the <code>{@link android.view.View#onDraw(Canvas) onDraw()}</code>
+callback method, the Canvas is provided for you and you need only place your drawing calls upon it.
+You can also acquire a Canvas from <code>{@link android.view.SurfaceHolder#lockCanvas() SurfaceHolder.lockCanvas()}</code>,
+when dealing with a SurfaceView object. (Both of these scenarios are discussed in the following sections.)
+However, if you need to create a new Canvas, then you must define the {@link android.graphics.Bitmap}
+upon which drawing will actually be performed. The Bitmap is always required for a Canvas. You can set up
+a new Canvas like this:</p>
+<pre>
+Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
+Canvas c = new Canvas(b);
+</pre>
+
+<p>Now your Canvas will draw onto the defined Bitmap. After drawing upon it with the Canvas, you can then carry your
+Bitmap to another Canvas with one of the <code>{@link android.graphics.Canvas#drawBitmap(Bitmap,Matrix,Paint)
+Canvas.drawBitmap(Bitmap,...)}</code> methods. It's recommended that you ultimately draw your final
+graphics through a Canvas offered to you
+by <code>{@link android.view.View#onDraw(Canvas) View.onDraw()}</code> or
+<code>{@link android.view.SurfaceHolder#lockCanvas() SurfaceHolder.lockCanvas()}</code> (see the following sections).</p>
+
+<p>The {@link android.graphics.Canvas} class has its own set of drawing methods that you can use,
+like <code>drawBitmap(...)</code>, <code>drawRect(...)</code>, <code>drawText(...)</code>, and many more.
+Other classes that you might use also have <code>draw()</code> methods. For example, you'll probably
+have some {@link android.graphics.drawable.Drawable} objects that you want to put on the Canvas. Drawable
+has its own <code>{@link android.graphics.drawable.Drawable#draw(Canvas) draw()}</code> method
+that takes your Canvas as an argument.</p>
+
+
+<h3 id="on-view">On a View</h3>
+
+<p>If your application does not require a significant amount of processing or
+frame-rate speed (perhaps for a chess game, a snake game,
+or another slowly-animated application), then you should consider creating a custom View component
+and drawing with a Canvas in <code>{@link android.view.View#onDraw(Canvas) View.onDraw()}</code>.
+The most convenient aspect of doing so is that the Android framework will
+provide you with a pre-defined Canvas to which you will place your drawing calls.</p>
+
+<p>To start, extend the {@link android.view.View} class (or descendant thereof) and define
+the <code>{@link android.view.View#onDraw(Canvas) onDraw()}</code> callback method. This method will be called by the Android
+framework to request that your View draw itself. This is where you will perform all your calls
+to draw through the {@link android.graphics.Canvas}, which is passed to you through the <code>onDraw()</code> callback.</p>
+
+<p>The Android framework will only call <code>onDraw()</code> as necessary. Each time that
+your application is prepared to be drawn, you must request your View be invalidated by calling
+<code>{@link android.view.View#invalidate()}</code>. This indicates that you'd like your View to be drawn and
+Android will then call your <code>onDraw()</code> method (though is not guaranteed that the callback will
+be instantaneous). </p>
+
+<p>Inside your View component's <code>onDraw()</code>, use the Canvas given to you for all your drawing,
+using various <code>Canvas.draw...()</code> methods, or other class <code>draw()</code> methods that
+take your Canvas as an argument. Once your <code>onDraw()</code> is complete, the Android framework will
+use your Canvas to draw a Bitmap handled by the system.</p>
+
+<p class="note"><strong>Note: </strong> In order to request an invalidate from a thread other than your main
+Activity's thread, you must call <code>{@link android.view.View#postInvalidate()}</code>.</p>
+
+<p>Also read <a href="{@docRoot}guide/topics/ui/custom-components.html">Building Custom Components</a>
+for a guide to extending a View class, and <a href="2d-graphics.html">2D Graphics: Drawables</a> for
+information on using Drawable objects like images from your resources and other primitive shapes.</p>
+
+<p>For a sample application, see the Snake game, in the SDK samples folder:
+<code><your-sdk-directory>/samples/Snake/</code>.</p>
+
+<h3 id="on-surfaceview">On a SurfaceView</h3>
+
+<p>The {@link android.view.SurfaceView} is a special subclass of View that offers a dedicated
+drawing surface within the View hierarchy. The aim is to offer this drawing surface to
+an application's secondary thread, so that the application isn't required
+to wait until the system's View hierarchy is ready to draw. Instead, a secondary thread
+that has reference to a SurfaceView can draw to its own Canvas at its own pace.</p>
+
+<p>To begin, you need to create a new class that extends {@link android.view.SurfaceView}. The class should also
+implement {@link android.view.SurfaceHolder.Callback}. This subclass is an interface that will notify you
+with information about the underlying {@link android.view.Surface}, such as when it is created, changed, or destroyed.
+These events are important so that you know when you can start drawing, whether you need
+to make adjustments based on new surface properties, and when to stop drawing and potentially
+kill some tasks. Inside your SurfaceView class is also a good place to define your secondary Thread class, which will
+perform all the drawing procedures to your Canvas.</p>
+
+<p>Instead of handling the Surface object directly, you should handle it via
+a {@link android.view.SurfaceHolder}. So, when your SurfaceView is initialized, get the SurfaceHolder by calling
+<code>{@link android.view.SurfaceView#getHolder()}</code>. You should then notify the SurfaceHolder that you'd
+like to receive SurfaceHolder callbacks (from {@link android.view.SurfaceHolder.Callback}) by calling
+{@link android.view.SurfaceHolder#addCallback(SurfaceHolder.Callback) addCallback()}
+(pass it <var>this</var>). Then override each of the
+{@link android.view.SurfaceHolder.Callback} methods inside your SurfaceView class.</p>
+
+<p>In order to draw to the Surface Canvas from within your second thread, you must pass the thread your SurfaceHandler
+and retrieve the Canvas with <code>{@link android.view.SurfaceHolder#lockCanvas() lockCanvas()}</code>.
+You can now take the Canvas given to you by the SurfaceHolder and do your necessary drawing upon it.
+Once you're done drawing with the Canvas, call
+<code>{@link android.view.SurfaceHolder#unlockCanvasAndPost(Canvas) unlockCanvasAndPost()}</code>, passing it
+your Canvas object. The Surface will now draw the Canvas as you left it. Perform this sequence of locking and
+unlocking the canvas each time you want to redraw.</p>
+
+<p class="note"><strong>Note:</strong> On each pass you retrieve the Canvas from the SurfaceHolder,
+the previous state of the Canvas will be retained. In order to properly animate your graphics, you must re-paint the
+entire surface. For example, you can clear the previous state of the Canvas by filling in a color
+with <code>{@link android.graphics.Canvas#drawColor(int) drawColor()}</code> or setting a background image
+with <code>{@link android.graphics.Canvas#drawBitmap(Bitmap,Rect,RectF,Paint) drawBitmap()}</code>. Otherwise,
+you will see traces of the drawings you previously performed.</p>
+
+
+<p>For a sample application, see the Lunar Lander game, in the SDK samples folder:
+<code><your-sdk-directory>/samples/LunarLander/</code>. Or,
+browse the source in the <a href="{@docRoot}guide/samples/index.html">Sample Code</a> section.</p>
<h2 id="drawables">Drawables</h2>
+<p>Android offers a custom 2D graphics library for drawing shapes and images.
+ The {@link android.graphics.drawable} package is where you'll find the common classes used for
+ drawing in two-dimensions.</p>
-<p>A {@link android.graphics.drawable.Drawable} is a general abstraction for "something that can be drawn."
-You'll discover that the Drawable class extends to define a variety of specific kinds of drawable graphics,
-including {@link android.graphics.drawable.BitmapDrawable}, {@link android.graphics.drawable.ShapeDrawable},
-{@link android.graphics.drawable.PictureDrawable}, {@link android.graphics.drawable.LayerDrawable}, and several more.
-Of course, you can also extend these to define your own custom Drawable objects that behave in unique ways.</p>
+<p>This document discusses the basics of using Drawable objects to draw graphics and how to use a
+couple subclasses of the Drawable class. For information on using Drawables to do frame-by-frame
+animation, see <a href="{@docRoot}guide/topics/animation/frame-animation.html">Frame-by-Frame
+Animation</a>.</p>
-<p>There are three ways to define and instantiate a Drawable: using an image saved in your project resources;
-using an XML file that defines the Drawable properties; or using the normal class constructors. Below, we'll discuss
-each the first two techniques (using constructors is nothing new for an experienced developer).</p>
+<p>A {@link android.graphics.drawable.Drawable} is a general abstraction for "something that can be
+ drawn." You'll discover that the Drawable class extends to define a variety of specific kinds of
+drawable graphics, including {@link android.graphics.drawable.BitmapDrawable}, {@link
+ android.graphics.drawable.ShapeDrawable}, {@link android.graphics.drawable.PictureDrawable},
+{@link android.graphics.drawable.LayerDrawable}, and several more. Of course, you can also extend
+these to define your own custom Drawable objects that behave in unique ways.</p>
+
+<p>There are three ways to define and instantiate a Drawable: using an image saved in your project
+ resources; using an XML file that defines the Drawable properties; or using the normal class
+constructors. Below, we'll discuss each the first two techniques (using constructors is nothing new
+for an experienced developer).</p>
<h3 id="drawables-from-images">Creating from resource images</h3>
-<p>A simple way to add graphics to your application is by referencing an image file from your project resources.
-Supported file types are PNG (preferred), JPG (acceptable) and GIF (discouraged). This technique would
-obviously be preferred for application icons, logos, or other graphics such as those used in a game.</p>
+<p>A simple way to add graphics to your application is by referencing an image file from your
+ project resources. Supported file types are PNG (preferred), JPG (acceptable) and GIF
+(discouraged). This technique would obviously be preferred for application icons, logos, or other
+graphics such as those used in a game.</p>
-<p>To use an image resource, just add your file to the <code>res/drawable/</code> directory of your project.
-From there, you can reference it from your code or your XML layout.
-Either way, it is referred using a resource ID, which is the file name without the file type
-extension (E.g., <code>my_image.png</code> is referenced as <var>my_image</var>).</p>
+<p>To use an image resource, just add your file to the <code>res/drawable/</code> directory of your
+ project. From there, you can reference it from your code or your XML layout.
+ Either way, it is referred using a resource ID, which is the file name without the file type
+ extension (E.g., <code>my_image.png</code> is referenced as <var>my_image</var>).</p>
-<p class="note"><strong>Note:</strong> Image resources placed in <code>res/drawable/</code> may be
-automatically optimized with lossless image compression by the
-<code>aapt</code> tool during the build process. For example, a true-color PNG that does
-not require more than 256 colors may be converted to an 8-bit PNG with a color palette. This
-will result in an image of equal quality but which requires less memory. So be aware that the
-image binaries placed in this directory can change during the build. If you plan on reading
-an image as a bit stream in order to convert it to a bitmap, put your images in the <code>res/raw/</code>
-folder instead, where they will not be optimized.</p>
+<p class="note"><strong>Note:</strong> Image resources placed in <code>res/drawable/</code> may be
+ automatically optimized with lossless image compression by the
+ <code>aapt</code> tool during the build process. For example, a true-color PNG that does
+ not require more than 256 colors may be converted to an 8-bit PNG with a color palette. This
+ will result in an image of equal quality but which requires less memory. So be aware that the
+ image binaries placed in this directory can change during the build. If you plan on reading
+ an image as a bit stream in order to convert it to a bitmap, put your images in the
+ <code>res/raw/</code> folder instead, where they will not be optimized.</p>
<h4>Example code</h4>
-<p>The following code snippet demonstrates how to build an {@link android.widget.ImageView} that uses an image
-from drawable resources and add it to the layout.</p>
+<p>The following code snippet demonstrates how to build an {@link android.widget.ImageView} that
+ uses an image from drawable resources and add it to the layout.</p>
<pre>
-LinearLayout mLinearLayout;
+ LinearLayout mLinearLayout;
-protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
- // Create a LinearLayout in which to add the ImageView
- mLinearLayout = new LinearLayout(this);
+ // Create a LinearLayout in which to add the ImageView
+ mLinearLayout = new LinearLayout(this);
- // Instantiate an ImageView and define its properties
- ImageView i = new ImageView(this);
- i.setImageResource(R.drawable.my_image);
- i.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
- i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+ // Instantiate an ImageView and define its properties
+ ImageView i = new ImageView(this);
+ i.setImageResource(R.drawable.my_image);
+ i.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
+ i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
+ LayoutParams.WRAP_CONTENT));
- // Add the ImageView to the layout and set the layout as the content view
- mLinearLayout.addView(i);
- setContentView(mLinearLayout);
-}
+ // Add the ImageView to the layout and set the layout as the content view
+ mLinearLayout.addView(i);
+ setContentView(mLinearLayout);
+ }
</pre>
-<p>In other cases, you may want to handle your image resource as a
-{@link android.graphics.drawable.Drawable} object.
-To do so, create a Drawable from the resource like so:
-<pre>
-Resources res = mContext.getResources();
-Drawable myImage = res.getDrawable(R.drawable.my_image);
-</pre>
+<p>In other cases, you may want to handle your image resource as a
+ {@link android.graphics.drawable.Drawable} object.
+ To do so, create a Drawable from the resource like so:
+ <pre>
+ Resources res = mContext.getResources();
+ Drawable myImage = res.getDrawable(R.drawable.my_image);
+ </pre>
-<p class="warning"><strong>Note:</strong> Each unique resource in your project can maintain only one
-state, no matter how many different objects you may instantiate for it. For example, if you instantiate two
-Drawable objects from the same image resource, then change a property (such as the alpha) for one of the
-Drawables, then it will also affect the other. So when dealing with multiple instances of an image resource,
-instead of directly transforming the Drawable, you should perform a <a href="#tween-animation">tween animation</a>.</p>
+ <p class="warning"><strong>Note:</strong> Each unique resource in your project can maintain only
+one state, no matter how many different objects you may instantiate for it. For example, if you
+ instantiate two Drawable objects from the same image resource, then change a property (such
+as the alpha) for one of the Drawables, then it will also affect the other. So when dealing with
+multiple instances of an image resource, instead of directly transforming the Drawable, you
+should perform a <a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">tween
+animation</a>.</p>
-<h4>Example XML</h4>
-<p>The XML snippet below shows how to add a resource Drawable to an
-{@link android.widget.ImageView} in the XML layout (with some red tint just for fun).
-<pre>
-<ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:tint="#55ff0000"
- android:src="@drawable/my_image"/>
-</pre>
-<p>For more information on using project resources, read about
- <a href="{@docRoot}guide/topics/resources/index.html">Resources and Assets</a>.</p>
+ <h4>Example XML</h4>
+ <p>The XML snippet below shows how to add a resource Drawable to an
+ {@link android.widget.ImageView} in the XML layout (with some red tint just for fun).
+ <pre>
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:tint="#55ff0000"
+ android:src="@drawable/my_image"/>
+ </pre>
+ <p>For more information on using project resources, read about
+ <a href="{@docRoot}guide/topics/resources/index.html">Resources and Assets</a>.</p>
-<h3 id="drawables-from-xml">Creating from resource XML</h3>
+ <h3 id="drawables-from-xml">Creating from resource XML</h3>
-<p>By now, you should be familiar with Android's principles of developing a
-<a href="{@docRoot}guide/topics/ui/index.html">User Interface</a>. Hence, you understand the power
-and flexibility inherent in defining objects in XML. This philosophy caries over from Views to Drawables.
-If there is a Drawable object that you'd like to create, which is not initially dependent on variables defined by
-your application code or user interaction, then defining the Drawable in XML is a good option.
-Even if you expect your Drawable to change its properties during the user's experience with your application,
-you should consider defining the object in XML, as you can always modify properties once it is instantiated.</p>
+ <p>By now, you should be familiar with Android's principles of developing a
+ <a href="{@docRoot}guide/topics/ui/index.html">User Interface</a>. Hence, you understand the
+power and flexibility inherent in defining objects in XML. This philosophy caries over from Views
+to Drawables. If there is a Drawable object that you'd like to create, which is not initially
+dependent on variables defined by your application code or user interaction, then defining the
+Drawable in XML is a good option. Even if you expect your Drawable to change its properties
+during the user's experience with your application, you should consider defining the object in
+XML, as you can always modify properties once it is instantiated.</p>
-<p>Once you've defined your Drawable in XML, save the file in the <code>res/drawable/</code> directory of
-your project. Then, retrieve and instantiate the object by calling
-{@link android.content.res.Resources#getDrawable(int) Resources.getDrawable()}, passing it the resource ID
-of your XML file. (See the <a href="#drawable-xml-example">example below</a>.)</p>
+ <p>Once you've defined your Drawable in XML, save the file in the <code>res/drawable/</code>
+ directory of your project. Then, retrieve and instantiate the object by calling
+ {@link android.content.res.Resources#getDrawable(int) Resources.getDrawable()}, passing it the
+ resource ID of your XML file. (See the <a href="#drawable-xml-example">example
+below</a>.)</p>
-<p>Any Drawable subclass that supports the <code>inflate()</code> method can be defined in
-XML and instantiated by your application.
-Each Drawable that supports XML inflation utilizes specific XML attributes that help define the object
-properties (see the class reference to see what these are). See the class documentation for each
-Drawable subclass for information on how to define it in XML.
+ <p>Any Drawable subclass that supports the <code>inflate()</code> method can be defined in
+ XML and instantiated by your application. Each Drawable that supports XML inflation utilizes
+specific XML attributes that help define the object
+ properties (see the class reference to see what these are). See the class documentation for each
+ Drawable subclass for information on how to define it in XML.
-<h4 id="drawable-xml-example">Example</h4>
-<p>Here's some XML that defines a TransitionDrawable:</p>
-<pre>
-<transition xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@drawable/image_expand">
- <item android:drawable="@drawable/image_collapse">
-</transition>
-</pre>
+ <h4 id="drawable-xml-example">Example</h4>
+ <p>Here's some XML that defines a TransitionDrawable:</p>
+ <pre>
+ <transition xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/image_expand">
+ <item android:drawable="@drawable/image_collapse">
+ </transition>
+ </pre>
-<p>With this XML saved in the file <code>res/drawable/expand_collapse.xml</code>,
-the following code will instantiate the TransitionDrawable and set it as the content of an ImageView:</p>
-<pre>
-Resources res = mContext.getResources();
-TransitionDrawable transition = (TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);
-ImageView image = (ImageView) findViewById(R.id.toggle_image);
-image.setImageDrawable(transition);
-</pre>
-<p>Then this transition can be run forward (for 1 second) with:</p>
-<pre>transition.startTransition(1000);</pre>
+ <p>With this XML saved in the file <code>res/drawable/expand_collapse.xml</code>,
+ the following code will instantiate the TransitionDrawable and set it as the content of an
+ ImageView:</p>
+ <pre>
+ Resources res = mContext.getResources();
+ TransitionDrawable transition = (TransitionDrawable)
+res.getDrawable(R.drawable.expand_collapse);
+ ImageView image = (ImageView) findViewById(R.id.toggle_image);
+ image.setImageDrawable(transition);
+ </pre>
+ <p>Then this transition can be run forward (for 1 second) with:</p>
+ <pre>transition.startTransition(1000);</pre>
-<p>Refer to the Drawable classes listed above for more information on the XML attributes supported by each.</p>
+ <p>Refer to the Drawable classes listed above for more information on the XML attributes
+supported by each.</p>
-<h2 id="shape-drawable">Shape Drawable</h2>
+ <h2 id="shape-drawable">Shape Drawable</h2>
-<p>When you want to dynamically draw some two-dimensional graphics, a {@link android.graphics.drawable.ShapeDrawable}
-object will probably suit your needs. With a ShapeDrawable, you can programmatically draw
-primitive shapes and style them in any way imaginable.</p>
+ <p>When you want to dynamically draw some two-dimensional graphics, a {@link
+ android.graphics.drawable.ShapeDrawable}
+ object will probably suit your needs. With a ShapeDrawable, you can programmatically draw
+ primitive shapes and style them in any way imaginable.</p>
-<p>A ShapeDrawable is an extension of {@link android.graphics.drawable.Drawable}, so you can use one where ever
-a Drawable is expected — perhaps for the background of a View, set with
-{@link android.view.View#setBackgroundDrawable(android.graphics.drawable.Drawable) setBackgroundDrawable()}.
-Of course, you can also draw your shape as its own custom {@link android.view.View},
-to be added to your layout however you please.
-Because the ShapeDrawable has its own <code>draw()</code> method, you can create a subclass of View that
-draws the ShapeDrawable during the <code>View.onDraw()</code> method.
-Here's a basic extension of the View class that does just this, to draw a ShapeDrawable as a View:</p>
-<pre>
-public class CustomDrawableView extends View {
- private ShapeDrawable mDrawable;
+ <p>A ShapeDrawable is an extension of {@link android.graphics.drawable.Drawable}, so you can use
+one where ever
+ a Drawable is expected — perhaps for the background of a View, set with
+ {@link android.view.View#setBackgroundDrawable(android.graphics.drawable.Drawable)
+ setBackgroundDrawable()}.
+ Of course, you can also draw your shape as its own custom {@link android.view.View},
+ to be added to your layout however you please.
+ Because the ShapeDrawable has its own <code>draw()</code> method, you can create a subclass of
+View that
+ draws the ShapeDrawable during the <code>View.onDraw()</code> method.
+ Here's a basic extension of the View class that does just this, to draw a ShapeDrawable as a
+ View:</p>
+ <pre>
+ public class CustomDrawableView extends View {
+ private ShapeDrawable mDrawable;
- public CustomDrawableView(Context context) {
- super(context);
+ public CustomDrawableView(Context context) {
+ super(context);
- int x = 10;
- int y = 10;
- int width = 300;
- int height = 50;
+ int x = 10;
+ int y = 10;
+ int width = 300;
+ int height = 50;
- mDrawable = new ShapeDrawable(new OvalShape());
- mDrawable.getPaint().setColor(0xff74AC23);
- mDrawable.setBounds(x, y, x + width, y + height);
- }
+ mDrawable = new ShapeDrawable(new OvalShape());
+ mDrawable.getPaint().setColor(0xff74AC23);
+ mDrawable.setBounds(x, y, x + width, y + height);
+ }
- protected void onDraw(Canvas canvas) {
- mDrawable.draw(canvas);
- }
-}
-</pre>
+ protected void onDraw(Canvas canvas) {
+ mDrawable.draw(canvas);
+ }
+ }
+ </pre>
-<p>In the constructor, a ShapeDrawable is defines as an {@link android.graphics.drawable.shapes.OvalShape}.
-It's then given a color and the bounds of the shape are set. If you do not set the bounds, then the
-shape will not be drawn, whereas if you don't set the color, it will default to black.</p>
-<p>With the custom View defined, it can be drawn any way you like. With the sample above, we can
-draw the shape programmatically in an Activity:</p>
-<pre>
-CustomDrawableView mCustomDrawableView;
+ <p>In the constructor, a ShapeDrawable is defines as an {@link
+ android.graphics.drawable.shapes.OvalShape}.
+ It's then given a color and the bounds of the shape are set. If you do not set the bounds,
+then the
+ shape will not be drawn, whereas if you don't set the color, it will default to black.</p>
+ <p>With the custom View defined, it can be drawn any way you like. With the sample above, we can
+ draw the shape programmatically in an Activity:</p>
+ <pre>
+ CustomDrawableView mCustomDrawableView;
-protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mCustomDrawableView = new CustomDrawableView(this);
-
- setContentView(mCustomDrawableView);
-}
-</pre>
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mCustomDrawableView = new CustomDrawableView(this);
-<p>If you'd like to draw this custom drawable from the XML layout instead of from the Activity,
-then the CustomDrawable class must override the {@link android.view.View#View(android.content.Context, android.util.AttributeSet) View(Context, AttributeSet)} constructor, which is called when
-instantiating a View via inflation from XML. Then add a CustomDrawable element to the XML,
-like so:</p>
-<pre>
-<com.example.shapedrawable.CustomDrawableView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
-</pre>
+ setContentView(mCustomDrawableView);
+ }
+ </pre>
-<p>The ShapeDrawable class (like many other Drawable types in the {@link android.graphics.drawable} package)
-allows you to define various properties of the drawable with public methods.
-Some properties you might want to adjust include
-alpha transparency, color filter, dither, opacity and color.</p>
+ <p>If you'd like to draw this custom drawable from the XML layout instead of from the Activity,
+ then the CustomDrawable class must override the {@link
+ android.view.View#View(android.content.Context, android.util.AttributeSet) View(Context,
+ AttributeSet)} constructor, which is called when
+ instantiating a View via inflation from XML. Then add a CustomDrawable element to the XML,
+ like so:</p>
+ <pre>
+ <com.example.shapedrawable.CustomDrawableView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+ </pre>
-<p>You can also define primitive drawable shapes using XML. For more information, see the
-section about Shape Drawables in the <a
+ <p>The ShapeDrawable class (like many other Drawable types in the {@link
+android.graphics.drawable} package)
+ allows you to define various properties of the drawable with public methods.
+ Some properties you might want to adjust include
+ alpha transparency, color filter, dither, opacity and color.</p>
+
+ <p>You can also define primitive drawable shapes using XML. For more information, see the
+ section about Shape Drawables in the <a
+
href="{@docRoot}guide/topics/resources/drawable-resource.html#Shape">Drawable Resources</a>
-document.</p>
+ document.</p>
-<!-- TODO
-<h2 id="state-list">StateListDrawable</h2>
+ <!-- TODO
+ <h2 id="state-list">StateListDrawable</h2>
-<p>A StateListDrawable is an extension of the DrawableContainer class, making it little different.
-The primary distinction is that the
-StateListDrawable manages a collection of images for the Drawable, instead of just one.
-This means that it can switch the image when you want, without switching objects. However, the
-intention of the StateListDrawable is to automatically change the image used based on the state
-of the object it's attached to.
--->
+ <p>A StateListDrawable is an extension of the DrawableContainer class, making it little
+different.
+ The primary distinction is that the
+ StateListDrawable manages a collection of images for the Drawable, instead of just one.
+ This means that it can switch the image when you want, without switching objects. However,
+the
+ intention of the StateListDrawable is to automatically change the image used based on the
+state
+ of the object it's attached to.
+ -->
-<h2 id="nine-patch">Nine-patch</h2>
+ <h2 id="nine-patch">Nine-patch</h2>
-<p>A {@link android.graphics.drawable.NinePatchDrawable} graphic is a stretchable bitmap image, which Android
-will automatically resize to accommodate the contents of the View in which you have placed it as the background.
-An example use of a NinePatch is the backgrounds used by standard Android buttons —
-buttons must stretch to accommodate strings of various lengths. A NinePatch drawable is a standard PNG
-image that includes an extra 1-pixel-wide border. It must be saved with the extension <code>.9.png</code>,
-and saved into the <code>res/drawable/</code> directory of your project.
-</p>
-<p>
- The border is used to define the stretchable and static areas of
- the image. You indicate a stretchable section by drawing one (or more) 1-pixel-wide
- black line(s) in the left and top part of the border (the other border pixels should
- be fully transparent or white). You can have as many stretchable sections as you want:
- their relative size stays the same, so the largest sections always remain the largest.
-</p>
-<p>
- You can also define an optional drawable section of the image (effectively,
- the padding lines) by drawing a line on the right and bottom lines.
- If a View object sets the NinePatch as its background and then specifies the
- View's text, it will stretch itself so that all the text fits inside only
- the area designated by the right and bottom lines (if included). If the
- padding lines are not included, Android uses the left and top lines to
- define this drawable area.
-</p>
-<p>To clarify the difference between the different lines, the left and top lines define
-which pixels of the image are allowed to be replicated in order to stretch the image.
-The bottom and right lines define the relative area within the image that the contents
-of the View are allowed to lie within.</p>
-<p>
- Here is a sample NinePatch file used to define a button:
-</p>
- <img src="{@docRoot}images/ninepatch_raw.png" alt="" />
+ <p>A {@link android.graphics.drawable.NinePatchDrawable} graphic is a stretchable bitmap
+image, which Android
+ will automatically resize to accommodate the contents of the View in which you have
+placed it as the background.
+ An example use of a NinePatch is the backgrounds used by standard Android buttons —
+ buttons must stretch to accommodate strings of various lengths. A NinePatch drawable is a
+standard PNG
+ image that includes an extra 1-pixel-wide border. It must be saved with the extension
+ <code>.9.png</code>,
+ and saved into the <code>res/drawable/</code> directory of your project.
+ </p>
+ <p>
+ The border is used to define the stretchable and static areas of
+ the image. You indicate a stretchable section by drawing one (or more) 1-pixel-wide
+ black line(s) in the left and top part of the border (the other border pixels should
+ be fully transparent or white). You can have as many stretchable sections as you want:
+ their relative size stays the same, so the largest sections always remain the largest.
+ </p>
+ <p>
+ You can also define an optional drawable section of the image (effectively,
+ the padding lines) by drawing a line on the right and bottom lines.
+ If a View object sets the NinePatch as its background and then specifies the
+ View's text, it will stretch itself so that all the text fits inside only
+ the area designated by the right and bottom lines (if included). If the
+ padding lines are not included, Android uses the left and top lines to
+ define this drawable area.
+ </p>
+ <p>To clarify the difference between the different lines, the left and top lines define
+ which pixels of the image are allowed to be replicated in order to stretch the image.
+ The bottom and right lines define the relative area within the image that the contents
+ of the View are allowed to lie within.</p>
+ <p>
+ Here is a sample NinePatch file used to define a button:
+ </p>
+ <img src="{@docRoot}images/ninepatch_raw.png" alt="" />
-<p>This NinePatch defines one stretchable area with the left and top lines
-and the drawable area with the bottom and right lines. In the top image, the dotted grey
-lines identify the regions of the image that will be replicated in order to stretch the image. The pink
-rectangle in the bottom image identifies the region in which the contents of the View are allowed.
-If the contents don't fit in this region, then the image will be stretched so that they do.
+ <p>This NinePatch defines one stretchable area with the left and top lines
+ and the drawable area with the bottom and right lines. In the top image, the dotted grey
+ lines identify the regions of the image that will be replicated in order to stretch the
+image. The pink
+ rectangle in the bottom image identifies the region in which the contents of the View are
+allowed.
+ If the contents don't fit in this region, then the image will be stretched so that they
+do.
</p>
-<p>The <a href="{@docRoot}guide/developing/tools/draw9patch.html">Draw 9-patch</a> tool offers
- an extremely handy way to create your NinePatch images, using a WYSIWYG graphics editor. It
+<p>The <a href="{@docRoot}guide/developing/tools/draw9patch.html">Draw 9-patch</a> tool offers
+ an extremely handy way to create your NinePatch images, using a WYSIWYG graphics editor. It
even raises warnings if the region you've defined for the stretchable area is at risk of
producing drawing artifacts as a result of the pixel replication.
</p>
@@ -298,7 +486,8 @@
<h3>Example XML</h3>
<p>Here's some sample layout XML that demonstrates how to add a NinePatch image to a
-couple of buttons. (The NinePatch image is saved as <code>res/drawable/my_button_background.9.png</code>
+couple of buttons. (The NinePatch image is saved as
+<code>res/drawable/my_button_background.9.png</code>
<pre>
<Button id="@+id/tiny"
android:layout_width="wrap_content"
@@ -318,11 +507,12 @@
android:textSize="30sp"
android:background="@drawable/my_button_background"/>
</pre>
-<p>Note that the width and height are set to "wrap_content" to make the button fit neatly around the text.
+<p>Note that the width and height are set to "wrap_content" to make the button fit neatly around the
+text.
</p>
-<p>Below are the two buttons rendered from the XML and NinePatch image shown above.
-Notice how the width and height of the button varies with the text, and the background image
+<p>Below are the two buttons rendered from the XML and NinePatch image shown above.
+Notice how the width and height of the button varies with the text, and the background image
stretches to accommodate it.
</p>
diff --git a/docs/html/guide/topics/graphics/animation.jd b/docs/html/guide/topics/graphics/animation.jd
index e7a07e0..e8996f6 100644
--- a/docs/html/guide/topics/graphics/animation.jd
+++ b/docs/html/guide/topics/graphics/animation.jd
@@ -1,949 +1,63 @@
-page.title=Property Animation
-parent.title=Graphics
-parent.link=index.html
+page.title=Animation
@jd:body
<div id="qv-wrapper">
<div id="qv">
- <h2>In this document</h2>
+ <h2>See also</h2>
<ol>
- <li><a href="#what">What is Property Animation?</a>
- <ol>
- <li><a href="#how">How property animation works</a></li>
- </ol>
- </li>
-
- <li><a href="#value-animator">Animating with ValueAnimator</a></li>
-
- <li><a href="#object-animator">Animating with ObjectAnimator</a></li>
-
- <li><a href="#choreography">Choreographing Multiple Animations with
- AnimatorSet</a></li>
-
- <li><a href="#listeners">Animation Listeners</a></li>
-
- <li><a href="#type-evaluator">Using a TypeEvaluator</a></li>
-
- <li><a href="#interpolators">Using Interpolators</a></li>
-
- <li><a href="#keyframes">Specifying Keyframes</a></li>
-
- <li><a href="#layout">Animating Layout Changes to ViewGroups</a></li>
-
- <li><a href="#views">Animating Views</a>
- <ol>
- <li><a href="#view-prop-animator">ViewPropertyAnimator</a></li>
- </ol>
- </li>
-
- <li><a href="#declaring-xml">Declaring Animations in XML</a></li>
- </ol>
-
- <h2>Key classes</h2>
-
+ <li><a href="{@docRoot}guide/topics/graphics/property-animation.html">Property Animation</a></li>
+ <li><a href="{@docRoot}guide/topics/graphics/view-animation.html">View Animation</a></li>
+ <li><a href="{@docRoot}guide/topics/graphics/drawable-animation.html">Drawable Animation</a></li>
<ol>
- <li><code><a href=
- "/reference/android/animation/ValueAnimator.html">ValueAnimator</a></code></li>
-
- <li><code><a href=
- "/reference/android/animation/ObjectAnimator.html">ObjectAnimator</a></code></li>
-
- <li><code><a href=
- "/reference/android/animation/TypeEvaluator.html">TypeEvaluator</a></code></li>
- </ol>
-
- <h2>Related samples</h2>
-
- <ol>
- <li><a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
- Demos</a></li>
- </ol>
</div>
</div>
- <p>Introduced in Android 3.0, the property animation system is a robust framework that allows you
- to animate almost anything. Property animation is not confined to objects drawn on the screen.
- You can define an animation to change any object property over time, regardless of whether it
- draws to the screen or not.The property animation system also has a few advantages over the view
- animation system, which makes it more flexible to use.</p>
+ <p>The Android framework provides two animation systems: property animation
+ (introduced in Android 3.0) and view animation. Both animation systems are viable options,
+ but the property animation system, in general, is the preferred method to use, because it
+ is more flexible and offers more features. In addition to these two systems, you can utilize Drawable
+animation, which allows you to load drawable resources and display them one frame after
+another.</p>
- <p>The view animation system provides the capability to only animate View objects, so if
- you wanted to animate non-View objects, you had to implement your own code to do so. The view
- animation system also was constrained in the fact that it only exposed a few aspects of a View
- object to animate, such as the scaling and rotation of a View but not the background color for
- instance.</p>
+ <p>The view animation system provides the capability to only animate {@link android.view.View}
+objects, so if you wanted to animate non-{@link android.view.View} objects, you have to implement
+your own code to do so. The view animation system is also constrained in the fact that it only
+exposes a few aspects of a {@link android.view.View} object to animate, such as the scaling and
+rotation of a View but not the background color, for instance.</p>
<p>Another disadvantage of the view animation system is that it only modified where the
View was drawn, and not the actual View itself. For instance, if you animated a button to move
across the screen, the button draws correctly, but the actual location where you can click the
- button does not change, so you have to implement your own logic to handle this. With the property
- animation system, these constraints are completely removed, and you can animate any property of
- any object, including View objects, and the object itself is actually modified.</p>
+ button does not change, so you have to implement your own logic to handle this.</p>
+
+ <p>With the property animation system, these constraints are completely removed, and you can animate
+ any property of any object (Views and non-Views) and the object itself is actually modified.
+ The property animation system is also more robust in the way it carries out animation. At
+ a high level, you assign animators to the properties that you want to animate, such as color,
+ position, or size and can define aspects of the animation such as interpolation and
+ synchronization of multiple animators.</p>
<p>The view animation system, however, takes less time to setup and requires less code to write.
If view animation accomplishes everything that you need to do, or if your existing code already
- works the way you want, there is no need to use the property animation system.</p>
+ works the way you want, there is no need to use the property animation system. It also might
+ make sense to use both animation systems for different situations if the use case arises.</p>
- <p class="note"><strong>Tip:</strong> To see how the ADT layout editor allows you to develop and
-preview animations in your layout, watch the <a
-href="http://www.youtube.com/watch?v=Oq05KqjXTvs&feature=player_detailpage#t=1709s">Android
-Developer Tools session</a> from Google I/O '11</p>
+<dl>
+<dt><strong><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property
+Animation</a></strong></dt>
+<dd>Introduced in Android 3.0 (API level 11), the property animation system lets you
+animate properties of any object, including ones that are not rendered to the screen. The system is
+extensible and lets you animate properties of custom types as well.</dd>
+<dt><strong><a href="{@docRoot}guide/topics/graphics/view-animation.html">View
+Animation</a></strong></dt>
+<dd>View Animation is the older system and can only be used for Views. It is relatively easy to
+setup and offers enough capabilities to meet many application's needs.</dd>
+</dl>
- <h2 id="what">What is Property Animation?</h2>
- A property animation changes a property's (a field in
- an object) value over a specified length of time. To animate something, you specify the
- object property that you want to animate, such as an object's position on the screen, how long
- you want to animate it for, and what values you want to animate between. </p>
-
- <p>The property animation system lets you define the following characteristics of an
- animation:</p>
-
- <ul>
- <li>Duration: You can specify the duration of an animation. The default length is 300 ms.</li>
-
- <li>Time interpolation: You can specify how the values for the property are calculated as a
- function of the animation's current elapsed time.</li>
-
- <li>Repeat count and behavior: You can specify whether or not to have an animation repeat when
- it reaches the end of a duration and how many times to repeat the animation. You can also
- specify whether you want the animation to play back in reverse. Setting it to reverse plays
- the animation forwards then backwards repeatedly, until the number of repeats is reached.</li>
-
- <li>Animator sets: You can group animations into logical sets that play together or
- sequentially or after specified delays.</li>
-
- <li>Frame refresh delay: You can specify how often to refresh frames of your animation. The
- default is set to refresh every 10 ms, but the speed in which your application can refresh frames is
- ultimately dependent on how busy the system is overall and how fast the system can service the underlying timer.</li>
- </ul>
-
-
- <h3 id="how">How the property animation system works</h3>
-
- <p>First, let's go over how an animation works with a simple example. Figure 1 depicts a
- hypothetical object that is animated with its <code>x</code> property, which represents its
- horizontal location on a screen. The duration of the animation is set to 40 ms and the distance
- to travel is 40 pixels. Every 10 ms, which is the default frame refresh rate, the object moves
- horizontally by 10 pixels. At the end of 40ms, the animation stops, and the object ends at
- horizontal position 40. This is an example of an animation with linear interpolation, meaning the
- object moves at a constant speed.</p><img src="{@docRoot}images/animation/animation-linear.png">
-
- <p class="img-caption"><strong>Figure 1.</strong> Example of a linear animation</p>
-
- <p>You can also specify animations to have a non-linear interpolation. Figure 2 illustrates a
- hypothetical object that accelerates at the beginning of the animation, and decelerates at the
- end of the animation. The object still moves 40 pixels in 40 ms, but non-linearly. In the
- beginning, this animation accelerates up to the halfway point then decelerates from the
- halfway point until the end of the animation. As Figure 2 shows, the distance traveled
- at the beginning and end of the animation is less than in the middle.</p><img src=
- "{@docRoot}images/animation/animation-nonlinear.png">
-
- <p class="img-caption"><strong>Figure 2.</strong> Example of a non-linear animation</p>
-
- <p>Let's take a detailed look at how the important components of the property animation system
- would calculate animations like the ones illustrated above. Figure 3 depicts how the main classes
- work with one another.</p><img src="{@docRoot}images/animation/valueanimator.png">
-
- <p class="img-caption"><strong>Figure 3.</strong> How animations are calculated</p>
-
- <p>The {@link android.animation.ValueAnimator} object keeps track of your animation's timing,
- such as how long the animation has been running, and the current value of the property that it is
- animating.</p>
-
- <p>The {@link android.animation.ValueAnimator} encapsulates a {@link
- android.animation.TimeInterpolator}, which defines animation interpolation, and a {@link
- android.animation.TypeEvaluator}, which defines how to calculate values for the property being
- animated. For example, in Figure 2, the {@link android.animation.TimeInterpolator} used would be
- {@link android.view.animation.AccelerateDecelerateInterpolator} and the {@link
- android.animation.TypeEvaluator} would be {@link android.animation.IntEvaluator}.</p>
-
- <p>To start an animation, create a {@link android.animation.ValueAnimator} and give it the
- starting and ending values for the property that you want to animate, along with the duration of
- the animation. When you call {@link android.animation.ValueAnimator#start start()} the animation
- begins. During the whole animation, the {@link android.animation.ValueAnimator} calculates an <em>elapsed fraction</em>
- between 0 and 1, based on the duration of the animation and how much time has elapsed. The
- elapsed fraction represents the percentage of time that the animation has completed, 0 meaning 0%
- and 1 meaning 100%. For example, in Figure 1, the elapsed fraction at t = 10 ms would be .25
- because the total duration is t = 40 ms.</p>
-
- <p>When the {@link android.animation.ValueAnimator} is done calculating an elapsed fraction, it
- calls the {@link android.animation.TimeInterpolator} that is currently set, to calculate an
- <em>interpolated fraction</em>. An interpolated fraction maps the elapsed fraction to a new
- fraction that takes into account the time interpolation that is set. For example, in Figure 2,
- because the animation slowly accelerates, the interpolated fraction, about .15, is less than the
- elapsed fraction, .25, at t = 10 ms. In Figure 1, the interpolated fraction is always the same as
- the elapsed fraction.</p>
-
- <p>When the interpolated fraction is calculated, {@link android.animation.ValueAnimator} calls
- the appropriate {@link android.animation.TypeEvaluator}, to calculate the value of the
- property that you are animating, based on the interpolated fraction, the starting value, and the
- ending value of the animation. For example, in Figure 2, the interpolated fraction was .15 at t =
- 10 ms, so the value for the property at that time would be .15 X (40 - 0), or 6.</p>
-
- <!-- <p>When the final value is calculated, the {@link android.animation.ValueAnimator} calls the
- {@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate
- onAnimationUpdate()} method. Implement this callback to obtain the property value by
- calling {@link android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()} and set the
- value for the property in the object that you are animating. Setting the property doesn't redraw
- the object on the screen, so you need to call {@link
- android.view.View#invalidate invalidate()} to refresh the View that the object
- resides in. If the object is actually a View object, then the system calls {@link
- android.view.View#invalidate invalidate()} when the property is changed.
- The system redraws the window and the {@link android.animation.ValueAnimator}
- repeats the process.</p>-->
-
- <p>The <code>com.example.android.apis.animation</code> package in the <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
- Demos</a> sample project provides many examples on how to use the property
- animation system.</p>
-
- <h2>API Overview</h2>
-
- <p>You can find most of the property animation system's APIs in {@link android.animation
- android.animation}. Because the view animation system already
- defines many interpolators in {@link android.view.animation android.view.animation}, you can use
- those interpolators in the property animation system as well. The following tables describe the main
- components of the property animation system.</p>
-
- <p>The {@link android.animation.Animator} class provides the basic structure for creating
- animations. You normally do not use this class directly as it only provides minimal
- functionality that must be extended to fully support animating values. The following
- subclasses extend {@link android.animation.Animator}:
- </p>
- <p class="table-caption"><strong>Table 1.</strong> Animators</p>
- <table>
- <tr>
- <th>Class</th>
-
- <th>Description</th>
- </tr>
-
- <tr>
- <td>{@link android.animation.ValueAnimator}</td>
-
- <td>The main timing engine for property animation that also computes the values for the
- property to be animated. It has all of the core functionality that calculates animation
- values and contains the timing details of each animation, information about whether an
- animation repeats, listeners that receive update events, and the ability to set custom
- types to evaluate. There are two pieces to animating properties: calculating the animated
- values and setting those values on the object and property that is being animated. {@link
- android.animation.ValueAnimator} does not carry out the second piece, so you must listen
- for updates to values calculated by the {@link android.animation.ValueAnimator} and
- modify the objects that you want to animate with your own logic. See the section about
- <a href="#value-animator">Animating with ValueAnimator</a> for more information.</td>
- </tr>
-
- <tr>
- <td>{@link android.animation.ObjectAnimator}</td>
-
- <td>A subclass of {@link android.animation.ValueAnimator} that allows you to set a target
- object and object property to animate. This class updates the property accordingly when
- it computes a new value for the animation. You want to use
- {@link android.animation.ObjectAnimator} most of the time,
- because it makes the process of animating values on target objects much easier. However,
- you sometimes want to use {@link android.animation.ValueAnimator} directly because {@link
- android.animation.ObjectAnimator} has a few more restrictions, such as requiring specific
- acessor methods to be present on the target object.</td>
- </tr>
-
- <tr>
- <td>{@link android.animation.AnimatorSet}</td>
-
- <td>Provides a mechanism to group animations together so that they run in
- relation to one another. You can set animations to play together, sequentially, or after
- a specified delay. See the section about <a href="#choreography">Choreographing multiple
- animations with Animator Sets</a> for more information.</td>
- </tr>
- </table>
-
-
- <p>Evaluators tell the property animation system how to calculate values for a given
- property. They take the timing data that is provided by an {@link android.animation.Animator}
- class, the animation's start and end value, and calculate the animated values of the property
- based on this data. The property animation system provides the following evaluators:</p>
- <p class="table-caption"><strong>Table 2.</strong> Evaluators</p>
- <table>
- <tr>
- <th>Class/Interface</th>
-
- <th>Description</th>
- </tr>
-
- <tr>
- <td>{@link android.animation.IntEvaluator}</td>
-
- <td>The default evaluator to calculate values for <code>int</code> properties.</td>
- </tr>
-
- <tr>
- <td>{@link android.animation.FloatEvaluator}</td>
-
- <td>The default evaluator to calculate values for <code>float</code> properties.</td>
- </tr>
-
- <tr>
- <td>{@link android.animation.ArgbEvaluator}</td>
-
- <td>The default evaluator to calculate values for color properties that are represented
- as hexidecimal values.</td>
- </tr>
-
- <tr>
- <td>{@link android.animation.TypeEvaluator}</td>
-
- <td>An interface that allows you to create your own evaluator. If you are animating an
- object property that is <em>not</em> an <code>int</code>, <code>float</code>, or color,
- you must implement the {@link android.animation.TypeEvaluator} interface to specify how
- to compute the object property's animated values. You can also specify a custom {@link
- android.animation.TypeEvaluator} for <code>int</code>, <code>float</code>, and color
- values as well, if you want to process those types differently than the default behavior.
- See the section about <a href="#type-evaluator">Using a TypeEvaluator</a> for more
- information on how to write a custom evaluator.</td>
- </tr>
- </table>
-
-
-
-
- <p>A time interpolator defines how specific values in an animation are calculated as a
- function of time. For example, you can specify animations to happen linearly across the whole
- animation, meaning the animation moves evenly the entire time, or you can specify animations
- to use non-linear time, for example, accelerating at the beginning and decelerating at the
- end of the animation. Table 3 describes the interpolators that are contained in {@link
- android.view.animation android.view.animation}. If none of the provided interpolators suits
- your needs, implement the {@link android.animation.TimeInterpolator} interface and create your own. See <a href=
- "#interpolators">Using interpolators</a> for more information on how to write a custom
- interpolator.</p>
- <p class="table-caption"><strong>Table 3.</strong> Interpolators</p>
- <table>
- <tr>
- <th>Class/Interface</th>
-
- <th>Description</th>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.AccelerateDecelerateInterpolator}</td>
-
- <td>An interpolator whose rate of change starts and ends slowly but accelerates
- through the middle.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.AccelerateInterpolator}</td>
-
- <td>An interpolator whose rate of change starts out slowly and then
- accelerates.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.AnticipateInterpolator}</td>
-
- <td>An interpolator whose change starts backward then flings forward.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.AnticipateOvershootInterpolator}</td>
-
- <td>An interpolator whose change starts backward, flings forward and overshoots
- the target value, then finally goes back to the final value.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.BounceInterpolator}</td>
-
- <td>An interpolator whose change bounces at the end.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.CycleInterpolator}</td>
-
- <td>An interpolator whose animation repeats for a specified number of cycles.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.DecelerateInterpolator}</td>
-
- <td>An interpolator whose rate of change starts out quickly and and then
- decelerates.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.LinearInterpolator}</td>
-
- <td>An interpolator whose rate of change is constant.</td>
- </tr>
-
- <tr>
- <td>{@link android.view.animation.OvershootInterpolator}</td>
-
- <td>An interpolator whose change flings forward and overshoots the last value then
- comes back.</td>
- </tr>
-
- <tr>
- <td>{@link android.animation.TimeInterpolator}</td>
-
- <td>An interface that allows you to implement your own interpolator.</td>
- </tr>
- </table>
-
- <h2 id="value-animator">Animating with ValueAnimator</h2>
-
- <p>The {@link android.animation.ValueAnimator} class lets you animate values of some type for the
- duration of an animation by specifying a set of <code>int</code>, <code>float</code>, or color
- values to animate through. You obtain a {@link android.animation.ValueAnimator} by calling one of
- its factory methods: {@link android.animation.ValueAnimator#ofInt ofInt()}, {@link
- android.animation.ValueAnimator#ofFloat ofFloat()}, or {@link
- android.animation.ValueAnimator#ofObject ofObject()}. For example:</p>
- <pre>
-ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
-animation.setDuration(1000);
-animation.start();
-</pre>
-
- <p>In this code, the {@link android.animation.ValueAnimator} starts calculating the values of the
- animation, between 0 and 1, for a duration of 1000 ms, when the <code>start()</code> method
- runs.</p>
-
- <p>You can also specify a custom type to animate by doing the following:</p>
- <pre>
-ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
-animation.setDuration(1000);
-animation.start();
-</pre>
-
- <p>In this code, the {@link android.animation.ValueAnimator} starts calculating the values of the
- animation, between <code>startPropertyValue</code> and <code>endPropertyValue</code> using the
- logic supplied by <code>MyTypeEvaluator</code> for a duration of 1000 ms, when the {@link
- android.animation.ValueAnimator#start start()} method runs.</p>
-
- <p>The previous code snippets, however, has no real effect on an object, because the {@link
- android.animation.ValueAnimator} does not operate on objects or properties directly. The most likely thing
- that you want to do is modify the objects that you want to animate with these calculated values. You do
- this by defining listeners in the {@link android.animation.ValueAnimator} to appropriately handle important events
- during the animation's lifespan, such as frame updates. When implementing the listeners, you can
- obtain the calculated value for that specific frame refresh by calling {@link
- android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()}. For more information on listeners,
- see the section about <a href="#listeners">Animation Listeners</a>.
-
- <h2 id="object-animator">Animating with ObjectAnimator</h2>
-
- <p>The {@link android.animation.ObjectAnimator} is a subclass of the {@link
- android.animation.ValueAnimator} (discussed in the previous section) and combines the timing
- engine and value computation of {@link android.animation.ValueAnimator} with the ability to
- animate a named property of a target object. This makes animating any object much easier, as you
- no longer need to implement the {@link android.animation.ValueAnimator.AnimatorUpdateListener},
- because the animated property updates automatically.</p>
-
- <p>Instantiating an {@link android.animation.ObjectAnimator} is similar to a {@link
- android.animation.ValueAnimator}, but you also specify the object and the name of that object's property (as
- a String) along with the values to animate between:</p>
- <pre>
-ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
-anim.setDuration(1000);
-anim.start();
-</pre>
-
- <p>To have the {@link android.animation.ObjectAnimator} update properties correctly, you must do
- the following:</p>
-
- <ul>
- <li>The object property that you are animating must have a setter function (in camel case) in the form of
- <code>set<propertyName>()</code>. Because the {@link android.animation.ObjectAnimator}
- automatically updates the property during animation, it must be able to access the property
- with this setter method. For example, if the property name is <code>foo</code>, you need to
- have a <code>setFoo()</code> method. If this setter method does not exist, you have three
- options:
-
- <ul>
- <li>Add the setter method to the class if you have the rights to do so.</li>
-
- <li>Use a wrapper class that you have rights to change and have that wrapper receive the
- value with a valid setter method and forward it to the original object.</li>
-
- <li>Use {@link android.animation.ValueAnimator} instead.</li>
- </ul>
- </li>
-
- <li>If you specify only one value for the <code>values...</code> parameter in one of the {@link
- android.animation.ObjectAnimator} factory methods, it is assumed to be the ending value of the
- animation. Therefore, the object property that you are animating must have a getter function
- that is used to obtain the starting value of the animation. The getter function must be in the
- form of <code>get<propertyName>()</code>. For example, if the property name is
- <code>foo</code>, you need to have a <code>getFoo()</code> method.</li>
-
- <li>The getter (if needed) and setter methods of the property that you are animating must
- operate on the same type as the starting and ending values that you specify to {@link
- android.animation.ObjectAnimator}. For example, you must have
- <code>targetObject.setPropName(float)</code> and <code>targetObject.getPropName(float)</code>
- if you construct the following {@link android.animation.ObjectAnimator}:
- <pre>
-ObjectAnimator.ofFloat(targetObject, "propName", 1f)
-</pre>
- </li>
-
- <li>Depending on what property or object you are animating, you might need to call the {@link
- android.view.View#invalidate invalidate()} method on a View force the screen to redraw itself with the
- updated animated values. You do this in the
- {@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate onAnimationUpdate()}
- callback. For example, animating the color property of a Drawable object only cause updates to the
- screen when that object redraws itself. All of the property setters on View, such as
- {@link android.view.View#setAlpha setAlpha()} and {@link android.view.View#setTranslationX setTranslationX()}
- invalidate the View properly, so you do not need to invalidate the View when calling these
- methods with new values. For more information on listeners, see the section about <a href="#listeners">Animation Listeners</a>.
- </li>
- </ul>
-
- <h2 id="choreography">Choreographing Multiple Animations with AnimatorSet</h2>
-
- <p>In many cases, you want to play an animation that depends on when another animation starts or
- finishes. The Android system lets you bundle animations together into an {@link
- android.animation.AnimatorSet}, so that you can specify whether to start animations
- simultaneously, sequentially, or after a specified delay. You can also nest {@link
- android.animation.AnimatorSet} objects within each other.</p>
-
- <p>The following sample code taken from the <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing
- Balls</a> sample (modified for simplicity) plays the following {@link android.animation.Animator}
- objects in the following manner:</p>
-
- <ol>
- <li>Plays <code>bounceAnim</code>.</li>
-
- <li>Plays <code>squashAnim1</code>, <code>squashAnim2</code>, <code>stretchAnim1</code>, and
- <code>stretchAnim2</code> at the same time.</li>
-
- <li>Plays <code>bounceBackAnim</code>.</li>
-
- <li>Plays <code>fadeAnim</code>.</li>
- </ol>
- <pre>
-AnimatorSet bouncer = new AnimatorSet();
-bouncer.play(bounceAnim).before(squashAnim1);
-bouncer.play(squashAnim1).with(squashAnim2);
-bouncer.play(squashAnim1).with(stretchAnim1);
-bouncer.play(squashAnim1).with(stretchAnim2);
-bouncer.play(bounceBackAnim).after(stretchAnim2);
-ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
-fadeAnim.setDuration(250);
-AnimatorSet animatorSet = new AnimatorSet();
-animatorSet.play(bouncer).before(fadeAnim);
-animatorSet.start();
-</pre>
-
- <p>For a more complete example on how to use animator sets, see the <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing
- Balls</a> sample in APIDemos.</p>
-
-<h2 id="listeners">Animation Listeners</h2>
-<p>
-You can listen for important events during an animation's duration with the listeners described below.
-</p>
-
- <ul>
- <li>{@link android.animation.Animator.AnimatorListener}
-
- <ul>
- <li>{@link android.animation.Animator.AnimatorListener#onAnimationStart onAnimationStart()}
- - Called when the animation starts.</li>
-
- <li>{@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()} -
- Called when the animation ends.</li>
-
- <li>{@link android.animation.Animator.AnimatorListener#onAnimationRepeat
- onAnimationRepeat()} - Called when the animation repeats itself.</li>
-
- <li>{@link android.animation.Animator.AnimatorListener#onAnimationCancel
- onAnimationCancel()} - Called when the animation is canceled. A cancelled animation
- also calls {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()},
- regardless of how they were ended.</li>
- </ul>
- </li>
-
- <li>{@link android.animation.ValueAnimator.AnimatorUpdateListener}
-
- <ul>
- <li>
- <p>{@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate
- onAnimationUpdate()} - called on every frame of the animation. Listen to this event to
- use the calculated values generated by {@link android.animation.ValueAnimator} during an
- animation. To use the value, query the {@link android.animation.ValueAnimator} object
- passed into the event to get the current animated value with the {@link
- android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()} method. Implementing this
- listener is required if you use {@link android.animation.ValueAnimator}. </p>
-
- <p>
- Depending on what property or object you are animating, you might need to call
- {@link android.view.View#invalidate invalidate()} on a View to force that area of the
- screen to redraw itself with the new animated values. For example, animating the
- color property of a Drawable object only cause updates to the screen when that object
- redraws itself. All of the property setters on View,
- such as {@link android.view.View#setAlpha setAlpha()} and
- {@link android.view.View#setTranslationX setTranslationX()} invalidate the View
- properly, so you do not need to invalidate the View when calling these methods with new values.
- </p>
-
- </li>
- </ul>
- </li>
- </ul>
-
-<p>You can extend the {@link android.animation.AnimatorListenerAdapter} class instead of
-implementing the {@link android.animation.Animator.AnimatorListener} interface, if you do not
-want to implement all of the methods of the {@link android.animation.Animator.AnimatorListener}
-interface. The {@link android.animation.AnimatorListenerAdapter} class provides empty
-implementations of the methods that you can choose to override.</p>
- <p>For example, the <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing
- Balls</a> sample in the API demos creates an {@link android.animation.AnimatorListenerAdapter}
- for just the {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()}
- callback:</p>
- <pre>
-ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
-fadeAnim.setDuration(250);
-fadeAnim.addListener(new AnimatorListenerAdapter() {
-public void onAnimationEnd(Animator animation) {
- balls.remove(((ObjectAnimator)animation).getTarget());
-}
-</pre>
-
-
- <h2 id="layout">Animating Layout Changes to ViewGroups</h2>
-
- <p>The property animation system provides the capability to animate changes to ViewGroup objects
- as well as provide an easy way to animate View objects themselves.</p>
-
- <p>You can animate layout changes within a ViewGroup with the {@link
- android.animation.LayoutTransition} class. Views inside a ViewGroup can go through an appearing
- and disappearing animation when you add them to or remove them from a ViewGroup or when you call
- a View's {@link android.view.View#setVisibility setVisibility()} method with {@link
- android.view.View#VISIBLE}, android.view.View#INVISIBLE}, or {@link android.view.View#GONE}. The remaining Views in the
- ViewGroup can also animate into their new positions when you add or remove Views. You can define
- the following animations in a {@link android.animation.LayoutTransition} object by calling {@link
- android.animation.LayoutTransition#setAnimator setAnimator()} and passing in an {@link
- android.animation.Animator} object with one of the following {@link
- android.animation.LayoutTransition} constants:</p>
-
- <ul>
- <li><code>APPEARING</code> - A flag indicating the animation that runs on items that are
- appearing in the container.</li>
-
- <li><code>CHANGE_APPEARING</code> - A flag indicating the animation that runs on items that are
- changing due to a new item appearing in the container.</li>
-
- <li><code>DISAPPEARING</code> - A flag indicating the animation that runs on items that are
- disappearing from the container.</li>
-
- <li><code>CHANGE_DISAPPEARING</code> - A flag indicating the animation that runs on items that
- are changing due to an item disappearing from the container.</li>
- </ul>
-
- <p>You can define your own custom animations for these four types of events to customize the look
- of your layout transitions or just tell the animation system to use the default animations.</p>
-
- <p>The <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.html">
- LayoutAnimations</a> sample in API Demos shows you how to define animations for layout
- transitions and then set the animations on the View objects that you want to animate.</p>
-
- <p>The <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimationsByDefault.html">
- LayoutAnimationsByDefault</a> and its corresponding <a href=
- "{@docRoot}resources/samples/ApiDemos/res/layout/layout_animations_by_default.html">layout_animations_by_default.xml</a>
- layout resource file show you how to enable the default layout transitions for ViewGroups in XML.
- The only thing that you need to do is to set the <code>android:animateLayoutchanges</code>
- attribute to <code>true</code> for the ViewGroup. For example:</p>
- <pre>
-<LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:id="@+id/verticalContainer"
- android:animateLayoutChanges="true" />
-</pre>
-
- <p>Setting this attribute to true automatically animates Views that are added or removed from the
- ViewGroup as well as the remaining Views in the ViewGroup.</p>
-
- <h2 id="type-evaluator">Using a TypeEvaluator</h2>
-
- <p>If you want to animate a type that is unknown to the Android system, you can create your own
- evaluator by implementing the {@link android.animation.TypeEvaluator} interface. The types that
- are known by the Android system are <code>int</code>, <code>float</code>, or a color, which are
- supported by the {@link android.animation.IntEvaluator}, {@link
- android.animation.FloatEvaluator}, and {@link android.animation.ArgbEvaluator} type
- evaluators.</p>
-
- <p>There is only one method to implement in the {@link android.animation.TypeEvaluator}
- interface, the {@link android.animation.TypeEvaluator#evaluate evaluate()} method. This allows
- the animator that you are using to return an appropriate value for your animated property at the
- current point of the animation. The {@link android.animation.FloatEvaluator} class demonstrates
- how to do this:</p>
- <pre>
-public class FloatEvaluator implements TypeEvaluator {
-
- public Object evaluate(float fraction, Object startValue, Object endValue) {
- float startFloat = ((Number) startValue).floatValue();
- return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
- }
-}
-</pre>
-
- <p class="note"><strong>Note:</strong> When {@link android.animation.ValueAnimator} (or {@link
- android.animation.ObjectAnimator}) runs, it calculates a current elapsed fraction of the
- animation (a value between 0 and 1) and then calculates an interpolated version of that depending
- on what interpolator that you are using. The interpolated fraction is what your {@link
- android.animation.TypeEvaluator} receives through the <code>fraction</code> parameter, so you do
- not have to take into account the interpolator when calculating animated values.</p>
-
- <h2 id="interpolators">Using Interpolators</h2>
-
- <p>An interpolator define how specific values in an animation are calculated as a function of
- time. For example, you can specify animations to happen linearly across the whole animation,
- meaning the animation moves evenly the entire time, or you can specify animations to use
- non-linear time, for example, using acceleration or deceleration at the beginning or end of the
- animation.</p>
-
- <p>Interpolators in the animation system receive a fraction from Animators that represent the
- elapsed time of the animation. Interpolators modify this fraction to coincide with the type of
- animation that it aims to provide. The Android system provides a set of common interpolators in
- the {@link android.view.animation android.view.animation package}. If none of these suit your
- needs, you can implement the {@link android.animation.TimeInterpolator} interface and create your
- own.</p>
-
- <p>As an example, how the default interpolator {@link
- android.view.animation.AccelerateDecelerateInterpolator} and the {@link
- android.view.animation.LinearInterpolator} calculate interpolated fractions are compared below.
- The {@link android.view.animation.LinearInterpolator} has no effect on the elapsed fraction. The {@link
- android.view.animation.AccelerateDecelerateInterpolator} accelerates into the animation and
- decelerates out of it. The following methods define the logic for these interpolators:</p>
-
- <p><strong>AccelerateDecelerateInterpolator</strong></p>
- <pre>
-public float getInterpolation(float input) {
- return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
-}
-</pre>
-
- <p><strong>LinearInterpolator</strong></p>
- <pre>
-public float getInterpolation(float input) {
- return input;
-}
-</pre>
-
- <p>The following table represents the approximate values that are calculated by these
- interpolators for an animation that lasts 1000ms:</p>
-
- <table>
- <tr>
- <th>ms elapsed</th>
-
- <th>Elapsed fraction/Interpolated fraction (Linear)</th>
-
- <th>Interpolated fraction (Accelerate/Decelerate)</th>
- </tr>
-
- <tr>
- <td>0</td>
-
- <td>0</td>
-
- <td>0</td>
- </tr>
-
- <tr>
- <td>200</td>
-
- <td>.2</td>
-
- <td>.1</td>
- </tr>
-
- <tr>
- <td>400</td>
-
- <td>.4</td>
-
- <td>.345</td>
- </tr>
-
- <tr>
- <td>600</td>
-
- <td>.6</td>
-
- <td>.8</td>
- </tr>
-
- <tr>
- <td>800</td>
-
- <td>.8</td>
-
- <td>.9</td>
- </tr>
-
- <tr>
- <td>1000</td>
-
- <td>1</td>
-
- <td>1</td>
- </tr>
- </table>
-
- <p>As the table shows, the {@link android.view.animation.LinearInterpolator} changes the values
- at the same speed, .2 for every 200ms that passes. The {@link
- android.view.animation.AccelerateDecelerateInterpolator} changes the values faster than {@link
- android.view.animation.LinearInterpolator} between 200ms and 600ms and slower between 600ms and
- 1000ms.</p>
-
- <h2 id="keyframes">Specifying Keyframes</h2>
-
- <p>A {@link android.animation.Keyframe} object consists of a time/value pair that lets you define
- a specific state at a specific time of an animation. Each keyframe can also have its own
- interpolator to control the behavior of the animation in the interval between the previous
- keyframe's time and the time of this keyframe.</p>
-
- <p>To instantiate a {@link android.animation.Keyframe} object, you must use one of the factory
- methods, {@link android.animation.Keyframe#ofInt ofInt()}, {@link
- android.animation.Keyframe#ofFloat ofFloat()}, or {@link android.animation.Keyframe#ofObject
- ofObject()} to obtain the appropriate type of {@link android.animation.Keyframe}. You then call
- the {@link android.animation.PropertyValuesHolder#ofKeyframe ofKeyframe()} factory method to
- obtain a {@link android.animation.PropertyValuesHolder} object. Once you have the object, you can
- obtain an animator by passing in the {@link android.animation.PropertyValuesHolder} object and
- the object to animate. The following code snippet demonstrates how to do this:</p>
- <pre>
-Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
-Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
-Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
-PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
-ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
-rotationAnim.setDuration(5000ms);
-</pre>
-
- <p>For a more complete example on how to use keyframes, see the <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html">
- MultiPropertyAnimation</a> sample in APIDemos.</p>
-
- <h2 id="views">Animating Views</h2>
-
- <p>The property animation system allow streamlined animation of View objects and offerse
- a few advantages over the view animation system. The view
- animation system transformed View objects by changing the way that they were drawn. This was
- handled in the container of each View, because the View itself had no properties to manipulate.
- This resulted in the View being animated, but caused no change in the View object itself. This
- led to behavior such as an object still existing in its original location, even though it was
- drawn on a different location on the screen. In Android 3.0, new properties and the corresponding
- getter and setter methods were added to eliminate this drawback.</p>
- <p>The property animation system
- can animate Views on the screen by changing the actual properties in the View objects. In
- addition, Views also automatically call the {@link android.view.View#invalidate invalidate()}
- method to refresh the screen whenever its properties are changed. The new properties in the {@link
- android.view.View} class that facilitate property animations are:</p>
-
- <ul>
- <li><code>translationX</code> and <code>translationY</code>: These properties control where the
- View is located as a delta from its left and top coordinates which are set by its layout
- container.</li>
-
- <li><code>rotation</code>, <code>rotationX</code>, and <code>rotationY</code>: These properties
- control the rotation in 2D (<code>rotation</code> property) and 3D around the pivot point.</li>
-
- <li><code>scaleX</code> and <code>scaleY</code>: These properties control the 2D scaling of a
- View around its pivot point.</li>
-
- <li><code>pivotX</code> and <code>pivotY</code>: These properties control the location of the
- pivot point, around which the rotation and scaling transforms occur. By default, the pivot
- point is located at the center of the object.</li>
-
- <li><code>x</code> and <code>y</code>: These are simple utility properties to describe the
- final location of the View in its container, as a sum of the left and top values and
- translationX and translationY values.</li>
-
- <li><code>alpha</code>: Represents the alpha transparency on the View. This value is 1 (opaque)
- by default, with a value of 0 representing full transparency (not visible).</li>
- </ul>
-
- <p>To animate a property of a View object, such as its color or rotation value, all you need to
- do is create a property animator and specify the View property that you want to
- animate. For example:</p>
- <pre>
-ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);
-</pre>
-
-<p>For more information on creating animators, see the sections on animating with
-<a href="#value-animator">ValueAnimator</a> and <a href="#object-animator">ObjectAnimator</a>.
-</p>
-
-<h3 id="view-prop-animator">Animating with ViewPropertyAnimator</h3>
-<p>The {@link android.view.ViewPropertyAnimator} provides a simple way to animate several
-properties of a {@link android.view.View} in parallel, using a single underlying {@link
-android.animation.Animator}
-object. It behaves much like an {@link android.animation.ObjectAnimator}, because it modifies the
-actual values of the view's properties, but is more efficient when animating many properties at
-once. In addition, the code for using the {@link android.view.ViewPropertyAnimator} is much
-more concise and easier to read. The following code snippets show the differences in using multiple
-{@link android.animation.ObjectAnimator} objects, a single
-{@link android.animation.ObjectAnimator}, and the {@link android.view.ViewPropertyAnimator} when
-simultaneously animating the <code>x</code> and <code>y</code> property of a view.</p>
-
-<p><strong>Multiple ObjectAnimator objects</strong></p>
-<pre>
-ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 50f);
-ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 100f);
-AnimatorSet animSetXY = new AnimatorSet();
-animSetXY.playTogether(animX, animY);
-animSetXY.start();
-</pre>
-
-<p><strong>One ObjectAnimator</strong></p>
-<pre>
-PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
-PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
-ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
-</pre>
-
-<p><strong>ViewPropertyAnimator</strong></p>
-<pre>
-myView.animate().x(50f).y(100f);
-</pre>
-
-<p>
-For more detailed information about {@link
-android.view.ViewPropertyAnimator}, see the corresponding Android Developers
-<a href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html">blog
-post</a>.</p>
-
-<h2 id="declaring-xml">Declaring Animations in XML</h2>
-
- <p>The property animation system lets you declare property animations with XML instead of doing
- it programmatically. By defining your animations in XML, you can easily reuse your animations
-in multiple activities and more easily edit the animation sequence.</p>
-
-<p>To distinguish animation files that use the new property animation APIs from those that use the
-legacy <a href="{@docRoot}guide/topics/graphics/view-animation.html">view animation</a> framework,
-starting with Android 3.1, you should save the XML files for property animations in the {@code
-res/animator/} directory (instead of {@code res/anim/}). Using the {@code animator} directory name
-is optional, but necessary if you want to use the layout editor tools in the Eclipse ADT plugin (ADT
-11.0.0+), because ADT only searches the {@code res/animator/} directory for property animation
-resources.</p>
-
-<p>The following property animation classes have XML declaration support with the
- following XML tags:</p>
-
- <ul>
- <li>{@link android.animation.ValueAnimator} - <code><animator></code></li>
-
- <li>{@link android.animation.ObjectAnimator} - <code><objectAnimator></code></li>
-
- <li>{@link android.animation.AnimatorSet} - <code><set></code></li>
- </ul>
-
-<p>See <a href="{@docRoot}guide/topics/resources/animation-resource.html#Property">Animation Resources</a>
-
+<dt><strong><a href="{@docRoot}guide/topics/graphics/drawable-animation.html">Drawable
+Animation</a></strong></dt>
+<dd>Drawable animation involves displaying {@link android.graphics.drawable.Drawable} resources one
+after another, like a roll of film. This method of animation is useful if you want to animate
+things that are easier to represent with Drawable resources, such as a progression of bitmaps.</dd>
diff --git a/docs/html/guide/topics/graphics/drawable-animation.jd b/docs/html/guide/topics/graphics/drawable-animation.jd
new file mode 100644
index 0000000..65bf02f
--- /dev/null
+++ b/docs/html/guide/topics/graphics/drawable-animation.jd
@@ -0,0 +1,66 @@
+page.title=Drawable Animation
+parent.title=Animation
+parent.link=animation.html
+@jd:body
+
+ <p>Drawable animation lets you load a series of Drawable resources one after
+ another to create an animation. This is a traditional animation in the sense that it is created with a sequence of different
+ images, played in order, like a roll of film. The {@link
+ android.graphics.drawable.AnimationDrawable} class is the basis for Drawable animations.</p>
+
+ <p>While you can define the frames of an animation in your code, using the {@link
+ android.graphics.drawable.AnimationDrawable} class API, it's more simply accomplished with a
+ single XML file that lists the frames that compose the animation. The XML file for this kind
+ of animation belongs in the <code>res/drawable/</code> directory of
+ your Android project. In this case, the instructions are the order and duration for each frame of
+ the animation.</p>
+
+ <p>The XML file consists of an <code><animation-list></code> element as the root node and a
+ series of child <code><item></code> nodes that each define a frame: a drawable resource for
+ the frame and the frame duration. Here's an example XML file for a Drawable animation:</p>
+ <pre>
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
+ android:oneshot="true">
+ <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
+ <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
+ <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
+</animation-list>
+</pre>
+
+ <p>This animation runs for just three frames. By setting the <code>android:oneshot</code>
+ attribute of the list to <var>true</var>, it will cycle just once then stop and hold on the last
+ frame. If it is set <var>false</var> then the animation will loop. With this XML saved as
+ <code>rocket_thrust.xml</code> in the <code>res/drawable/</code> directory of the project, it can
+ be added as the background image to a View and then called to play. Here's an example Activity,
+ in which the animation is added to an {@link android.widget.ImageView} and then animated when the
+ screen is touched:</p>
+ <pre>
+AnimationDrawable rocketAnimation;
+
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
+ rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
+ rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
+}
+
+public boolean onTouchEvent(MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ rocketAnimation.start();
+ return true;
+ }
+ return super.onTouchEvent(event);
+}
+</pre>
+
+ <p>It's important to note that the <code>start()</code> method called on the AnimationDrawable
+ cannot be called during the <code>onCreate()</code> method of your Activity, because the
+ AnimationDrawable is not yet fully attached to the window. If you want to play the animation
+ immediately, without requiring interaction, then you might want to call it from the <code>{@link
+ android.app.Activity#onWindowFocusChanged(boolean) onWindowFocusChanged()}</code> method in your
+ Activity, which will get called when Android brings your window into focus.</p>
+
+ <p>For more information on the XML syntax, available tags and attributes, see <a href=
+ "{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.</p>
diff --git a/docs/html/guide/topics/graphics/hardware-accel.jd b/docs/html/guide/topics/graphics/hardware-accel.jd
new file mode 100644
index 0000000..c8703a5
--- /dev/null
+++ b/docs/html/guide/topics/graphics/hardware-accel.jd
@@ -0,0 +1,522 @@
+page.title=Hardware Acceleration
+parent.title=Graphics
+parent.link=index.html
+@jd:body
+
+
+ <div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+
+ <ol>
+ <li><a href="#controlling">Controlling Hardware Acceleration</a></li>
+ <li><a href="#determining">Determining if a View is Hardware Accelerated</a></li>
+ <li><a href="#model">Android Drawing Models</a>
+
+ <ol>
+ <li><a href="#software-model">Software-based drawing model</a></li>
+ <li><a href="#hardware-model">Hardware accelerated drawing model</a></li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#unsupported">Unsupported Drawing Operations</a>
+ </li>
+
+
+
+ <li>
+ <a href="#layers">View Layers</a>
+
+ <ol>
+ <li><a href="#layers-anims">View Layers and Animations</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#tips">Tips and Tricks</a></li>
+ </ol>
+
+ <h2>See also</h2>
+
+ <ol>
+ <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL with the Framework
+ APIs</a></li>
+
+ <li><a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a></li>
+ </ol>
+ </div>
+ </div>
+
+ <p>Beginning in Android 3.0 (API level 11), the Android 2D rendering pipeline is designed to
+ better support hardware acceleration. Hardware acceleration carries out all drawing operations
+ that are performed on a {@link android.view.View}'s canvas using the GPU.</p>
+
+ <p>The easiest way to enable hardware acceleration is to turn it on
+ globally for your entire application. If your application uses only standard views and {@link
+ android.graphics.drawable.Drawable}s, turning it on globally should not cause any adverse
+ effects. However, because hardware acceleration is not supported for all of the 2D drawing
+ operations, turning it on might affect some of your applications that use custom views or drawing
+ calls. Problems usually manifest themselves as invisible elements, exceptions, or wrongly
+ rendered pixels. To remedy this, Android gives you the option to enable or disable hardware
+ acceleration at the following levels:</p>
+
+ <ul>
+ <li>Application</li>
+
+ <li>Activity</li>
+
+ <li>Window</li>
+
+ <li>View</li>
+ </ul>
+
+ <p>If your application performs custom drawing, test your application on actual hardware
+devices with hardware acceleration turned on to find any problems. The <a
+href="#drawing-support">Unsupported drawing operations</a> section describes known issues with
+drawing operations that cannot be hardware accelerated and how to work around them.</p>
+
+
+ <h2 id="controlling">Controlling Hardware Acceleration</h2>
+ <p>You can control hardware acceleration at the following levels:</p>
+ <ul>
+ <li>Application</li>
+
+ <li>Activity</li>
+
+ <li>Window</li>
+
+ <li>View</li>
+ </ul>
+
+ <h4>Application level</h4>
+ <p>In your Android manifest file, add the following attribute to the
+ <a href="{@docRoot}guide/topics/manifest/application-element.html">
+ <code><application></code></a> tag to enable hardware acceleration for your entire
+ application:</p>
+
+<pre>
+<application android:hardwareAccelerated="true" ...>
+</pre>
+
+ <h4>Activity level</h4>
+ <p>If your application does not behave properly with hardware acceleration turned on globally,
+ you can control it for individual activities as well. To enable or disable hardware acceleration
+ at the activity level, you can use the <code>android:hardwareAccelerated</code>
+ attribute for the <a href="{@docRoot}guide/topics/manifest/activity-element.html">
+ <code><activity></code></a> element. The following example enables hardware acceleration
+for the entire application but disables it for one activity:</p>
+
+<pre>
+<application android:hardwareAccelerated="true">
+ <activity ... />
+ <activity android:hardwareAccelerated="false" />
+</application>
+</pre>
+
+ <h4>Window level</h4>
+ <p>If you need even more fine-grained control, you can enable hardware acceleration for a given
+ window with the following code:</p>
+
+<pre>
+getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+ WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+
+</pre>
+
+<p class="note"><strong>Note</strong>: You currently cannot disable hardware acceleration at
+the window level.</p>
+
+ <h4>View level</h4>
+
+ <p>You can disable hardware acceleration for an individual view at runtime with the
+following code:</p>
+
+<pre>
+myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+</pre>
+
+<p class="note"><strong>Note</strong>: You currently cannot enable hardware acceleration at
+the view level. View layers have other functions besides disabling hardware acceleration. See <a
+href="#layers">View layers</a> for more information about their uses.</p>
+
+ <h2 id="determining">Determining if a View is Hardware Accelerated</h2>
+
+ <p>It is sometimes useful for an application to know whether it is currently hardware
+ accelerated, especially for things such as custom views. This is particularly useful if your
+ application does a lot of custom drawing and not all operations are properly supported by the new
+ rendering pipeline.</p>
+
+ <p>There are two different ways to check whether the application is hardware accelerated:</p>
+
+ <ul>
+ <li>{@link android.view.View#isHardwareAccelerated View.isHardwareAccelerated()} returns
+ <code>true</code> if the {@link android.view.View} is attached to a hardware accelerated
+ window.</li>
+
+ <li>{@link android.graphics.Canvas#isHardwareAccelerated Canvas.isHardwareAccelerated()}
+ returns <code>true</code> if the {@link android.graphics.Canvas} is hardware accelerated</li>
+ </ul>
+
+ <p>If you must do this check in your drawing code, use {@link
+ android.graphics.Canvas#isHardwareAccelerated Canvas.isHardwareAccelerated()} instead of {@link
+ android.view.View#isHardwareAccelerated View.isHardwareAccelerated()} when possible. When a view
+ is attached to a hardware accelerated window, it can still be drawn using a non-hardware
+ accelerated Canvas. This happens, for instance, when drawing a view into a bitmap for caching
+ purposes.</p>
+
+
+ <h2 id="model">Android Drawing Models</h2>
+
+ <p>When hardware acceleration is enabled, the Android framework utilizes a new drawing model that
+ utilizes <em>display lists</em> to render your application to the screen. To fully understand
+ display lists and how they might affect your application, it is useful to understand how Android
+ draws views without hardware acceleration as well. The following sections describe the
+ software-based and hardware-accelerated drawing models.</p>
+
+<h3>Software-based drawing model</h3>
+<p>In the software drawing model, views are drawn with the following two steps:</p>
+ <ol>
+ <li>Invalidate the hierarchy</li>
+
+ <li>Draw the hierarchy</li>
+ </ol>
+
+ <p>Whenever an application needs to update a part of its UI, it invokes {@link
+ android.view.View#invalidate invalidate()} (or one of its variants) on any view that has changed
+ content. The invalidation messages are propagated all the way up the view hierarchy to compute
+ the regions of the screen that need to be redrawn (the dirty region). The Android system then
+ draws any view in the hierarchy that intersects with the dirty region. Unfortunately, there are
+ two drawbacks to this drawing model:</p>
+ <ul>
+ <li>First, this model requires execution of a lot of code on every draw pass. For example, if
+your application calls {@link android.view.View#invalidate invalidate()} on a button and that
+button sits on top of another view, the Android system redraws the view even though it hasn't
+changed.</li>
+ <li>The second issue is that the drawing model can hide bugs in your application. Since the
+ Android system redraws views when they intersect the dirty region, a view whose content you
+ changed might be redrawn even though {@link android.view.View#invalidate invalidate()} was not
+ called on it. When this happens, you are relying on another view being invalidated to obtain the
+ proper behavior. This behavior can change every time you modify your application. Because of
+ this, you should always call {@link android.view.View#invalidate invalidate()} on your custom
+ views whenever you modify data or state that affects the view’s drawing code.</li>
+</ul>
+
+ <p class="note"><strong>Note</strong>: Android views automatically call {@link
+ android.view.View#invalidate invalidate()} when their properties change, such as the background
+ color or the text in a {@link android.widget.TextView}.</p>
+
+ <h3>Hardware accelerated drawing model</h3>
+ <p>The Android system still uses {@link android.view.View#invalidate invalidate()} and {@link
+ android.view.View#draw draw()} to request screen updates and to render views, but handles the
+ actual drawing differently. Instead of executing the drawing commands immediately, the Android
+ system records them inside display lists, which contain the output of the view hierarchy’s
+ drawing code. Another optimization is that the Android system only needs to record and update
+ display lists for views marked dirty by an {@link android.view.View#invalidate invalidate()}
+ call. Views that have not been invalidated can be redrawn simply by re-issuing the previously
+ recorded display list. The new drawing model contains three stages:</p>
+
+ <ol>
+ <li>Invalidate the hierarchy</li>
+
+ <li>Record and update display lists</li>
+
+ <li>Draw the display lists</li>
+ </ol>
+
+ <p>With this model, you cannot rely on a view intersecting the dirty region to have its {@link
+ android.view.View#draw draw()} method executed. To ensure that the Android system records a
+ view’s display list, you must call {@link android.view.View#invalidate invalidate()}. Forgetting
+ to do so causes a view to look the same even after changing it, which is an easier bug to find if
+ it happens.</p>
+
+ <p>Using display lists also benefits animation performance because setting specific properties,
+ such as alpha or rotation, does not require invalidating the targeted view (it is done
+ automatically). This optimization also applies to views with display lists (any view when your
+ application is hardware accelerated.) For example, assume there is a {@link
+ android.widget.LinearLayout} that contains a {@link android.widget.ListView} above a {@link
+ android.widget.Button}. The display list for the {@link android.widget.LinearLayout} looks like
+ this:</p>
+
+ <ul>
+ <li>DrawDisplayList(ListView)</li>
+
+ <li>DrawDisplayList(Button)</li>
+ </ul>
+
+ <p>Assume now that you want to change the {@link android.widget.ListView}'s opacity. After
+ invoking <code>setAlpha(0.5f)</code> on the {@link android.widget.ListView}, the display list now
+ contains this:</p>
+
+ <ul>
+ <li>SaveLayerAlpha(0.5)</li>
+
+ <li>DrawDisplayList(ListView)</li>
+
+ <li>Restore</li>
+
+ <li>DrawDisplayList(Button)</li>
+ </ul>
+
+ <p>The complex drawing code of {@link android.widget.ListView} was not executed. Instead, the
+ system only updated the display list of the much simpler {@link android.widget.LinearLayout}. In
+ an application without hardware acceleration enabled, the drawing code of both the list and its
+ parent are executed again.</p>
+
+ <h2 id="unsupported">Unsupported Drawing Operations</h2>
+
+ <p>When hardware accelerated, the 2D rendering pipeline supports the most commonly used {@link
+ android.graphics.Canvas} drawing operations as well as many less-used operations. All of the
+ drawing operations that are used to render applications that ship with Android, default widgets
+ and layouts, and common advanced visual effects such as reflections and tiled textures are
+ supported. The following list describes known operations that are <strong>not supported</strong>
+ with hardware acceleration:</p>
+
+ <ul>
+ <li>
+ <strong>Canvas</strong>
+
+ <ul>
+ <li>{@link android.graphics.Canvas#clipPath clipPath()}</li>
+
+ <li>{@link android.graphics.Canvas#clipRegion clipRegion()}</li>
+
+ <li>{@link android.graphics.Canvas#drawPicture drawPicture()}</li>
+
+ <li>{@link android.graphics.Canvas#drawPosText drawPosText()}</li>
+
+ <li>{@link android.graphics.Canvas#drawTextOnPath drawTextOnPath()}</li>
+
+ <li>{@link android.graphics.Canvas#drawVertices drawVertices()}</li>
+ </ul>
+ </li>
+
+ <li>
+ <strong>Paint</strong>
+
+ <ul>
+ <li>{@link android.graphics.Paint#setLinearText setLinearText()}</li>
+
+ <li>{@link android.graphics.Paint#setMaskFilter setMaskFilter()}</li>
+
+ <li>{@link android.graphics.Paint#setRasterizer setRasterizer()}</li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>In addition, some operations behave differently with hardware acceleration enabled:</p>
+
+ <ul>
+ <li>
+ <strong>Canvas</strong>
+
+ <ul>
+ <li>{@link android.graphics.Canvas#clipRect clipRect()}: <code>XOR</code>,
+ <code>Difference</code> and <code>ReverseDifference</code> clip modes are ignored. 3D
+ transforms do not apply to the clip rectangle</li>
+
+ <li>{@link android.graphics.Canvas#drawBitmapMesh drawBitmapMesh()}: colors array is
+ ignored</li>
+
+ <li>{@link android.graphics.Canvas#drawLines drawLines()}: anti-aliasing is not
+ supported</li>
+
+ <li>{@link android.graphics.Canvas#setDrawFilter setDrawFilter()}: can be set, but is
+ ignored</li>
+ </ul>
+ </li>
+
+ <li>
+ <strong>Paint</strong>
+
+ <ul>
+ <li>{@link android.graphics.Paint#setDither setDither()}: ignored</li>
+
+ <li>{@link android.graphics.Paint#setFilterBitmap setFilterBitmap()}: filtering is always
+ on</li>
+
+ <li>{@link android.graphics.Paint#setShadowLayer setShadowLayer()}: works with text
+ only</li>
+ </ul>
+ </li>
+
+ <li>
+ <strong>ComposeShader</strong>
+
+ <ul>
+ <li>{@link android.graphics.ComposeShader} can only contain shaders of different types (a
+ {@link android.graphics.BitmapShader} and a {@link android.graphics.LinearGradient} for
+ instance, but not two instances of {@link android.graphics.BitmapShader} )</li>
+
+ <li>{@link android.graphics.ComposeShader} cannot contain a {@link
+ android.graphics.ComposeShader}</li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>If your application is affected by any of these missing features or limitations, you can turn
+ off hardware acceleration for just the affected portion of your application by calling
+ {@link android.view.View#setLayerType setLayerType(View.LAYER_TYPE_SOFTWARE, null)}. This way,
+you can still take advantage of hardware acceleratin everywhere else. See <a
+href="#controlling">Controlling Hardware Acceleration</a> for more information on how to enable and
+disable hardware acceleration at different levels in your application.
+
+
+
+ <h2 id="layers">View Layers</h2>
+
+ <p>In all versions of Android, views have had the ability to render into off-screen buffers,
+either by using a view's drawing cache, or by using {@link android.graphics.Canvas#saveLayer
+ Canvas.saveLayer()}. Off-screen buffers, or layers, have several uses. You can use them to get
+ better performance when animating complex views or to apply composition effects. For instance,
+ you can implement fade effects using <code>Canvas.saveLayer()</code> to temporarily render a view
+ into a layer and then composite it back on screen with an opacity factor.</p>
+
+ <p>Beginning in Android 3.0 (API level 11), you have more control on how and when to use layers
+ with the {@link android.view.View#setLayerType View.setLayerType()} method. This API takes two
+ parameters: the type of layer you want to use and an optional {@link android.graphics.Paint}
+ object that describes how the layer should be composited. You can use the {@link
+ android.graphics.Paint} parameter to apply color filters, special blending modes, or opacity to a
+ layer. A view can use one of three layer types:</p>
+
+ <ul>
+ <li>{@link android.view.View#LAYER_TYPE_NONE}: The view is rendered normally and is not backed
+ by an off-screen buffer. This is the default behavior.</li>
+
+ <li>{@link android.view.View#LAYER_TYPE_HARDWARE}: The view is rendered in hardware into a
+ hardware texture if the application is hardware accelerated. If the application is not hardware
+ accelerated, this layer type behaves the same as {@link
+ android.view.View#LAYER_TYPE_SOFTWARE}.</li>
+
+ <li>{@link android.view.View#LAYER_TYPE_SOFTWARE}: The view is rendered in software into a
+ bitmap.</li>
+ </ul>
+
+ <p>The type of layer you use depends on your goal:</p>
+
+ <ul>
+ <li><strong>Performance</strong>: Use a hardware layer type to render a view into a hardware
+ texture. Once a view is rendered into a layer, its drawing code does not have to be executed
+ until the view calls {@link android.view.View#invalidate invalidate()}. Some animations, such as
+ alpha animations, can then be applied directly onto the layer, which is very efficient
+ for the GPU to do.</li>
+
+ <li><strong>Visual effects</strong>: Use a hardware or software layer type and a {@link
+ android.graphics.Paint} to apply special visual treatments to a view. For instance, you can
+ draw a view in black and white using a {@link
+ android.graphics.ColorMatrixColorFilter}.</li>
+
+ <li><strong>Compatibility</strong>: Use a software layer type to force a view to be rendered in
+ software. If a view that is hardware accelerated (for instance, if your whole
+ application is hardware acclerated), is having rendering problems, this is an easy way to work
+around limitations of the hardware rendering
+ pipeline.</li>
+ </ul>
+
+ <h3 id="layers-anims">View layers and animations</h3>
+
+ <p>Hardware layers can deliver faster and smoother animations when your application
+is hardware accelerated. Running an animation at 60 frames per second is not always possible when
+animating complex views that issue a lot of drawing operations. This can be alleviated by
+using hardware layers to render the view to a hardware texture. The hardware texture can
+then be used to animate the view, eliminating the need for the view to constantly redraw itself
+when it is being animated. The view is not redrawn unless you change the view's
+properties, which calls {@link android.view.View#invalidate invalidate()}, or if you call {@link
+android.view.View#invalidate invalidate()} manually. If you are running an animation in
+your application and do not obtain the smooth results you want, consider enabling hardware layers on
+your animated views.</p>
+
+ <p>When a view is backed by a hardware layer, some of its properties are handled by the way the
+ layer is composited on screen. Setting these properties will be efficient because they do not
+ require the view to be invalidated and redrawn. The following list of properties affect the way
+ the layer is composited. Calling the setter for any of these properties results in optimal
+ invalidation and no redrawing of the targeted view:</p>
+
+ <ul>
+ <li><code>alpha</code>: Changes the layer's opacity</li>
+
+ <li><code>x</code>, <code>y</code>, <code>translationX</code>, <code>translationY</code>:
+Changes the layer's position</li>
+
+ <li><code>scaleX</code>, <code>scaleY</code>: Changes the layer's size</li>
+
+ <li><code>rotation</code>, <code>rotationX</code>, <code>rotationY</code>: Changes the
+ layer's orientation in 3D space</li>
+
+ <li><code>pivotX</code>, <code>pivotY</code>: Changes the layer's transformations origin</li>
+ </ul>
+
+ <p>These properties are the names used when animating a view with an {@link
+ android.animation.ObjectAnimator}. If you want to access these properties, call the appropriate
+ setter or getter. For instance, to modify the alpha property, call {@link
+ android.view.View#setAlpha setAlpha()}. The following code snippet shows the most efficient way
+ to rotate a viewiew in 3D around the Y-axis:</p>
+ <pre>
+view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ObjectAnimator.ofFloat(view, "rotationY", 180).start();
+</pre>
+
+ <p>Because hardware layers consume video memory, it is highly recommended that you enable them
+only for the duration of the animation and then disable them after the animation is done. You
+can accomplish this using animation listeners:</p>
+ <pre>
+View.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ObjectAnimator animator = ObjectAnimator.ofFloat(view, "rotationY", 180);
+animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ view.setLayerType(View.LAYER_TYPE_NONE, null);
+ }
+});
+animator.start();
+</pre>
+
+ <p>For more information on property animation, see <a href=
+ "{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a>.</p>
+
+ <h2 id="tips">Tips and Tricks</h2>
+
+ <p>Switching to hardware accelerated 2D graphics can instantly increase performance, but you
+ should still design your application to use the GPU effectively by following these
+ recommendations:</p>
+
+ <dl>
+ <dt><strong>Reduce the number of views in your application</strong></dt>
+
+ <dd>The more views the system has to draw, the slower it will be. This applies to the software
+ rendering pipeline as well. Reducing views is one of the easiest ways to optimize your UI.</dd>
+
+ <dt><strong>Avoid overdraw</strong></dt>
+
+ <dd>Do not draw too many layers on top of each other. Remove any views that are completely
+ obscured by other opaque views on top of it. If you need to draw several layers blended on top
+ of each other, consider merging them into a single layer. A good rule of thumb with current
+ hardware is to not draw more than 2.5 times the number of pixels on screen per frame
+ (transparent pixels in a bitmap count!).</dd>
+
+ <dt><strong>Don't create render objects in draw methods</strong></dt>
+
+ <dd>A common mistake is to create a new {@link android.graphics.Paint} or a new {@link
+android.graphics.Path} every time a rendering method is invoked. This forces the garbage
+collector to run more often and also bypasses caches and optimizations in the hardware
+pipeline.</dd>
+
+ <dt><strong>Don't modify shapes too often</strong></dt>
+
+ <dd>Complex shapes, paths, and circles for instance, are rendered using texture masks. Every
+ time you create or modify a path, the hardware pipeline creates a new mask, which can be
+ expensive.</dd>
+
+ <dt><strong>Don't modify bitmaps too often</strong></dt>
+
+ <dd>Every time you change the content of a bitmap, it is uploaded again as a GPU texture the
+ next time you draw it.</dd>
+
+ <dt><strong>Use alpha with care</strong></dt>
+
+ <dd>When you make a view translucent using {@link android.view.View#setAlpha setAlpha()},
+ {@link android.view.animation.AlphaAnimation}, or {@link android.animation.ObjectAnimator}, it
+ is rendered in an off-screen buffer which doubles the required fill-rate. When applying alpha
+ on very large views, consider setting the view's layer type to
+ <code>LAYER_TYPE_HARDWARE</code>.</dd>
+ </dl>
diff --git a/docs/html/guide/topics/graphics/index.jd b/docs/html/guide/topics/graphics/index.jd
index 2490e39..ffa9a39 100644
--- a/docs/html/guide/topics/graphics/index.jd
+++ b/docs/html/guide/topics/graphics/index.jd
@@ -3,208 +3,49 @@
<div id="qv-wrapper">
<div id="qv">
- <h2>In this document</h2>
+ <h2>Topics</h2>
<ol>
- <li><a href="#options">Consider your Options</a></li>
- <li><a href="#draw-to-view">Simple Graphics Inside a View</a></li>
- <li><a href="#draw-with-canvas">Draw with a Canvas</a>
- <ol>
- <li><a href="#on-view">On a View</a></li>
- <li><a href="#on-surfaceview">On a SurfaceView</a></li>
- </ol>
- </li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a></li>
- <li><a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a></li>
+ <li><a href="{@docRoot}guide/topics/graphics/canvas.html">Canvas and Drawables</a></li>
+ <li><a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware Acceleration</a></li>
+ <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
</ol>
</div>
</div>
-<p>Android graphics are powered by a custom 2D graphics library, and the framework provides
-support for high performance 3D graphics in the form of OpenGL ES and RenderScript. The most
-common 2D graphics APIs can be found in the {@link android.graphics.drawable drawable package}.
-OpenGL APIs are available from the Khronos {@link javax.microedition.khronos.opengles OpenGL ES} and
-the {@link android.opengl} packages. The RenderScript APIs are available in the
-{@link android.renderscript} package.</p>
-
-<p>When starting a project, it's important to consider exactly what your graphical demands will be.
+<p>When writing an application, it's important to consider exactly what your graphical demands will be.
Varying graphical tasks are best accomplished with varying techniques. For example, graphics and animations
for a rather static application should be implemented much differently than graphics and animations
-for an interactive game or 3D rendering.</p>
-
-<p>Here, we'll discuss a few of the options you have for drawing graphics on Android,
-and which tasks they're best suited for.</p>
-
-<p>If you're specifically looking for information on drawing 3D graphics, this page won't
-help a lot. However, the information below about how to <a href="#draw-with-canvas">Draw with a
-Canvas</a> (and the section on SurfaceView), will give you a quick idea of how you should draw to
-the View hierarchy. For more information on Android's 3D graphics APIs, see
-the <a href="opengl.html">3D with OpenGL</a> and
-<a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> documents.</p>
-
-
-<h2 id="options">Consider your Options</h2>
-
-<p>When drawing 2D graphics, you'll typically do so in one of two ways:</p>
-<ol type="a">
- <li>Draw your graphics or animations into a View object from your layout. In this manner,
- the drawing (and any animation) of your graphics is handled by the system's
- normal View hierarchy drawing process — you simply define the graphics to go inside the View.</li>
- <li>Draw your graphics directly to a Canvas. This way, you personally call the appropriate class's
- <code>draw()</code> method (passing it your Canvas), or one of the Canvas <code>draw...()</code> methods (like
- <code>{@link android.graphics.Canvas#drawPicture(Picture,Rect) drawPicture()}</code>). In doing so, you are also in
- control of any animation.</li>
-</ol>
-
-<p>Option "a," drawing to a View, is your best choice when you want to draw simple graphics that do not
-need to change dynamically and are not part of a performance-intensive game. For example, you should
-draw your graphics into a View when you want to display a static graphic or predefined animation, within
-an otherwise static application. Read <a href="#draw-to-view">Simple Graphics Inside a View</a>.</li>
-
-<p>Option "b," drawing to a Canvas, is better when your application needs to regularly re-draw itself.
-Basically, any video game should be drawing to the Canvas on its own. However, there's more than
-one way to do this: </p>
-<ul>
- <li>In the same thread as your UI Activity, wherein you create a custom View component in
- your layout, call <code>{@link android.view.View#invalidate()}</code> and then handle the
- <code>{@link android.view.View#onDraw(Canvas) onDraw()}</code> callback..</li>
- <li>Or, in a separate thread, wherein you manage a {@link android.view.SurfaceView} and
- perform draws to the Canvas as fast as your thread is capable
- (you do not need to request <code>invalidate()</code>).</li>
-</ul>
-<p>...Begin by reading <a href="#draw-with-canvas">Draw with a Canvas</a>.</p>
-
-<h2 id="draw-to-view">Simple Graphics Inside a View</h2>
-
-<p>If you'll be drawing some simple graphics (images, shapes, colors, pre-defined animations, etc.),
-then you should probably just draw to the background of a View or
-to the content of an {@link android.widget.ImageView} in your layout.
-In this case, you can skip the rest of this document and learn how to
-draw graphics and animations in the <a href="2d-graphics.html">2D Graphics</a> document.
+for an interactive game. Here, we'll discuss a few of the options you have for drawing graphics
+on Android and which tasks they're best suited for.
</p>
+<dl>
+<dt><strong><a href="{@docRoot}guide/topics/graphics/2d-graphics.html">Canvas and
+Drawables</a></strong></dt>
+<dd>Android provides a set of {@link android.view.View} widgets that provide general functionality
+for a wide array of user interfaces. You can also extend these widgets to modify the way they
+look or behave. In addition, you can do your own custom 2D rendering using the various drawing
+methods contained in the {@link android.graphics.Canvas} class or create {@link
+android.graphics.drawable.Drawable} objects for things such as textured buttons or frame-by-frame
+animations.</dd>
-<h2 id="draw-with-canvas">Draw with a Canvas</h2>
+<dt><strong><a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware
+Acceleration</a></strong></dt>
+<dd>Beginning in Android 3.0, you can hardware accelerate the majority of
+the drawing done by the Canvas APIs to further increase their performance.</dd>
-<p>When you're writing an application in which you would like to perform specialized drawing
-and/or control the animation of graphics,
-you should do so by drawing through a {@link android.graphics.Canvas}. A Canvas works for you as
-a pretense, or interface, to the actual surface upon which your graphics will be drawn — it
-holds all of your "draw" calls. Via the Canvas, your drawing is actually performed upon an
-underlying {@link android.graphics.Bitmap}, which is placed into the window.</p>
-
-<p>In the event that you're drawing within the <code>{@link android.view.View#onDraw(Canvas) onDraw()}</code>
-callback method, the Canvas is provided for you and you need only place your drawing calls upon it.
-You can also acquire a Canvas from <code>{@link android.view.SurfaceHolder#lockCanvas() SurfaceHolder.lockCanvas()}</code>,
-when dealing with a SurfaceView object. (Both of these scenarios are discussed in the following sections.)
-However, if you need to create a new Canvas, then you must define the {@link android.graphics.Bitmap}
-upon which drawing will actually be performed. The Bitmap is always required for a Canvas. You can set up
-a new Canvas like this:</p>
-<pre>
-Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
-Canvas c = new Canvas(b);
-</pre>
-
-<p>Now your Canvas will draw onto the defined Bitmap. After drawing upon it with the Canvas, you can then carry your
-Bitmap to another Canvas with one of the <code>{@link android.graphics.Canvas#drawBitmap(Bitmap,Matrix,Paint)
-Canvas.drawBitmap(Bitmap,...)}</code> methods. It's recommended that you ultimately draw your final
-graphics through a Canvas offered to you
-by <code>{@link android.view.View#onDraw(Canvas) View.onDraw()}</code> or
-<code>{@link android.view.SurfaceHolder#lockCanvas() SurfaceHolder.lockCanvas()}</code> (see the following sections).</p>
-
-<p>The {@link android.graphics.Canvas} class has its own set of drawing methods that you can use,
-like <code>drawBitmap(...)</code>, <code>drawRect(...)</code>, <code>drawText(...)</code>, and many more.
-Other classes that you might use also have <code>draw()</code> methods. For example, you'll probably
-have some {@link android.graphics.drawable.Drawable} objects that you want to put on the Canvas. Drawable
-has its own <code>{@link android.graphics.drawable.Drawable#draw(Canvas) draw()}</code> method
-that takes your Canvas as an argument.</p>
-
-
-<h3 id="on-view">On a View</h3>
-
-<p>If your application does not require a significant amount of processing or
-frame-rate speed (perhaps for a chess game, a snake game,
-or another slowly-animated application), then you should consider creating a custom View component
-and drawing with a Canvas in <code>{@link android.view.View#onDraw(Canvas) View.onDraw()}</code>.
-The most convenient aspect of doing so is that the Android framework will
-provide you with a pre-defined Canvas to which you will place your drawing calls.</p>
-
-<p>To start, extend the {@link android.view.View} class (or descendant thereof) and define
-the <code>{@link android.view.View#onDraw(Canvas) onDraw()}</code> callback method. This method will be called by the Android
-framework to request that your View draw itself. This is where you will perform all your calls
-to draw through the {@link android.graphics.Canvas}, which is passed to you through the <code>onDraw()</code> callback.</p>
-
-<p>The Android framework will only call <code>onDraw()</code> as necessary. Each time that
-your application is prepared to be drawn, you must request your View be invalidated by calling
-<code>{@link android.view.View#invalidate()}</code>. This indicates that you'd like your View to be drawn and
-Android will then call your <code>onDraw()</code> method (though is not guaranteed that the callback will
-be instantaneous). </p>
-
-<p>Inside your View component's <code>onDraw()</code>, use the Canvas given to you for all your drawing,
-using various <code>Canvas.draw...()</code> methods, or other class <code>draw()</code> methods that
-take your Canvas as an argument. Once your <code>onDraw()</code> is complete, the Android framework will
-use your Canvas to draw a Bitmap handled by the system.</p>
-
-<p class="note"><strong>Note: </strong> In order to request an invalidate from a thread other than your main
-Activity's thread, you must call <code>{@link android.view.View#postInvalidate()}</code>.</p>
-
-<p>Also read <a href="{@docRoot}guide/topics/ui/custom-components.html">Building Custom Components</a>
-for a guide to extending a View class, and <a href="2d-graphics.html">2D Graphics: Drawables</a> for
-information on using Drawable objects like images from your resources and other primitive shapes.</p>
-
-<p>For a sample application, see the Snake game, in the SDK samples folder:
-<code><your-sdk-directory>/samples/Snake/</code>.</p>
-
-<h3 id="on-surfaceview">On a SurfaceView</h3>
-
-<p>The {@link android.view.SurfaceView} is a special subclass of View that offers a dedicated
-drawing surface within the View hierarchy. The aim is to offer this drawing surface to
-an application's secondary thread, so that the application isn't required
-to wait until the system's View hierarchy is ready to draw. Instead, a secondary thread
-that has reference to a SurfaceView can draw to its own Canvas at its own pace.</p>
-
-<p>To begin, you need to create a new class that extends {@link android.view.SurfaceView}. The class should also
-implement {@link android.view.SurfaceHolder.Callback}. This subclass is an interface that will notify you
-with information about the underlying {@link android.view.Surface}, such as when it is created, changed, or destroyed.
-These events are important so that you know when you can start drawing, whether you need
-to make adjustments based on new surface properties, and when to stop drawing and potentially
-kill some tasks. Inside your SurfaceView class is also a good place to define your secondary Thread class, which will
-perform all the drawing procedures to your Canvas.</p>
-
-<p>Instead of handling the Surface object directly, you should handle it via
-a {@link android.view.SurfaceHolder}. So, when your SurfaceView is initialized, get the SurfaceHolder by calling
-<code>{@link android.view.SurfaceView#getHolder()}</code>. You should then notify the SurfaceHolder that you'd
-like to receive SurfaceHolder callbacks (from {@link android.view.SurfaceHolder.Callback}) by calling
-{@link android.view.SurfaceHolder#addCallback(SurfaceHolder.Callback) addCallback()}
-(pass it <var>this</var>). Then override each of the
-{@link android.view.SurfaceHolder.Callback} methods inside your SurfaceView class.</p>
-
-<p>In order to draw to the Surface Canvas from within your second thread, you must pass the thread your SurfaceHandler
-and retrieve the Canvas with <code>{@link android.view.SurfaceHolder#lockCanvas() lockCanvas()}</code>.
-You can now take the Canvas given to you by the SurfaceHolder and do your necessary drawing upon it.
-Once you're done drawing with the Canvas, call
-<code>{@link android.view.SurfaceHolder#unlockCanvasAndPost(Canvas) unlockCanvasAndPost()}</code>, passing it
-your Canvas object. The Surface will now draw the Canvas as you left it. Perform this sequence of locking and
-unlocking the canvas each time you want to redraw.</p>
-
-<p class="note"><strong>Note:</strong> On each pass you retrieve the Canvas from the SurfaceHolder,
-the previous state of the Canvas will be retained. In order to properly animate your graphics, you must re-paint the
-entire surface. For example, you can clear the previous state of the Canvas by filling in a color
-with <code>{@link android.graphics.Canvas#drawColor(int) drawColor()}</code> or setting a background image
-with <code>{@link android.graphics.Canvas#drawBitmap(Bitmap,Rect,RectF,Paint) drawBitmap()}</code>. Otherwise,
-you will see traces of the drawings you previously performed.</p>
-
-
-<p>For a sample application, see the Lunar Lander game, in the SDK samples folder:
-<code><your-sdk-directory>/samples/LunarLander/</code>. Or,
-browse the source in the <a href="{@docRoot}guide/samples/index.html">Sample Code</a> section.</p>
-
-
-
-
-
-
+<dt><strong><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></strong></dt>
+<dd>Android supports OpenGL ES 1.0 and 2.0, with Android framework APIs as well as natively
+with the Native Development Kit (NDK). Using the framework APIs is desireable when you want to add a
+few graphical enhancements to your application that are not supported with the Canvas APIs, or if
+you desire platform independence and don't demand high performance. There is a performance hit in
+using the framework APIs compared to the NDK, so for many graphic intensive applications such as
+games, using the NDK is beneficial (It is important to note though that you can still get adequate
+performance using the framework APIs. For example, the Google Body app is developed entirely
+using the framework APIs). OpenGL with the NDK is also useful if you have a lot of native
+code that you want to port over to Android. For more information about using the NDK, read the
+docs in the <code>docs/</code> directory of the <a href="{@docRoot}sdk/ndk/index.html">NDK
+download.</a></dd>
+</dl>
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index b750858..231f4ef 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -1,4 +1,4 @@
-page.title=3D with OpenGL
+page.title=OpenGL
parent.title=Graphics
parent.link=index.html
@jd:body
@@ -6,7 +6,7 @@
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
-
+
<ol>
<li><a href="#basics">The Basics</a>
<ol>
@@ -14,7 +14,7 @@
</ol>
<li><a href="#manifest">Declaring OpenGL Requirements</a></li>
</li>
- <li><a href="#coordinate-mapping">Mapping Coordinates for Drawn Objects</a>
+ <li><a href="#coordinate-mapping">Mapping Coordinates for Drawn Objects</a>
<ol>
<li><a href="#proj-es1">Projection and camera in ES 1.0</a></li>
<li><a href="#proj-es1">Projection and camera in ES 2.0</a></li>
@@ -78,8 +78,7 @@
Kit (NDK). This topic focuses on the Android framework interfaces. For more information about the
NDK, see the <a href="{@docRoot}sdk/ndk/index.html">Android NDK</a>.
-<p>
- There are two foundational classes in the Android framework that let you create and manipulate
+<p>There are two foundational classes in the Android framework that let you create and manipulate
graphics with the OpenGL ES API: {@link android.opengl.GLSurfaceView} and {@link
android.opengl.GLSurfaceView.Renderer}. If your goal is to use OpenGL in your Android application,
understanding how to implement these classes in an activity should be your first objective.
@@ -89,22 +88,22 @@
<dt><strong>{@link android.opengl.GLSurfaceView}</strong></dt>
<dd>This class is a {@link android.view.View} where you can draw and manipulate objects using
OpenGL API calls and is similar in function to a {@link android.view.SurfaceView}. You can use
- this class by creating an instance of {@link android.opengl.GLSurfaceView} and adding your
+ this class by creating an instance of {@link android.opengl.GLSurfaceView} and adding your
{@link android.opengl.GLSurfaceView.Renderer Renderer} to it. However, if you want to capture
touch screen events, you should extend the {@link android.opengl.GLSurfaceView} class to
- implement the touch listeners, as shown in OpenGL Tutorials for
- <a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html#touch">ES 1.0</a>,
+ implement the touch listeners, as shown in OpenGL Tutorials for
+ <a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html#touch">ES 1.0</a>,
<a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html#touch">ES 2.0</a> and the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity
.html">TouchRotateActivity</a> sample.</dd>
-
+
<dt><strong>{@link android.opengl.GLSurfaceView.Renderer}</strong></dt>
<dd>This interface defines the methods required for drawing graphics in an OpenGL {@link
android.opengl.GLSurfaceView}. You must provide an implementation of this interface as a
separate class and attach it to your {@link android.opengl.GLSurfaceView} instance using
{@link android.opengl.GLSurfaceView#setRenderer(android.opengl.GLSurfaceView.Renderer)
GLSurfaceView.setRenderer()}.
-
+
<p>The {@link android.opengl.GLSurfaceView.Renderer} interface requires that you implement the
following methods:</p>
<ul>
@@ -129,7 +128,7 @@
android.opengl.GLSurfaceView} geometry changes, including changes in size of the {@link
android.opengl.GLSurfaceView} or orientation of the device screen. For example, the system calls
this method when the device changes from portrait to landscape orientation. Use this method to
- respond to changes in the {@link android.opengl.GLSurfaceView} container.
+ respond to changes in the {@link android.opengl.GLSurfaceView} container.
</li>
</ul>
</dd>
@@ -173,13 +172,13 @@
</ul>
<p>If you'd like to start building an app with OpenGL right away, have a look at the tutorials for
-<a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL ES 1.0</a> or
+<a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL ES 1.0</a> or
<a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL ES 2.0</a>!
</p>
<h2 id="manifest">Declaring OpenGL Requirements</h2>
<p>If your application uses OpenGL features that are not available on all devices, you must include
-these requirements in your <a
+these requirements in your <a
href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a></code> file.
Here are the most common OpenGL manifest declarations:</p>
@@ -200,14 +199,14 @@
compression formats, you must declare the formats your application supports in your manifest file
using <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
<supports-gl-texture>}</a>. For more information about available texture compression
-formats, see <a href="#textures">Texture compression support</a>.
+formats, see <a href="#textures">Texture compression support</a>.
<p>Declaring texture compression requirements in your manifest hides your application from users
with devices that do not support at least one of your declared compression types. For more
information on how Android Market filtering works for texture compressions, see the <a
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html#market-texture-filtering">
Android Market and texture compression filtering</a> section of the {@code
-<supports-gl-texture>} documentation.</p>
+<supports-gl-texture>} documentation.</p>
</li>
</ul>
@@ -237,7 +236,7 @@
<h3 id="proj-es1">Projection and camera view in OpenGL ES 1.0</h3>
<p>In the ES 1.0 API, you apply projection and camera view by creating each matrix and then
adding them to the OpenGL environment.</p>
-
+
<ol>
<li><strong>Projection matrix</strong> - Create a projection matrix using the geometry of the
device screen in order to recalculate object coordinates so they are drawn with correct proportions.
@@ -250,19 +249,19 @@
<pre>
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
-
+
// make adjustments for screen ratio
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
gl.glLoadIdentity(); // reset the matrix to its default state
gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix
- }
+ }
</pre>
</li>
<li><strong>Camera transformation matrix</strong> - Once you have adjusted the coordinate system
using a projection matrix, you must also apply a camera view. The following example code shows how
-to modify the {@link
+to modify the {@link
android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
onDrawFrame()} method of a {@link android.opengl.GLSurfaceView.Renderer}
implementation to apply a model view and use the
@@ -276,12 +275,12 @@
// Set GL_MODELVIEW transformation mode
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity(); // reset the matrix to its default state
-
+
// When using GL_MODELVIEW, you must set the camera view
- GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+ GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
...
}
-</pre>
+</pre>
</li>
</ol>
@@ -294,26 +293,26 @@
<p>In the ES 2.0 API, you apply projection and camera view by first adding a matrix member to
the vertex shaders of your graphics objects. With this matrix member added, you can then
generate and apply projection and camera viewing matrices to your objects.</p>
-
+
<ol>
<li><strong>Add matrix to vertex shaders</strong> - Create a variable for the view projection matrix
and include it as a multiplier of the shader's position. In the following example vertex shader
-code, the included {@code uMVPMatrix} member allows you to apply projection and camera viewing
+code, the included {@code uMVPMatrix} member allows you to apply projection and camera viewing
matrices to the coordinates of objects that use this shader.
<pre>
- private final String vertexShaderCode =
-
+ private final String vertexShaderCode =
+
// This matrix member variable provides a hook to manipulate
// the coordinates of objects that use this vertex shader
"uniform mat4 uMVPMatrix; \n" +
-
+
"attribute vec4 vPosition; \n" +
"void main(){ \n" +
-
+
// the matrix must be included as part of gl_Position
" gl_Position = uMVPMatrix * vPosition; \n" +
-
+
"} \n";
</pre>
<p class="note"><strong>Note:</strong> The example above defines a single transformation matrix
@@ -340,7 +339,7 @@
</li>
<li><strong>Create projection and camera viewing matrices</strong> - Generate the projection and
viewing matrices to be applied the graphic objects. The following example code shows how to modify
-the {@link
+the {@link
android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} and {@link
android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
@@ -353,16 +352,16 @@
...
// Create a camera view matrix
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
- }
-
+ }
+
public void onSurfaceChanged(GL10 unused, int width, int height) {
GLES20.glViewport(0, 0, width, height);
-
+
float ratio = (float) width / height;
-
+
// create a projection matrix from device screen geometry
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
- }
+ }
</pre>
</li>
@@ -373,16 +372,16 @@
onDrawFrame()} method of a {@link android.opengl.GLSurfaceView.Renderer} implementation to combine
the projection matrix and camera view created in the code above and then apply it to the graphic
objects to be rendered by OpenGL.
-
+
<pre>
public void onDrawFrame(GL10 unused) {
...
// Combine the projection and camera view matrices
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
-
+
// Apply the combined projection and camera view transformations
GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
-
+
// Draw objects
...
}
@@ -498,7 +497,7 @@
supported.</p>
</li>
<li>Review the output of this method to determine what OpenGL extensions are supported on the
-device.</li>
+device.</li>
</ol>
@@ -514,7 +513,7 @@
than the ES 1.0/1.1 APIs. However, the performance difference can vary depending on the Android
device your OpenGL application is running on, due to differences in the implementation of the OpenGL
graphics pipeline.</li>
- <li><strong>Device Compatibility</strong> - Developers should consider the types of devices,
+ <li><strong>Device Compatibility</strong> - Developers should consider the types of devices,
Android versions and the OpenGL ES versions available to their customers. For more information
on OpenGL compatibility across devices, see the <a href="#compatibility">OpenGL Versions and Device
Compatibility</a> section.</li>
@@ -526,7 +525,7 @@
direct control of the graphics processing pipeline, developers can create effects that would be
very difficult to generate using the 1.0/1.1 API.</li>
</ul>
-
+
<p>While performance, compatibility, convenience, control and other factors may influence your
decision, you should pick an OpenGL API version based on what you think provides the best experience
for your users.</p>
diff --git a/docs/html/guide/topics/graphics/prop-animation.jd b/docs/html/guide/topics/graphics/prop-animation.jd
new file mode 100644
index 0000000..be24788
--- /dev/null
+++ b/docs/html/guide/topics/graphics/prop-animation.jd
@@ -0,0 +1,953 @@
+page.title=Property Animation
+parent.title=Animation
+parent.link=animation.html
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+
+ <ol>
+ <li><a href="#how">How Property Animation Works</a></li>
+
+ <li><a href="#value-animator">Animating with ValueAnimator</a></li>
+
+ <li><a href="#object-animator">Animating with ObjectAnimator</a></li>
+
+ <li><a href="#choreography">Choreographing Multiple Animations with
+ AnimatorSet</a></li>
+
+ <li><a href="#listeners">Animation Listeners</a></li>
+
+ <li><a href="#type-evaluator">Using a TypeEvaluator</a></li>
+
+ <li><a href="#interpolators">Using Interpolators</a></li>
+
+ <li><a href="#keyframes">Specifying Keyframes</a></li>
+
+ <li><a href="#layout">Animating Layout Changes to ViewGroups</a></li>
+
+ <li><a href="#views">Animating Views</a>
+ <ol>
+ <li><a href="#view-prop-animator">ViewPropertyAnimator</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#declaring-xml">Declaring Animations in XML</a></li>
+ </ol>
+
+ <h2>Key classes</h2>
+
+ <ol>
+ <li><code><a href=
+ "/reference/android/animation/ValueAnimator.html">ValueAnimator</a></code></li>
+
+ <li><code><a href=
+ "/reference/android/animation/ObjectAnimator.html">ObjectAnimator</a></code></li>
+
+ <li><code><a href=
+ "/reference/android/animation/TypeEvaluator.html">TypeEvaluator</a></code></li>
+ </ol>
+
+ <h2>Related samples</h2>
+
+ <ol>
+ <li><a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
+ Demos</a></li>
+ </ol>
+ </div>
+ </div>
+ <p>The property animation system is a robust framework that allows you
+ to animate almost anything. You can define an animation to change any object property over time,
+ regardless of whether it draws to the screen or not. A property animation changes a property's
+ (a field in an object) value over a specified length of time. To animate something, you specify the
+ object property that you want to animate, such as an object's position on the screen, how long
+ you want to animate it for, and what values you want to animate between. </p>
+
+ <p>The property animation system lets you define the following characteristics of an
+ animation:</p>
+
+ <ul>
+ <li>Duration: You can specify the duration of an animation. The default length is 300 ms.</li>
+
+ <li>Time interpolation: You can specify how the values for the property are calculated as a
+ function of the animation's current elapsed time.</li>
+
+ <li>Repeat count and behavior: You can specify whether or not to have an animation repeat when
+ it reaches the end of a duration and how many times to repeat the animation. You can also
+ specify whether you want the animation to play back in reverse. Setting it to reverse plays
+ the animation forwards then backwards repeatedly, until the number of repeats is reached.</li>
+
+ <li>Animator sets: You can group animations into logical sets that play together or
+ sequentially or after specified delays.</li>
+
+ <li>Frame refresh delay: You can specify how often to refresh frames of your animation. The
+ default is set to refresh every 10 ms, but the speed in which your application can refresh frames is
+ ultimately dependent on how busy the system is overall and how fast the system can service the underlying timer.</li>
+ </ul>
+
+
+ <h2 id="how">How Property Animation Works</h2>
+
+ <p>First, let's go over how an animation works with a simple example. Figure 1 depicts a
+ hypothetical object that is animated with its <code>x</code> property, which represents its
+ horizontal location on a screen. The duration of the animation is set to 40 ms and the distance
+ to travel is 40 pixels. Every 10 ms, which is the default frame refresh rate, the object moves
+ horizontally by 10 pixels. At the end of 40ms, the animation stops, and the object ends at
+ horizontal position 40. This is an example of an animation with linear interpolation, meaning the
+ object moves at a constant speed.</p><img src="{@docRoot}images/animation/animation-linear.png">
+
+ <p class="img-caption"><strong>Figure 1.</strong> Example of a linear animation</p>
+
+ <p>You can also specify animations to have a non-linear interpolation. Figure 2 illustrates a
+ hypothetical object that accelerates at the beginning of the animation, and decelerates at the
+ end of the animation. The object still moves 40 pixels in 40 ms, but non-linearly. In the
+ beginning, this animation accelerates up to the halfway point then decelerates from the
+ halfway point until the end of the animation. As Figure 2 shows, the distance traveled
+ at the beginning and end of the animation is less than in the middle.</p><img src=
+ "{@docRoot}images/animation/animation-nonlinear.png">
+
+ <p class="img-caption"><strong>Figure 2.</strong> Example of a non-linear animation</p>
+
+ <p>Let's take a detailed look at how the important components of the property animation system
+ would calculate animations like the ones illustrated above. Figure 3 depicts how the main classes
+ work with one another.</p><img src="{@docRoot}images/animation/valueanimator.png">
+
+ <p class="img-caption"><strong>Figure 3.</strong> How animations are calculated</p>
+
+ <p>The {@link android.animation.ValueAnimator} object keeps track of your animation's timing,
+ such as how long the animation has been running, and the current value of the property that it is
+ animating.</p>
+
+ <p>The {@link android.animation.ValueAnimator} encapsulates a {@link
+ android.animation.TimeInterpolator}, which defines animation interpolation, and a {@link
+ android.animation.TypeEvaluator}, which defines how to calculate values for the property being
+ animated. For example, in Figure 2, the {@link android.animation.TimeInterpolator} used would be
+ {@link android.view.animation.AccelerateDecelerateInterpolator} and the {@link
+ android.animation.TypeEvaluator} would be {@link android.animation.IntEvaluator}.</p>
+
+ <p>To start an animation, create a {@link android.animation.ValueAnimator} and give it the
+ starting and ending values for the property that you want to animate, along with the duration of
+ the animation. When you call {@link android.animation.ValueAnimator#start start()} the animation
+ begins. During the whole animation, the {@link android.animation.ValueAnimator} calculates an <em>elapsed fraction</em>
+ between 0 and 1, based on the duration of the animation and how much time has elapsed. The
+ elapsed fraction represents the percentage of time that the animation has completed, 0 meaning 0%
+ and 1 meaning 100%. For example, in Figure 1, the elapsed fraction at t = 10 ms would be .25
+ because the total duration is t = 40 ms.</p>
+
+ <p>When the {@link android.animation.ValueAnimator} is done calculating an elapsed fraction, it
+ calls the {@link android.animation.TimeInterpolator} that is currently set, to calculate an
+ <em>interpolated fraction</em>. An interpolated fraction maps the elapsed fraction to a new
+ fraction that takes into account the time interpolation that is set. For example, in Figure 2,
+ because the animation slowly accelerates, the interpolated fraction, about .15, is less than the
+ elapsed fraction, .25, at t = 10 ms. In Figure 1, the interpolated fraction is always the same as
+ the elapsed fraction.</p>
+
+ <p>When the interpolated fraction is calculated, {@link android.animation.ValueAnimator} calls
+ the appropriate {@link android.animation.TypeEvaluator}, to calculate the value of the
+ property that you are animating, based on the interpolated fraction, the starting value, and the
+ ending value of the animation. For example, in Figure 2, the interpolated fraction was .15 at t =
+ 10 ms, so the value for the property at that time would be .15 X (40 - 0), or 6.</p>
+
+ <!-- <p>When the final value is calculated, the {@link android.animation.ValueAnimator} calls the
+ {@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate
+ onAnimationUpdate()} method. Implement this callback to obtain the property value by
+ calling {@link android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()} and set the
+ value for the property in the object that you are animating. Setting the property doesn't redraw
+ the object on the screen, so you need to call {@link
+ android.view.View#invalidate invalidate()} to refresh the View that the object
+ resides in. If the object is actually a View object, then the system calls {@link
+ android.view.View#invalidate invalidate()} when the property is changed.
+ The system redraws the window and the {@link android.animation.ValueAnimator}
+ repeats the process.</p>-->
+
+ <p>The <code>com.example.android.apis.animation</code> package in the <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
+ Demos</a> sample project provides many examples on how to use the property
+ animation system.</p>
+
+ <h2>API Overview</h2>
+
+ <p>You can find most of the property animation system's APIs in {@link android.animation
+ android.animation}. Because the view animation system already
+ defines many interpolators in {@link android.view.animation android.view.animation}, you can use
+ those interpolators in the property animation system as well. The following tables describe the main
+ components of the property animation system.</p>
+
+ <p>The {@link android.animation.Animator} class provides the basic structure for creating
+ animations. You normally do not use this class directly as it only provides minimal
+ functionality that must be extended to fully support animating values. The following
+ subclasses extend {@link android.animation.Animator}:
+ </p>
+ <p class="table-caption"><strong>Table 1.</strong> Animators</p>
+ <table>
+ <tr>
+ <th>Class</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.ValueAnimator}</td>
+
+ <td>The main timing engine for property animation that also computes the values for the
+ property to be animated. It has all of the core functionality that calculates animation
+ values and contains the timing details of each animation, information about whether an
+ animation repeats, listeners that receive update events, and the ability to set custom
+ types to evaluate. There are two pieces to animating properties: calculating the animated
+ values and setting those values on the object and property that is being animated. {@link
+ android.animation.ValueAnimator} does not carry out the second piece, so you must listen
+ for updates to values calculated by the {@link android.animation.ValueAnimator} and
+ modify the objects that you want to animate with your own logic. See the section about
+ <a href="#value-animator">Animating with ValueAnimator</a> for more information.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.ObjectAnimator}</td>
+
+ <td>A subclass of {@link android.animation.ValueAnimator} that allows you to set a target
+ object and object property to animate. This class updates the property accordingly when
+ it computes a new value for the animation. You want to use
+ {@link android.animation.ObjectAnimator} most of the time,
+ because it makes the process of animating values on target objects much easier. However,
+ you sometimes want to use {@link android.animation.ValueAnimator} directly because {@link
+ android.animation.ObjectAnimator} has a few more restrictions, such as requiring specific
+ acessor methods to be present on the target object.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.AnimatorSet}</td>
+
+ <td>Provides a mechanism to group animations together so that they run in
+ relation to one another. You can set animations to play together, sequentially, or after
+ a specified delay. See the section about <a href="#choreography">Choreographing multiple
+ animations with Animator Sets</a> for more information.</td>
+ </tr>
+ </table>
+
+
+ <p>Evaluators tell the property animation system how to calculate values for a given
+ property. They take the timing data that is provided by an {@link android.animation.Animator}
+ class, the animation's start and end value, and calculate the animated values of the property
+ based on this data. The property animation system provides the following evaluators:</p>
+ <p class="table-caption"><strong>Table 2.</strong> Evaluators</p>
+ <table>
+ <tr>
+ <th>Class/Interface</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.IntEvaluator}</td>
+
+ <td>The default evaluator to calculate values for <code>int</code> properties.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.FloatEvaluator}</td>
+
+ <td>The default evaluator to calculate values for <code>float</code> properties.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.ArgbEvaluator}</td>
+
+ <td>The default evaluator to calculate values for color properties that are represented
+ as hexidecimal values.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.TypeEvaluator}</td>
+
+ <td>An interface that allows you to create your own evaluator. If you are animating an
+ object property that is <em>not</em> an <code>int</code>, <code>float</code>, or color,
+ you must implement the {@link android.animation.TypeEvaluator} interface to specify how
+ to compute the object property's animated values. You can also specify a custom {@link
+ android.animation.TypeEvaluator} for <code>int</code>, <code>float</code>, and color
+ values as well, if you want to process those types differently than the default behavior.
+ See the section about <a href="#type-evaluator">Using a TypeEvaluator</a> for more
+ information on how to write a custom evaluator.</td>
+ </tr>
+ </table>
+
+
+
+
+ <p>A time interpolator defines how specific values in an animation are calculated as a
+ function of time. For example, you can specify animations to happen linearly across the whole
+ animation, meaning the animation moves evenly the entire time, or you can specify animations
+ to use non-linear time, for example, accelerating at the beginning and decelerating at the
+ end of the animation. Table 3 describes the interpolators that are contained in {@link
+ android.view.animation android.view.animation}. If none of the provided interpolators suits
+ your needs, implement the {@link android.animation.TimeInterpolator} interface and create your own. See <a href=
+ "#interpolators">Using interpolators</a> for more information on how to write a custom
+ interpolator.</p>
+ <p class="table-caption"><strong>Table 3.</strong> Interpolators</p>
+ <table>
+ <tr>
+ <th>Class/Interface</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.AccelerateDecelerateInterpolator}</td>
+
+ <td>An interpolator whose rate of change starts and ends slowly but accelerates
+ through the middle.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.AccelerateInterpolator}</td>
+
+ <td>An interpolator whose rate of change starts out slowly and then
+ accelerates.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.AnticipateInterpolator}</td>
+
+ <td>An interpolator whose change starts backward then flings forward.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.AnticipateOvershootInterpolator}</td>
+
+ <td>An interpolator whose change starts backward, flings forward and overshoots
+ the target value, then finally goes back to the final value.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.BounceInterpolator}</td>
+
+ <td>An interpolator whose change bounces at the end.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.CycleInterpolator}</td>
+
+ <td>An interpolator whose animation repeats for a specified number of cycles.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.DecelerateInterpolator}</td>
+
+ <td>An interpolator whose rate of change starts out quickly and and then
+ decelerates.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.LinearInterpolator}</td>
+
+ <td>An interpolator whose rate of change is constant.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.view.animation.OvershootInterpolator}</td>
+
+ <td>An interpolator whose change flings forward and overshoots the last value then
+ comes back.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.animation.TimeInterpolator}</td>
+
+ <td>An interface that allows you to implement your own interpolator.</td>
+ </tr>
+ </table>
+
+ <h2 id="value-animator">Animating with ValueAnimator</h2>
+
+ <p>The {@link android.animation.ValueAnimator} class lets you animate values of some type for the
+ duration of an animation by specifying a set of <code>int</code>, <code>float</code>, or color
+ values to animate through. You obtain a {@link android.animation.ValueAnimator} by calling one of
+ its factory methods: {@link android.animation.ValueAnimator#ofInt ofInt()}, {@link
+ android.animation.ValueAnimator#ofFloat ofFloat()}, or {@link
+ android.animation.ValueAnimator#ofObject ofObject()}. For example:</p>
+ <pre>
+ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
+animation.setDuration(1000);
+animation.start();
+</pre>
+
+ <p>In this code, the {@link android.animation.ValueAnimator} starts calculating the values of the
+ animation, between 0 and 1, for a duration of 1000 ms, when the <code>start()</code> method
+ runs.</p>
+
+ <p>You can also specify a custom type to animate by doing the following:</p>
+ <pre>
+ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
+animation.setDuration(1000);
+animation.start();
+</pre>
+
+ <p>In this code, the {@link android.animation.ValueAnimator} starts calculating the values of the
+ animation, between <code>startPropertyValue</code> and <code>endPropertyValue</code> using the
+ logic supplied by <code>MyTypeEvaluator</code> for a duration of 1000 ms, when the {@link
+ android.animation.ValueAnimator#start start()} method runs.</p>
+
+ <p>The previous code snippets, however, has no real effect on an object, because the {@link
+ android.animation.ValueAnimator} does not operate on objects or properties directly. The most likely thing
+ that you want to do is modify the objects that you want to animate with these calculated values. You do
+ this by defining listeners in the {@link android.animation.ValueAnimator} to appropriately handle important events
+ during the animation's lifespan, such as frame updates. When implementing the listeners, you can
+ obtain the calculated value for that specific frame refresh by calling {@link
+ android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()}. For more information on listeners,
+ see the section about <a href="#listeners">Animation Listeners</a>.
+
+ <h2 id="object-animator">Animating with ObjectAnimator</h2>
+
+ <p>The {@link android.animation.ObjectAnimator} is a subclass of the {@link
+ android.animation.ValueAnimator} (discussed in the previous section) and combines the timing
+ engine and value computation of {@link android.animation.ValueAnimator} with the ability to
+ animate a named property of a target object. This makes animating any object much easier, as you
+ no longer need to implement the {@link android.animation.ValueAnimator.AnimatorUpdateListener},
+ because the animated property updates automatically.</p>
+
+ <p>Instantiating an {@link android.animation.ObjectAnimator} is similar to a {@link
+ android.animation.ValueAnimator}, but you also specify the object and the name of that object's property (as
+ a String) along with the values to animate between:</p>
+ <pre>
+ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
+anim.setDuration(1000);
+anim.start();
+</pre>
+
+ <p>To have the {@link android.animation.ObjectAnimator} update properties correctly, you must do
+ the following:</p>
+
+ <ul>
+ <li>The object property that you are animating must have a setter function (in camel case) in the form of
+ <code>set<propertyName>()</code>. Because the {@link android.animation.ObjectAnimator}
+ automatically updates the property during animation, it must be able to access the property
+ with this setter method. For example, if the property name is <code>foo</code>, you need to
+ have a <code>setFoo()</code> method. If this setter method does not exist, you have three
+ options:
+
+ <ul>
+ <li>Add the setter method to the class if you have the rights to do so.</li>
+
+ <li>Use a wrapper class that you have rights to change and have that wrapper receive the
+ value with a valid setter method and forward it to the original object.</li>
+
+ <li>Use {@link android.animation.ValueAnimator} instead.</li>
+ </ul>
+ </li>
+
+ <li>If you specify only one value for the <code>values...</code> parameter in one of the {@link
+ android.animation.ObjectAnimator} factory methods, it is assumed to be the ending value of the
+ animation. Therefore, the object property that you are animating must have a getter function
+ that is used to obtain the starting value of the animation. The getter function must be in the
+ form of <code>get<propertyName>()</code>. For example, if the property name is
+ <code>foo</code>, you need to have a <code>getFoo()</code> method.</li>
+
+ <li>The getter (if needed) and setter methods of the property that you are animating must
+ operate on the same type as the starting and ending values that you specify to {@link
+ android.animation.ObjectAnimator}. For example, you must have
+ <code>targetObject.setPropName(float)</code> and <code>targetObject.getPropName(float)</code>
+ if you construct the following {@link android.animation.ObjectAnimator}:
+ <pre>
+ObjectAnimator.ofFloat(targetObject, "propName", 1f)
+</pre>
+ </li>
+
+ <li>Depending on what property or object you are animating, you might need to call the {@link
+ android.view.View#invalidate invalidate()} method on a View force the screen to redraw itself with the
+ updated animated values. You do this in the
+ {@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate onAnimationUpdate()}
+ callback. For example, animating the color property of a Drawable object only cause updates to the
+ screen when that object redraws itself. All of the property setters on View, such as
+ {@link android.view.View#setAlpha setAlpha()} and {@link android.view.View#setTranslationX setTranslationX()}
+ invalidate the View properly, so you do not need to invalidate the View when calling these
+ methods with new values. For more information on listeners, see the section about <a href="#listeners">Animation Listeners</a>.
+ </li>
+ </ul>
+
+ <h2 id="choreography">Choreographing Multiple Animations with AnimatorSet</h2>
+
+ <p>In many cases, you want to play an animation that depends on when another animation starts or
+ finishes. The Android system lets you bundle animations together into an {@link
+ android.animation.AnimatorSet}, so that you can specify whether to start animations
+ simultaneously, sequentially, or after a specified delay. You can also nest {@link
+ android.animation.AnimatorSet} objects within each other.</p>
+
+ <p>The following sample code taken from the <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing
+ Balls</a> sample (modified for simplicity) plays the following {@link android.animation.Animator}
+ objects in the following manner:</p>
+
+ <ol>
+ <li>Plays <code>bounceAnim</code>.</li>
+
+ <li>Plays <code>squashAnim1</code>, <code>squashAnim2</code>, <code>stretchAnim1</code>, and
+ <code>stretchAnim2</code> at the same time.</li>
+
+ <li>Plays <code>bounceBackAnim</code>.</li>
+
+ <li>Plays <code>fadeAnim</code>.</li>
+ </ol>
+ <pre>
+AnimatorSet bouncer = new AnimatorSet();
+bouncer.play(bounceAnim).before(squashAnim1);
+bouncer.play(squashAnim1).with(squashAnim2);
+bouncer.play(squashAnim1).with(stretchAnim1);
+bouncer.play(squashAnim1).with(stretchAnim2);
+bouncer.play(bounceBackAnim).after(stretchAnim2);
+ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
+fadeAnim.setDuration(250);
+AnimatorSet animatorSet = new AnimatorSet();
+animatorSet.play(bouncer).before(fadeAnim);
+animatorSet.start();
+</pre>
+
+ <p>For a more complete example on how to use animator sets, see the <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing
+ Balls</a> sample in APIDemos.</p>
+
+<h2 id="listeners">Animation Listeners</h2>
+<p>
+You can listen for important events during an animation's duration with the listeners described below.
+</p>
+
+ <ul>
+ <li>{@link android.animation.Animator.AnimatorListener}
+
+ <ul>
+ <li>{@link android.animation.Animator.AnimatorListener#onAnimationStart onAnimationStart()}
+ - Called when the animation starts.</li>
+
+ <li>{@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()} -
+ Called when the animation ends.</li>
+
+ <li>{@link android.animation.Animator.AnimatorListener#onAnimationRepeat
+ onAnimationRepeat()} - Called when the animation repeats itself.</li>
+
+ <li>{@link android.animation.Animator.AnimatorListener#onAnimationCancel
+ onAnimationCancel()} - Called when the animation is canceled. A cancelled animation
+ also calls {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()},
+ regardless of how they were ended.</li>
+ </ul>
+ </li>
+
+ <li>{@link android.animation.ValueAnimator.AnimatorUpdateListener}
+
+ <ul>
+ <li>
+ <p>{@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate
+ onAnimationUpdate()} - called on every frame of the animation. Listen to this event to
+ use the calculated values generated by {@link android.animation.ValueAnimator} during an
+ animation. To use the value, query the {@link android.animation.ValueAnimator} object
+ passed into the event to get the current animated value with the {@link
+ android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()} method. Implementing this
+ listener is required if you use {@link android.animation.ValueAnimator}. </p>
+
+ <p>
+ Depending on what property or object you are animating, you might need to call
+ {@link android.view.View#invalidate invalidate()} on a View to force that area of the
+ screen to redraw itself with the new animated values. For example, animating the
+ color property of a Drawable object only cause updates to the screen when that object
+ redraws itself. All of the property setters on View,
+ such as {@link android.view.View#setAlpha setAlpha()} and
+ {@link android.view.View#setTranslationX setTranslationX()} invalidate the View
+ properly, so you do not need to invalidate the View when calling these methods with new values.
+ </p>
+
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+<p>You can extend the {@link android.animation.AnimatorListenerAdapter} class instead of
+implementing the {@link android.animation.Animator.AnimatorListener} interface, if you do not
+want to implement all of the methods of the {@link android.animation.Animator.AnimatorListener}
+interface. The {@link android.animation.AnimatorListenerAdapter} class provides empty
+implementations of the methods that you can choose to override.</p>
+ <p>For example, the <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing
+ Balls</a> sample in the API demos creates an {@link android.animation.AnimatorListenerAdapter}
+ for just the {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()}
+ callback:</p>
+ <pre>
+ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
+fadeAnim.setDuration(250);
+fadeAnim.addListener(new AnimatorListenerAdapter() {
+public void onAnimationEnd(Animator animation) {
+ balls.remove(((ObjectAnimator)animation).getTarget());
+}
+</pre>
+
+
+ <h2 id="layout">Animating Layout Changes to ViewGroups</h2>
+
+ <p>The property animation system provides the capability to animate changes to ViewGroup objects
+ as well as provide an easy way to animate View objects themselves.</p>
+
+ <p>You can animate layout changes within a ViewGroup with the {@link
+ android.animation.LayoutTransition} class. Views inside a ViewGroup can go through an appearing
+ and disappearing animation when you add them to or remove them from a ViewGroup or when you call
+ a View's {@link android.view.View#setVisibility setVisibility()} method with {@link
+ android.view.View#VISIBLE}, android.view.View#INVISIBLE}, or {@link android.view.View#GONE}. The remaining Views in the
+ ViewGroup can also animate into their new positions when you add or remove Views. You can define
+ the following animations in a {@link android.animation.LayoutTransition} object by calling {@link
+ android.animation.LayoutTransition#setAnimator setAnimator()} and passing in an {@link
+ android.animation.Animator} object with one of the following {@link
+ android.animation.LayoutTransition} constants:</p>
+
+ <ul>
+ <li><code>APPEARING</code> - A flag indicating the animation that runs on items that are
+ appearing in the container.</li>
+
+ <li><code>CHANGE_APPEARING</code> - A flag indicating the animation that runs on items that are
+ changing due to a new item appearing in the container.</li>
+
+ <li><code>DISAPPEARING</code> - A flag indicating the animation that runs on items that are
+ disappearing from the container.</li>
+
+ <li><code>CHANGE_DISAPPEARING</code> - A flag indicating the animation that runs on items that
+ are changing due to an item disappearing from the container.</li>
+ </ul>
+
+ <p>You can define your own custom animations for these four types of events to customize the look
+ of your layout transitions or just tell the animation system to use the default animations.</p>
+
+ <p>The <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.html">
+ LayoutAnimations</a> sample in API Demos shows you how to define animations for layout
+ transitions and then set the animations on the View objects that you want to animate.</p>
+
+ <p>The <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimationsByDefault.html">
+ LayoutAnimationsByDefault</a> and its corresponding <a href=
+ "{@docRoot}resources/samples/ApiDemos/res/layout/layout_animations_by_default.html">layout_animations_by_default.xml</a>
+ layout resource file show you how to enable the default layout transitions for ViewGroups in XML.
+ The only thing that you need to do is to set the <code>android:animateLayoutchanges</code>
+ attribute to <code>true</code> for the ViewGroup. For example:</p>
+ <pre>
+<LinearLayout
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:id="@+id/verticalContainer"
+ android:animateLayoutChanges="true" />
+</pre>
+
+ <p>Setting this attribute to true automatically animates Views that are added or removed from the
+ ViewGroup as well as the remaining Views in the ViewGroup.</p>
+
+ <h2 id="type-evaluator">Using a TypeEvaluator</h2>
+
+ <p>If you want to animate a type that is unknown to the Android system, you can create your own
+ evaluator by implementing the {@link android.animation.TypeEvaluator} interface. The types that
+ are known by the Android system are <code>int</code>, <code>float</code>, or a color, which are
+ supported by the {@link android.animation.IntEvaluator}, {@link
+ android.animation.FloatEvaluator}, and {@link android.animation.ArgbEvaluator} type
+ evaluators.</p>
+
+ <p>There is only one method to implement in the {@link android.animation.TypeEvaluator}
+ interface, the {@link android.animation.TypeEvaluator#evaluate evaluate()} method. This allows
+ the animator that you are using to return an appropriate value for your animated property at the
+ current point of the animation. The {@link android.animation.FloatEvaluator} class demonstrates
+ how to do this:</p>
+ <pre>
+public class FloatEvaluator implements TypeEvaluator {
+
+ public Object evaluate(float fraction, Object startValue, Object endValue) {
+ float startFloat = ((Number) startValue).floatValue();
+ return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
+ }
+}
+</pre>
+
+ <p class="note"><strong>Note:</strong> When {@link android.animation.ValueAnimator} (or {@link
+ android.animation.ObjectAnimator}) runs, it calculates a current elapsed fraction of the
+ animation (a value between 0 and 1) and then calculates an interpolated version of that depending
+ on what interpolator that you are using. The interpolated fraction is what your {@link
+ android.animation.TypeEvaluator} receives through the <code>fraction</code> parameter, so you do
+ not have to take into account the interpolator when calculating animated values.</p>
+
+ <h2 id="interpolators">Using Interpolators</h2>
+
+ <p>An interpolator define how specific values in an animation are calculated as a function of
+ time. For example, you can specify animations to happen linearly across the whole animation,
+ meaning the animation moves evenly the entire time, or you can specify animations to use
+ non-linear time, for example, using acceleration or deceleration at the beginning or end of the
+ animation.</p>
+
+ <p>Interpolators in the animation system receive a fraction from Animators that represent the
+ elapsed time of the animation. Interpolators modify this fraction to coincide with the type of
+ animation that it aims to provide. The Android system provides a set of common interpolators in
+ the {@link android.view.animation android.view.animation package}. If none of these suit your
+ needs, you can implement the {@link android.animation.TimeInterpolator} interface and create your
+ own.</p>
+
+ <p>As an example, how the default interpolator {@link
+ android.view.animation.AccelerateDecelerateInterpolator} and the {@link
+ android.view.animation.LinearInterpolator} calculate interpolated fractions are compared below.
+ The {@link android.view.animation.LinearInterpolator} has no effect on the elapsed fraction. The {@link
+ android.view.animation.AccelerateDecelerateInterpolator} accelerates into the animation and
+ decelerates out of it. The following methods define the logic for these interpolators:</p>
+
+ <p><strong>AccelerateDecelerateInterpolator</strong></p>
+ <pre>
+public float getInterpolation(float input) {
+ return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
+}
+</pre>
+
+ <p><strong>LinearInterpolator</strong></p>
+ <pre>
+public float getInterpolation(float input) {
+ return input;
+}
+</pre>
+
+ <p>The following table represents the approximate values that are calculated by these
+ interpolators for an animation that lasts 1000ms:</p>
+
+ <table>
+ <tr>
+ <th>ms elapsed</th>
+
+ <th>Elapsed fraction/Interpolated fraction (Linear)</th>
+
+ <th>Interpolated fraction (Accelerate/Decelerate)</th>
+ </tr>
+
+ <tr>
+ <td>0</td>
+
+ <td>0</td>
+
+ <td>0</td>
+ </tr>
+
+ <tr>
+ <td>200</td>
+
+ <td>.2</td>
+
+ <td>.1</td>
+ </tr>
+
+ <tr>
+ <td>400</td>
+
+ <td>.4</td>
+
+ <td>.345</td>
+ </tr>
+
+ <tr>
+ <td>600</td>
+
+ <td>.6</td>
+
+ <td>.8</td>
+ </tr>
+
+ <tr>
+ <td>800</td>
+
+ <td>.8</td>
+
+ <td>.9</td>
+ </tr>
+
+ <tr>
+ <td>1000</td>
+
+ <td>1</td>
+
+ <td>1</td>
+ </tr>
+ </table>
+
+ <p>As the table shows, the {@link android.view.animation.LinearInterpolator} changes the values
+ at the same speed, .2 for every 200ms that passes. The {@link
+ android.view.animation.AccelerateDecelerateInterpolator} changes the values faster than {@link
+ android.view.animation.LinearInterpolator} between 200ms and 600ms and slower between 600ms and
+ 1000ms.</p>
+
+ <h2 id="keyframes">Specifying Keyframes</h2>
+
+ <p>A {@link android.animation.Keyframe} object consists of a time/value pair that lets you define
+ a specific state at a specific time of an animation. Each keyframe can also have its own
+ interpolator to control the behavior of the animation in the interval between the previous
+ keyframe's time and the time of this keyframe.</p>
+
+ <p>To instantiate a {@link android.animation.Keyframe} object, you must use one of the factory
+ methods, {@link android.animation.Keyframe#ofInt ofInt()}, {@link
+ android.animation.Keyframe#ofFloat ofFloat()}, or {@link android.animation.Keyframe#ofObject
+ ofObject()} to obtain the appropriate type of {@link android.animation.Keyframe}. You then call
+ the {@link android.animation.PropertyValuesHolder#ofKeyframe ofKeyframe()} factory method to
+ obtain a {@link android.animation.PropertyValuesHolder} object. Once you have the object, you can
+ obtain an animator by passing in the {@link android.animation.PropertyValuesHolder} object and
+ the object to animate. The following code snippet demonstrates how to do this:</p>
+ <pre>
+Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
+Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
+Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
+PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
+ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
+rotationAnim.setDuration(5000ms);
+</pre>
+
+ <p>For a more complete example on how to use keyframes, see the <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html">
+ MultiPropertyAnimation</a> sample in APIDemos.</p>
+
+ <h2 id="views">Animating Views</h2>
+
+ <p>The property animation system allow streamlined animation of View objects and offerse
+ a few advantages over the view animation system. The view
+ animation system transformed View objects by changing the way that they were drawn. This was
+ handled in the container of each View, because the View itself had no properties to manipulate.
+ This resulted in the View being animated, but caused no change in the View object itself. This
+ led to behavior such as an object still existing in its original location, even though it was
+ drawn on a different location on the screen. In Android 3.0, new properties and the corresponding
+ getter and setter methods were added to eliminate this drawback.</p>
+ <p>The property animation system
+ can animate Views on the screen by changing the actual properties in the View objects. In
+ addition, Views also automatically call the {@link android.view.View#invalidate invalidate()}
+ method to refresh the screen whenever its properties are changed. The new properties in the {@link
+ android.view.View} class that facilitate property animations are:</p>
+
+ <ul>
+ <li><code>translationX</code> and <code>translationY</code>: These properties control where the
+ View is located as a delta from its left and top coordinates which are set by its layout
+ container.</li>
+
+ <li><code>rotation</code>, <code>rotationX</code>, and <code>rotationY</code>: These properties
+ control the rotation in 2D (<code>rotation</code> property) and 3D around the pivot point.</li>
+
+ <li><code>scaleX</code> and <code>scaleY</code>: These properties control the 2D scaling of a
+ View around its pivot point.</li>
+
+ <li><code>pivotX</code> and <code>pivotY</code>: These properties control the location of the
+ pivot point, around which the rotation and scaling transforms occur. By default, the pivot
+ point is located at the center of the object.</li>
+
+ <li><code>x</code> and <code>y</code>: These are simple utility properties to describe the
+ final location of the View in its container, as a sum of the left and top values and
+ translationX and translationY values.</li>
+
+ <li><code>alpha</code>: Represents the alpha transparency on the View. This value is 1 (opaque)
+ by default, with a value of 0 representing full transparency (not visible).</li>
+ </ul>
+
+ <p>To animate a property of a View object, such as its color or rotation value, all you need to
+ do is create a property animator and specify the View property that you want to
+ animate. For example:</p>
+ <pre>
+ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);
+</pre>
+
+<p>For more information on creating animators, see the sections on animating with
+<a href="#value-animator">ValueAnimator</a> and <a href="#object-animator">ObjectAnimator</a>.
+</p>
+
+<h3 id="view-prop-animator">Animating with ViewPropertyAnimator</h3>
+<p>The {@link android.view.ViewPropertyAnimator} provides a simple way to animate several
+properties of a {@link android.view.View} in parallel, using a single underlying {@link
+android.animation.Animator}
+object. It behaves much like an {@link android.animation.ObjectAnimator}, because it modifies the
+actual values of the view's properties, but is more efficient when animating many properties at
+once. In addition, the code for using the {@link android.view.ViewPropertyAnimator} is much
+more concise and easier to read. The following code snippets show the differences in using multiple
+{@link android.animation.ObjectAnimator} objects, a single
+{@link android.animation.ObjectAnimator}, and the {@link android.view.ViewPropertyAnimator} when
+simultaneously animating the <code>x</code> and <code>y</code> property of a view.</p>
+
+<p><strong>Multiple ObjectAnimator objects</strong></p>
+<pre>
+ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 50f);
+ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 100f);
+AnimatorSet animSetXY = new AnimatorSet();
+animSetXY.playTogether(animX, animY);
+animSetXY.start();
+</pre>
+
+<p><strong>One ObjectAnimator</strong></p>
+<pre>
+PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
+PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
+ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
+</pre>
+
+<p><strong>ViewPropertyAnimator</strong></p>
+<pre>
+myView.animate().x(50f).y(100f);
+</pre>
+
+<p>
+For more detailed information about {@link
+android.view.ViewPropertyAnimator}, see the corresponding Android Developers
+<a href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html">blog
+post</a>.</p>
+
+<h2 id="declaring-xml">Declaring Animations in XML</h2>
+
+ <p>The property animation system lets you declare property animations with XML instead of doing
+ it programmatically. By defining your animations in XML, you can easily reuse your animations
+in multiple activities and more easily edit the animation sequence.</p>
+
+<p>To distinguish animation files that use the new property animation APIs from those that use the
+legacy <a href="{@docRoot}guide/topics/graphics/view-animation.html">view animation</a> framework,
+starting with Android 3.1, you should save the XML files for property animations in the {@code
+res/animator/} directory (instead of {@code res/anim/}). Using the {@code animator} directory name
+is optional, but necessary if you want to use the layout editor tools in the Eclipse ADT plugin (ADT
+11.0.0+), because ADT only searches the {@code res/animator/} directory for property animation
+resources.</p>
+
+<p>The following property animation classes have XML declaration support with the
+ following XML tags:</p>
+
+ <ul>
+ <li>{@link android.animation.ValueAnimator} - <code><animator></code></li>
+
+ <li>{@link android.animation.ObjectAnimator} - <code><objectAnimator></code></li>
+
+ <li>{@link android.animation.AnimatorSet} - <code><set></code></li>
+ </ul>
+
+<p>The following example plays the two sets of object animations sequentially, with the first nested
+set playing two object animations together:</p>
+
+<pre>
+<set android:ordering="sequentially">
+ <set>
+ <objectAnimator
+ android:propertyName="x"
+ android:duration="500"
+ android:valueTo="400"
+ android:valueType="intType"/>
+ <objectAnimator
+ android:propertyName="y"
+ android:duration="500"
+ android:valueTo="300"
+ android:valueType="intType"/>
+ </set>
+ <objectAnimator
+ android:propertyName="alpha"
+ android:duration="500"
+ android:valueTo="1f"/>
+</set>
+</pre>
+ <p>In order to run this animation, you must inflate the XML resources in your code to an {@link
+ android.animation.AnimatorSet} object, and then set the target objects for all of the animations
+ before starting the animation set. Calling {@link android.animation.AnimatorSet#setTarget
+ setTarget()} sets a single target object for all children of the {@link
+ android.animation.AnimatorSet} as a convenience. The following code shows how to do this:</p>
+
+<pre>
+AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
+ R.anim.property_animator);
+set.setTarget(myObject);
+set.start();
+</pre>
+
+<p>For information about the XML syntax for defining property animations, see <a
+href="{@docRoot}guide/topics/resources/animation-resource.html#Property">Animation Resources</a>.
+
diff --git a/docs/html/guide/topics/graphics/view-animation.jd b/docs/html/guide/topics/graphics/view-animation.jd
index eff6f70..3ccda8b 100644
--- a/docs/html/guide/topics/graphics/view-animation.jd
+++ b/docs/html/guide/topics/graphics/view-animation.jd
@@ -1,27 +1,14 @@
page.title=View Animation
-parent.title=Graphics
-parent.link=index.html
+parent.title=Animation
+parent.link=animation.html
@jd:body
- <div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#tween-animation">Tween animation</a></li>
- <li><a href="#frame-animation">Frame animation</a></li>
- </ol>
- </div>
- </div>
-
- You can use View Animation in any View object to
- perform tweened animation and frame by frame animation. Tween animation calculates the animation
- given information such as the start point, end point, size, rotation, and other common aspects of
- an animation. Frame by frame animation lets you load a series of Drawable resources one after
- another to create an animation.
-
- <h2 id="tween-animation">Tween Animation</h2>
+ <p>You can use the view animation system to perform tweened animation on Views. Tween animation
+ calculates the animation with information such as the start point, end point, size, rotation, and
+ other common aspects of an animation.
+ </p>
<p>A tween animation can perform a series of simple transformations (position, size, rotation,
and transparency) on the contents of a View object. So, if you have a {@link
@@ -126,67 +113,3 @@
Even so, the animation will still be drawn beyond the bounds of its View and will not be clipped.
However, clipping <em>will occur</em> if the animation exceeds the bounds of the parent View.</p>
- <h2 id="frame-animation">Frame Animation</h2>
-
- <p>This is a traditional animation in the sense that it is created with a sequence of different
- images, played in order, like a roll of film. The {@link
- android.graphics.drawable.AnimationDrawable} class is the basis for frame animations.</p>
-
- <p>While you can define the frames of an animation in your code, using the {@link
- android.graphics.drawable.AnimationDrawable} class API, it's more simply accomplished with a
- single XML file that lists the frames that compose the animation. Like the tween animation above,
- the XML file for this kind of animation belongs in the <code>res/drawable/</code> directory of
- your Android project. In this case, the instructions are the order and duration for each frame of
- the animation.</p>
-
- <p>The XML file consists of an <code><animation-list></code> element as the root node and a
- series of child <code><item></code> nodes that each define a frame: a drawable resource for
- the frame and the frame duration. Here's an example XML file for a frame-by-frame animation:</p>
- <pre>
-<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="true">
- <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
- <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
- <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
-</animation-list>
-</pre>
-
- <p>This animation runs for just three frames. By setting the <code>android:oneshot</code>
- attribute of the list to <var>true</var>, it will cycle just once then stop and hold on the last
- frame. If it is set <var>false</var> then the animation will loop. With this XML saved as
- <code>rocket_thrust.xml</code> in the <code>res/drawable/</code> directory of the project, it can
- be added as the background image to a View and then called to play. Here's an example Activity,
- in which the animation is added to an {@link android.widget.ImageView} and then animated when the
- screen is touched:</p>
- <pre>
-AnimationDrawable rocketAnimation;
-
-public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
- rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
- rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
-}
-
-public boolean onTouchEvent(MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- rocketAnimation.start();
- return true;
- }
- return super.onTouchEvent(event);
-}
-</pre>
-
- <p>It's important to note that the <code>start()</code> method called on the AnimationDrawable
- cannot be called during the <code>onCreate()</code> method of your Activity, because the
- AnimationDrawable is not yet fully attached to the window. If you want to play the animation
- immediately, without requiring interaction, then you might want to call it from the <code>{@link
- android.app.Activity#onWindowFocusChanged(boolean) onWindowFocusChanged()}</code> method in your
- Activity, which will get called when Android brings your window into focus.</p>
-
- <p>For more information on the XML syntax, available tags and attributes, see <a href=
- "{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.</p>
-</body>
-</html>
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index b2a78fe..02a8a8e 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -10,8 +10,8 @@
android:<a href="#clear">clearTaskOnLaunch</a>=["true" | "false"]
android:<a href="#config">configChanges</a>=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
- "navigation", "orientation", "screenLayout",
- "fontScale", "uiMode"]
+ "navigation", "screenLayout", "fontScale", "uiMode",
+ "orientation", "screenSize", "smallestScreenSize"]
android:<a href="#enabled">enabled</a>=["true" | "false"]
android:<a href="#exclude">excludeFromRecents</a>=["true" | "false"]
android:<a href="#exported">exported</a>=["true" | "false"]
@@ -205,10 +205,6 @@
<td>"{@code navigation}"</td>
<td>The navigation type (trackball/dpad) has changed. (This should never normally happen.)</td>
</tr><tr>
- <td>"{@code orientation}"</td>
- <td>The screen orientation has changed — the user has rotated
- the device.</td>
- </tr><tr>
<td>"{@code screenLayout}"</td>
<td>The screen layout has changed — this might be caused by a
different display being activated.</td>
@@ -221,7 +217,34 @@
<td>The user interface mode has changed — this can be caused when the user places the
device into a desk/car dock or when the the night mode changes. See {@link
android.app.UiModeManager}. <em>Introduced in API Level 8</em>.</td>
- </tr>
+ </tr><tr>
+ <td>"{@code orientation}"</td>
+ <td>The screen orientation has changed — the user has rotated the device.
+ <p class="note"><strong>Note:</strong> If your application targets API level 13 or higher (as
+declared by the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+minSdkVersion}</a> and <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> attributes), then you should also declare the {@code "screenSize"}
+configuration, because it also changes when a device switches between portrait and landscape
+orientations.</p></td>
+ </tr><tr>
+ <td>"{@code screenSize}"</td>
+ <td>The current available screen size has changed. This represents a change in the currently
+available size, relative to the current aspect ratio, so will change when the user switches between
+landscape and portrait. However, if your application targets API level 12 or lower, then your
+activity always handles this configuration change itself (this configuration change does not restart
+your activity, even when running on an Android 3.2 or higher device).
+ <p><em>Added in API level 13.</em></p></td>
+ </tr><tr>
+ <td>"{@code smallestScreenSize}"</td>
+ <td>The physical screen size has changed. This represents a change in size regardless of
+orientation, so will only change when the actual physical screen size has changed such as switching
+to an external display. A change to this configuration corresponds to a change in the <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#SmallestScreenWidthQualifier">
+smallestWidth configuration</a>. However, if your application targets API level 12 or lower, then
+your activity always handles this configuration change itself (this configuration change does not
+restart your activity, even when running on an Android 3.2 or higher device).
+ <p><em>Added in API level 13.</em></p></td>
+ </tr>
</table>
<p>
@@ -581,8 +604,9 @@
</p></dd>
<dt><a name="screen"></a>{@code android:screenOrientation}</dt>
-<dd>The orientation of the activity's display on the device.
-The value can be any one of the following strings:
+<dd>The orientation of the activity's display on the device.
+
+<p>The value can be any one of the following strings:</p>
<table>
<tr>
@@ -640,7 +664,23 @@
distinction, the system chooses the orientation using the same policy as for the "{@code
unspecified}" setting.</td>
</tr>
-</table></dd>
+</table>
+
+<p class="note"><strong>Note:</strong> When you declare one of the landscape or portrait values,
+it is considered a hard requirement for the orientation in which the activity runs. As such,
+the value you declare enables filtering by services such as Android Market so your application is
+available only to devices that support the orientation required by your activities. For
+example, if you declare either {@code "landscape"}, {@code "reverseLandscape"}, or
+{@code "sensorLandscape"}, then your application will be available only to devices that support
+landscape orientation. However, you should also explicitly declare that
+your application requires either portrait or landscape orientation with the <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+element. For example, <code><uses-feature
+android:name="android.hardware.screen.portrait"/></code>. This is purely a filtering behavior
+provided by Android Market (and other services that support it) and the platform itself does not
+control whether your app can be installed when a device supports only certain orientations.</p>
+
+</dd>
<dt><a name="state"></a>{@code android:stateNotNeeded}</dt>
<dd>Whether or not the activity can be killed and successfully restarted
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index 49d6b62..9f80638 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -111,7 +111,7 @@
with your application. For this reason, it's very important that you declare all of
the features (from the list below) that your application uses. </p>
-<p>For some features, there may exist a specfic attribute that allows you to define
+<p>For some features, there may exist a specific attribute that allows you to define
a version of the feature, such as the version of Open GL used (declared with
<a href="#glEsVersion"><code>glEsVersion</code></a>). Other features that either do or do not
exist for a device, such as a camera, are declared using the
@@ -277,7 +277,7 @@
it (<code>"true"</code>), or whether the application prefers to use the feature
if available, but is designed to run without it (<code>"false"</code>).</p>
-<p>Android Market handles explictly declared features in this way: </p>
+<p>Android Market handles explicitly declared features in this way: </p>
<ul>
<li>If a feature is explicitly declared as being required, Android Market adds
@@ -287,7 +287,7 @@
<pre><uses-feature android:name="android.hardware.camera" android:required="true" /></pre></li>
<li>If a feature is explicitly declared as <em>not</em> being required, Android
Market <em>does not</em> add the feature to the list of required features. For
-that reason, an explicity declared non-required feature is never considered when
+that reason, an explicitly declared non-required feature is never considered when
filtering the application. Even if the device does not provide the declared
feature, Android Market will still consider the application compatible with the
device and will show it to the user, unless other filtering rules apply. For
@@ -650,6 +650,40 @@
<td>The application uses the device's proximity sensor.</td>
<td></td>
</tr>
+
+<tr>
+ <td rowspan="2">Screen</td>
+ <td><code>android.hardware.screen.landscape</code></td>
+ <td>The application requires landscape orientation.</td>
+ <td rowspan="2">
+ <p>For example, if your app requires portrait orientation, you should declare
+<code><uses-feature android:name="android.hardware.screen.portrait"/></code> so that only devices
+that support portrait orientation (whether always or by user choice) can install your app. If your
+application <em>supports</em> both orientations, then you don't need to declare either.</p>
+ <p>Both orientations are assumed <em>not required</em>, by default, so your app may be installed
+on devices that support one or both orientations. However, if any of your activities request that
+they run in a specific orientation, using the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
+android:screenOrientation}</a> attribute, then this also declares that the application requires that
+orientation. For example, if you declare <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
+android:screenOrientation}</a> with either {@code "landscape"}, {@code "reverseLandscape"}, or
+{@code "sensorLandscape"}, then your application will be available only to devices that support
+landscape orientation. As a best practice, you should still declare your requirement for this
+orientation using a {@code <uses-feature>} element. If you declare an orientation for your
+activity using <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
+android:screenOrientation}</a>, but don't actually <em>require</em> it, you can disable the
+requirement by declaring the orientation with a {@code <uses-feature>} element and include
+{@code android:required="false"}.</p>
+ <p>For backwards compatibility, any device running a platform version that supports only API
+level 12 or lower is assumed to support both landscape and portrait.</p>
+ </td>
+</tr>
+<tr>
+ <td><code>android.hardware.screen.portrait</code></td>
+ <td>The application requires portrait orientation.</td>
+</tr>
+
<tr>
<td rowspan="3">Telephony</td>
<td><code>android.hardware.telephony</code></td>
@@ -672,17 +706,18 @@
</tr>
<tr>
- <td rowspan="5">Touchscreen</td>
+ <td rowspan="7">Touchscreen</td>
<td><code>android.hardware.faketouch</code></td>
<td>The application uses basic touch interaction events, such as "click down", "click
up", and drag.</td>
- <td>When declared, this indicates that the application is compatible with a device that offers an
-emulated touchscreen ("fake touch" interface), or better. A device that offers a fake touch
-interface provides a user input system that emulates a subset of touchscreen capabilities. For
-example, a mouse or remote control that drives an on-screen cursor provides a fake touch interface.
-If your application requires only basic point and click interaction, you should declare this
-feature. Because this is the minimum level of touch interaction, your app will also be compatible
-with devices that offer more complex touch interfaces.
+ <td><p>When declared as required, this indicates that the application is compatible with a device
+only if it offers an emulated touchscreen ("fake touch" interface), or better. A device that offers
+a fake touch interface provides a user input system that emulates a subset of touchscreen
+capabilities. For example, a mouse or remote control that drives an on-screen cursor provides a fake
+touch interface. If your application requires basic point and click interaction (in other
+words, it won't work with <em>only</em> a d-pad controller), you should declare this feature.
+Because this is the minimum level of touch interaction, your app will also be compatible with
+devices that offer more complex touch interfaces.</p>
<p class="note"><strong>Note:</strong> Because applications require the {@code
android.hardware.touchscreen} feature by default, if you want your application to be available to
devices that provide a fake touch interface, you must also explicitly declare that a touch screen is
@@ -690,18 +725,53 @@
android:name="android.hardware.touchscreen" <strong>android:required="false"</strong>
/>}</p></td>
</tr>
+
+<tr>
+ <td><code>android.hardware.faketouch.multitouch.distinct</code></td>
+ <td>The application performs distinct tracking of two or more "fingers" on a fake touch
+interface. This is a superset of the faketouch feature.</td>
+ <td><p>When declared as required, this indicates that the application is compatible with a device
+only if it supports touch emulation for events that supports distinct tracking of two or more
+fingers, or better.</p>
+ <p>Unlike the distinct multitouch defined by {@code
+android.hardware.touchscreen.multitouch.distinct}, input devices that support distinct multi-touch
+with a fake touch interface will not support all two-finger gestures, because the input is
+being transformed to cursor movement on the screen. That is, single finger gestures on such a device
+move a cursor; two-finger swipes will result in single-finger touch events; other two-finger
+gestures will result in the corresponding two-finger touch event. An example device that supports
+distinct multi-touch with a fake touch interface is one that provides a trackpad for cursor movement
+which also supports two or more fingers.</p></td>
+</tr>
+
+<tr>
+ <td><code>android.hardware.faketouch.multitouch.jazzhand</code></td>
+ <td>The application performs distinct tracking of five or more "fingers" on a fake touch
+interface. This is a superset of the faketouch feature.</td>
+ <td><p>When declared as required, this indicates that the application is compatible with a device
+only if it supports touch emulation for events that supports distinct tracking of five or more
+fingers.</p>
+ <p>Unlike the distinct multitouch defined by {@code
+android.hardware.touchscreen.multitouch.jazzhand}, input devices that support jazzhand multi-touch
+with a fake touch interface will not support all five-finger gestures, because the input is being
+transformed to cursor movement on the screen. That is, single finger gestures on such a device move
+a cursor; multi-finger gestures will result in single-finger touch events; other multi-finger
+gestures will result in the corresponding multi-finger touch event. An example device that supports
+distinct multi-touch with a fake touch interface is one that provides a trackpad for cursor movement
+which also supports five or more fingers.</p></td>
+</tr>
+
<tr>
<td><code>android.hardware.touchscreen</code></td>
<td>The application uses touchscreen capabilities for gestures that are more interactive
-than basic touch events, such as a fling. This is a superset of the faketouch features.</td>
- <td>By default, your application requires this. As such, your application is
-<em>not</em> available to devices that provide only an emulated touch interface ("fake touch"), by
-default. If you want your application available to devices that provide a fake touch interface,
-you must explicitly declare that a touch screen is not required, by
-declaring {@code android.hardware.touchscreen} with {@code android:required="false"}. You should
-do so even if your application uses—but does not <em>require</em>—a real touch screen
-interface.
-<p>If your application <em>does require</em> a basic touch interface (in order to perform touch
+than basic touch events, such as a fling. This is a superset of the basic faketouch feature.</td>
+ <td><p>By default, your application requires this. As such, your application is <em>not</em>
+available to devices that provide only an emulated touch interface ("fake touch"), by default. If
+you want your application available to devices that provide a fake touch interface (or even devices
+that provide only a d-pad controller), you must explicitly declare that a touch screen is not
+required, by declaring {@code android.hardware.touchscreen} with {@code android:required="false"}.
+You should do so even if your application uses—but does not <em>require</em>—a real
+touch screen interface.</p>
+<p>If your application <em>does require</em> a touch interface (in order to perform touch
gestures such as a fling), then you don't need to do anything, because this is required by default.
However, it's best if you explicitly declare all features used by your application, so you should
still declare this if your app uses it.</p>
@@ -712,7 +782,7 @@
<td><code>android.hardware.touchscreen.multitouch</code></td>
<td>The application uses basic two-point multitouch capabilities on the device
screen, such as for pinch gestures, but does not need to track touches independently. This
-is a superset of touchscreen features.</td>
+is a superset of touchscreen feature.</td>
<td>This implicitly declares the <code>android.hardware.touchscreen</code> parent feature, unless
declared with <code>android:required="false"</code>. </td>
</tr>
@@ -720,7 +790,7 @@
<td><code>android.hardware.touchscreen.multitouch.distinct</code></td>
<td>Subfeature. The application uses advanced multipoint multitouch
capabilities on the device screen, such as for tracking two or more points fully
-independently. This is a superset of multitouch features.</td>
+independently. This is a superset of multitouch feature.</td>
<td rowspan="2">This implicitly declares the <code>android.hardware.touchscreen.multitouch</code>
parent feature, unless declared with <code>android:required="false"</code>. </td>
</tr>
@@ -728,7 +798,7 @@
<td><code>android.hardware.touchscreen.multitouch.jazzhand</code></td>
<td>The application uses advanced multipoint multitouch
capabilities on the device screen, for tracking up to five points fully
-independently. This is a superset of distinct multitouch features.</td>
+independently. This is a superset of distinct multitouch feature.</td>
</tr>
<tr>
diff --git a/docs/html/guide/topics/media/audio-capture.jd b/docs/html/guide/topics/media/audio-capture.jd
new file mode 100644
index 0000000..75d294b
--- /dev/null
+++ b/docs/html/guide/topics/media/audio-capture.jd
@@ -0,0 +1,253 @@
+page.title=Audio Capture
+parent.title=Multimedia and Camera
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#audiocapture">Performing Audio Capture</a>
+ <ol>
+ <li><a href='#example'>Code Example</a></li>
+ </ol>
+</li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+<li>{@link android.media.MediaRecorder}</li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+ <li><a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media Formats</a></li>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a></li>
+ <li><a href="{@docRoot}guide/topics/media/mediaplayer.html">MediaPlayer</a>
+</ol>
+
+</div>
+</div>
+
+<p>The Android multimedia framework includes support for capturing and encoding a variety of common
+audio formats, so that you can easily integrate audio into your applications. You can record audio
+using the {@link android.media.MediaRecorder} APIs if supported by the device hardware.</p>
+
+<p>This document shows you how to write an application that captures audio from a device
+microphone, save the audio and play it back.</p>
+
+<p class="note"><strong>Note:</strong> The Android Emulator does not have the ability to capture
+audio, but actual devices are likely to provide these capabilities.</p>
+
+<h2 id="audiocapture">Performing Audio Capture</h2>
+
+<p>Audio capture from the device is a bit more complicated than audio and video playback, but still
+fairly simple:</p>
+<ol>
+ <li>Create a new instance of {@link android.media.MediaRecorder android.media.MediaRecorder}.</li>
+ <li>Set the audio source using
+ {@link android.media.MediaRecorder#setAudioSource MediaRecorder.setAudioSource()}. You will
+probably want to use
+ <code>MediaRecorder.AudioSource.MIC</code>.</li>
+ <li>Set output file format using
+ {@link android.media.MediaRecorder#setOutputFormat MediaRecorder.setOutputFormat()}.
+ </li>
+ <li>Set output file name using
+ {@link android.media.MediaRecorder#setOutputFile MediaRecorder.setOutputFile()}.
+ </li>
+ <li>Set the audio encoder using
+ {@link android.media.MediaRecorder#setAudioEncoder MediaRecorder.setAudioEncoder()}.
+ </li>
+ <li>Call {@link android.media.MediaRecorder#prepare MediaRecorder.prepare()}
+ on the MediaRecorder instance.</li>
+ <li>To start audio capture, call
+ {@link android.media.MediaRecorder#start MediaRecorder.start()}. </li>
+ <li>To stop audio capture, call {@link android.media.MediaRecorder#stop MediaRecorder.stop()}.
+ <li>When you are done with the MediaRecorder instance, call
+{@link android.media.MediaRecorder#release MediaRecorder.release()} on it. Calling
+{@link android.media.MediaRecorder#release MediaRecorder.release()} is always recommended to
+free the resource immediately.</li>
+</ol>
+
+<h3 id="example">Example: Record audio and play the recorded audio</h3>
+<p>The example class below illustrates how to set up, start and stop audio capture, and to play the
+recorded audio file.</p>
+<pre>
+/*
+ * The application needs to have the permission to write to external storage
+ * if the output file is written to the external storage, and also the
+ * permission to record audio. These permissions must be set in the
+ * application's AndroidManifest.xml file, with something like:
+ *
+ * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ * <uses-permission android:name="android.permission.RECORD_AUDIO" />
+ *
+ */
+package com.android.audiorecordtest;
+
+import android.app.Activity;
+import android.widget.LinearLayout;
+import android.os.Bundle;
+import android.os.Environment;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.content.Context;
+import android.util.Log;
+import android.media.MediaRecorder;
+import android.media.MediaPlayer;
+
+import java.io.IOException;
+
+
+public class AudioRecordTest extends Activity
+{
+ private static final String LOG_TAG = "AudioRecordTest";
+ private static String mFileName = null;
+
+ private RecordButton mRecordButton = null;
+ private MediaRecorder mRecorder = null;
+
+ private PlayButton mPlayButton = null;
+ private MediaPlayer mPlayer = null;
+
+ private void onRecord(boolean start) {
+ if (start) {
+ startRecording();
+ } else {
+ stopRecording();
+ }
+ }
+
+ private void onPlay(boolean start) {
+ if (start) {
+ startPlaying();
+ } else {
+ stopPlaying();
+ }
+ }
+
+ private void startPlaying() {
+ mPlayer = new MediaPlayer();
+ try {
+ mPlayer.setDataSource(mFileName);
+ mPlayer.prepare();
+ mPlayer.start();
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "prepare() failed");
+ }
+ }
+
+ private void stopPlaying() {
+ mPlayer.release();
+ mPlayer = null;
+ }
+
+ private void startRecording() {
+ mRecorder = new MediaRecorder();
+ mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+ mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
+ mRecorder.setOutputFile(mFileName);
+ mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+
+ try {
+ mRecorder.prepare();
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "prepare() failed");
+ }
+
+ mRecorder.start();
+ }
+
+ private void stopRecording() {
+ mRecorder.stop();
+ mRecorder.release();
+ mRecorder = null;
+ }
+
+ class RecordButton extends Button {
+ boolean mStartRecording = true;
+
+ OnClickListener clicker = new OnClickListener() {
+ public void onClick(View v) {
+ onRecord(mStartRecording);
+ if (mStartRecording) {
+ setText("Stop recording");
+ } else {
+ setText("Start recording");
+ }
+ mStartRecording = !mStartRecording;
+ }
+ };
+
+ public RecordButton(Context ctx) {
+ super(ctx);
+ setText("Start recording");
+ setOnClickListener(clicker);
+ }
+ }
+
+ class PlayButton extends Button {
+ boolean mStartPlaying = true;
+
+ OnClickListener clicker = new OnClickListener() {
+ public void onClick(View v) {
+ onPlay(mStartPlaying);
+ if (mStartPlaying) {
+ setText("Stop playing");
+ } else {
+ setText("Start playing");
+ }
+ mStartPlaying = !mStartPlaying;
+ }
+ };
+
+ public PlayButton(Context ctx) {
+ super(ctx);
+ setText("Start playing");
+ setOnClickListener(clicker);
+ }
+ }
+
+ public AudioRecordTest() {
+ mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
+ mFileName += "/audiorecordtest.3gp";
+ }
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ LinearLayout ll = new LinearLayout(this);
+ mRecordButton = new RecordButton(this);
+ ll.addView(mRecordButton,
+ new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 0));
+ mPlayButton = new PlayButton(this);
+ ll.addView(mPlayButton,
+ new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 0));
+ setContentView(ll);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (mRecorder != null) {
+ mRecorder.release();
+ mRecorder = null;
+ }
+
+ if (mPlayer != null) {
+ mPlayer.release();
+ mPlayer = null;
+ }
+ }
+}
+</pre>
\ No newline at end of file
diff --git a/docs/html/guide/topics/media/camera.jd b/docs/html/guide/topics/media/camera.jd
new file mode 100644
index 0000000..877bded
--- /dev/null
+++ b/docs/html/guide/topics/media/camera.jd
@@ -0,0 +1,1055 @@
+page.title=Camera
+parent.title=Multimedia and Camera
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#considerations">Considerations</a></li>
+ <li><a href="#basics">The Basics</a>
+ <li><a href="#manifest">Manifest Declarations</a></li>
+ <li><a href="#intents">Using Existing Camera Apps</a>
+ <ol>
+ <li><a href="#intent-image">Image capture intent</a></li>
+ <li><a href="#intent-video">Video capture intent</a></li>
+ <li><a href="#intent-receive">Receiving camera intent result</a></li>
+ </ol>
+ <li><a href="#custom-camera">Building a Camera App</a>
+ <ol>
+ <li><a href="#detect-camera">Detecting camera hardware</a></li>
+ <li><a href="#access-camera">Accessing cameras</a></li>
+ <li><a href="#check-camera-features">Checking camera features</a></li>
+ <li><a href="#camera-preview">Creating a preview class</a></li>
+ <li><a href="#preview-layout">Placing preview in a layout</a></li>
+ <li><a href="#capture-picture">Capturing pictures</a></li>
+ <li><a href="#capture-video">Capturing videos</a></li>
+ <li><a href="#release-camera">Releasing the camera</a></li>
+ </ol>
+ </li>
+ <li><a href="#saving-media">Saving Media Files</a></li>
+ </ol>
+ <h2>Key Classes</h2>
+ <ol>
+ <li>{@link android.hardware.Camera}</li>
+ <li>{@link android.view.SurfaceView}</li>
+ <li>{@link android.media.MediaRecorder}</li>
+ <li>{@link android.content.Intent}</li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}reference/android/hardware/Camera.html">Camera</a></li>
+ <li><a href="{@docRoot}reference/android/media/MediaRecorder.html">MediaRecorder</a></li>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a></li>
+ </ol>
+ </div>
+</div>
+
+
+<p>The Android framework includes support for various cameras and camera features available on
+devices, allowing you to capture pictures and videos in your applications. This document discusses a
+quick, simple approach to image and video capture and outlines an advanced approach for creating
+custom camera experiences for your users.</p>
+
+<h2 id="considerations">Considerations</h2>
+<p>Before enabling your application to use cameras on Android devices, you should consider a few
+questions about how your app intends to use this hardware feature.</p>
+
+<ul>
+ <li><strong>Camera Requirement</strong> - Is the use of a camera so important to your
+application that you do not want your application installed on a device that does not have a
+camera? If so, you should declare the <a href="#manifest">camera requirement in your
+manifest</a>.</li>
+
+ <li><strong>Quick Picture or Customized Camera</strong> - How will your application use the
+camera? Are you just interested in snapping a quick picture or video clip, or will your application
+provide a new way to use cameras? For a getting a quick snap or clip, consider
+<a href="#intents">Using Existing Camera Apps</a>. For developing a customized camera feature, check
+out the <a href="#custom-camera">Building a Camera App</a> section.</li>
+
+ <li><strong>Storage</strong> - Are the images or videos your application generates intended to be
+only visible to your application or shared so that other applications such as Gallery or other
+media and social apps can use them? Do you want the pictures and videos to be available even if your
+application is uninstalled? Check out the <a href="#saving-media">Saving Media Files</a> section to
+see how to implement these options.</li>
+</ul>
+
+
+
+<h2 id="basics">The Basics</h2>
+<p>The Android framework supports capturing images and video through the
+{@link android.hardware.Camera} API or camera {@link android.content.Intent}. Here are the relevant
+classes:</p>
+
+<dl>
+ <dt>{@link android.hardware.Camera}</dt>
+ <dd>This class is the primary API for controlling device cameras. This class is used to take
+pictures or videos when you are building a camera application.</a>.</dd>
+
+ <dt>{@link android.view.SurfaceView}</dt>
+ <dd>This class is used to present a live camera preview to the user.</dd>
+
+ <dt>{@link android.media.MediaRecorder}</dt>
+ <dd>This class is used to record video from the camera.</dd>
+
+ <dt>{@link android.content.Intent}</dt>
+ <dd>An intent action type of {@link android.provider.MediaStore#ACTION_IMAGE_CAPTURE
+MediaStore.ACTION_IMAGE_CAPTURE} or {@link android.provider.MediaStore#ACTION_VIDEO_CAPTURE
+MediaStore.ACTION_VIDEO_CAPTURE} can be used to capture images or videos without directly
+using the {@link android.hardware.Camera} object.</dd>
+</dl>
+
+
+<h2 id="manifest">Manifest Declarations</h2>
+<p>Before starting development on your application with the Camera API, you should make sure
+your manifest has the appropriate declarations to allow use of camera hardware and other
+related features.</p>
+
+<ul>
+ <li><strong>Camera Permission</strong> - Your application must request permission to use a device
+camera.
+<pre>
+<uses-permission android:name="android.permission.CAMERA" />
+</pre>
+ <p class="note"><strong>Note:</strong> If you are using the camera <a href="#intents">via an
+intent</a>, your application does not need to request this permission.</p>
+ </li>
+ <li><strong>Camera Features</strong> - Your application must also declare use of camera features,
+for example:
+<pre>
+<uses-feature android:name="android.hardware.camera" />
+</pre>
+ <p>For a list of camera features, see the manifest <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html#features-reference">Features
+Reference</a>.</p>
+ <p>Adding camera features to your manifest causes Android Market to prevent your application from
+being installed to devices that do not include a camera or do not support the camera features you
+specify. For more information about using feature-based filtering with Android Market, see <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html#market-feature-filtering">Android
+Market and Feature-Based Filtering</a>.</p>
+ <p>If your application <em>can use</em> a camera or camera feature for proper operation, but does
+not <em>require</em> it, you should specify this in the manifest by including the {@code
+android:required} attribute, and setting it to {@code false}:</p>
+<pre>
+<uses-feature android:name="android.hardware.camera" android:required="false" />
+</pre>
+
+ </li>
+ <li><strong>Storage Permission</strong> - If your application saves images or videos to the
+device's external storage (SD Card), you must also specify this in the manifest.
+<pre>
+<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+</pre>
+ </li>
+ <li><strong>Audio Recording Permission</strong> - For recording audio with video capture, your
+application must request the audio capture permission.
+<pre>
+<uses-permission android:name="android.permission.RECORD_AUDIO" />
+</pre>
+ </li>
+</ul>
+
+
+<h2 id="intents">Using Existing Camera Apps</h2>
+<p>A quick way to enable taking pictures or videos in your application without a lot of extra code
+is to use an {@link android.content.Intent} to invoke an existing Android camera application. A
+camera intent makes a request to capture a picture or video clip through an existing camera app and
+then returns control back to your application. This section shows you how to capture an image or
+video using this technique.</p>
+
+<p>The procedure for invoking a camera intent follows these general steps:</p>
+
+<ol>
+ <li><strong>Compose a Camera Intent</strong> - Create an {@link android.content.Intent} that
+requests an image or video, using one of these intent types:
+ <ul>
+ <li>{@link android.provider.MediaStore#ACTION_IMAGE_CAPTURE MediaStore.ACTION_IMAGE_CAPTURE} -
+Intent action type for requesting an image from an existing camera application.</li>
+ <li>{@link android.provider.MediaStore#ACTION_VIDEO_CAPTURE MediaStore.ACTION_VIDEO_CAPTURE} -
+Intent action type for requesting a video from an existing camera application. </li>
+ </ul>
+ </li>
+ <li><strong>Start the Camera Intent</strong> - Use the {@link
+android.app.Activity#startActivityForResult(android.content.Intent, int) startActivityForResult()}
+method to execute the camera intent. After you start the intent, the Camera application user
+interface appears on the device screen and the user can take a picture or video.</li>
+ <li><strong>Receive the Intent Result</strong> - Set up an {@link
+android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()} method
+in your application to receive the callback and data from the camera intent. When the user
+finishes taking a picture or video (or cancels the operation), the system calls this method.</li>
+</ol>
+
+
+<h3 id="intent-image">Image capture intent</h3>
+<p>Capturing images using a camera intent is quick way to enable your application to take pictures
+with minimal coding. An image capture intent can include the following extra information:</p>
+
+<ul>
+ <li>{@link android.provider.MediaStore#EXTRA_OUTPUT MediaStore.EXTRA_OUTPUT} - This setting
+requires a {@link android.net.Uri} object specifying a path and file name where you'd like to
+save the picture. This setting is optional but strongly recommended. If you do not specify this
+value, the camera application saves the requested picture in the default location with a default
+name, specified in the returned intent's {@link android.content.Intent#getData() Intent.getData()}
+field.</li>
+</ul>
+
+<p>The following example demonstrates how to construct a image capture intent and execute it.
+The {@code getOutputMediaFileUri()} method in this example refers to the sample code shown in <a
+href= "#saving-media">Saving Media Files</a>.</p>
+
+<pre>
+private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
+private Uri fileUri;
+
+@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ // create Intent to take a picture and return control to the calling application
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+
+ fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
+
+ // start the image capture Intent
+ startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
+}
+</pre>
+
+<p>When the {@link android.app.Activity#startActivityForResult(android.content.Intent, int)
+startActivityForResult()} method is executed, users see a camera application interface.
+After the user finishes taking a picture (or cancels the operation), the user interface returns to
+your application, and you must intercept the {@link
+android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()}
+method to receive the result of the intent and continue your application execution. For information
+on how to receive the completed intent, see <a href="#intent-receive">Receiving Camera Intent
+Result</a>.</p>
+
+
+<h3 id="intent-video">Video capture intent</h3>
+<p>Capturing video using a camera intent is a quick way to enable your application to take videos
+with minimal coding. A video capture intent can include the following extra information:</p>
+
+<ul>
+ <li>{@link android.provider.MediaStore#EXTRA_OUTPUT MediaStore.EXTRA_OUTPUT} - This setting
+requires a {@link android.net.Uri} specifying a path and file name where you'd like to save the
+video. This setting is optional but strongly recommended. If you do not specify this value, the
+Camera application saves the requested video in the default location with a default name, specified
+in the returned intent's {@link android.content.Intent#getData() Intent.getData()} field.</li>
+ <li>{@link android.provider.MediaStore#EXTRA_VIDEO_QUALITY MediaStore.EXTRA_VIDEO_QUALITY} -
+This value can be 0 for lowest quality and smallest file size or 1 for highest quality and
+larger file size.</li>
+ <li>{@link android.provider.MediaStore#EXTRA_DURATION_LIMIT MediaStore.EXTRA_DURATION_LIMIT} -
+Set this value to limit the length, in seconds, of the video being captured.</li>
+ <li>{@link android.provider.MediaStore#EXTRA_SIZE_LIMIT MediaStore.EXTRA_SIZE_LIMIT} -
+Set this value to limit the file size, in bytes, of the video being captured.
+</li>
+</ul>
+
+<p>The following example demonstrates how to construct a video capture intent and execute it.
+The {@code getOutputMediaFileUri()} method in this example refers to the sample code shown in <a
+href= "#saving-media">Saving Media Files</a>.</p>
+
+<pre>
+private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
+private Uri fileUri;
+
+@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ //create new Intent
+ Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+
+ fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); // create a file to save the video
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
+
+ intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
+
+ // start the Video Capture Intent
+ startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
+}
+</pre>
+
+<p>When the {@link
+android.app.Activity#startActivityForResult(android.content.Intent, int)
+startActivityForResult()} method is executed, users see a modified camera application interface.
+After the user finishes taking a video (or cancels the operation), the user interface
+returns to your application, and you must intercept the {@link
+android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()}
+method to receive the result of the intent and continue your application execution. For information
+on how to receive the completed intent, see the next section.</p>
+
+<h3 id="intent-receive">Receiving camera intent result</h3>
+<p>Once you have constructed and executed an image or video camera intent, your application must be
+configured to receive the result of the intent. This section shows you how to intercept the callback
+from a camera intent so your application can do further processing of the captured image or
+video.</p>
+
+<p>In order to receive the result of an intent, you must override the {@link
+android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()} in the
+activity that started the intent. The following example demonstrates how to override {@link
+android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()} to
+capture the result of the <a href="#intent-image">image camera intent</a> or <a
+href="#intent-video">video camera intent</a> examples shown in the previous sections.</p>
+
+<pre>
+private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
+private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
+
+@Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
+ if (resultCode == RESULT_OK) {
+ // Image captured and saved to fileUri specified in the Intent
+ Toast.makeText(this, "Image saved to:\n" +
+ data.getData(), Toast.LENGTH_LONG).show();
+ } else if (resultCode == RESULT_CANCELED) {
+ // User cancelled the image capture
+ } else {
+ // Image capture failed, advise user
+ }
+ }
+
+ if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
+ if (resultCode == RESULT_OK) {
+ // Video captured and saved to fileUri specified in the Intent
+ Toast.makeText(this, "Video saved to:\n" +
+ data.getData(), Toast.LENGTH_LONG).show();
+ } else if (resultCode == RESULT_CANCELED) {
+ // User cancelled the video capture
+ } else {
+ // Video capture failed, advise user
+ }
+ }
+}
+</pre>
+
+<p>Once your activity receives a successful result, the captured image or video is available in the
+specified location for your application to access.</p>
+
+
+
+<h2 id="custom-camera">Building a Camera App</h2>
+<p>Some developers may require a camera user interface that is customized to the look of their
+application or provides special features. Creating a customized camera activity requires more
+code than <a href="#intents">using an intent</a>, but it can provide a more compelling experience
+for your users.</p>
+
+<p>The general steps for creating a custom camera interface for your application are as follows:</p>
+
+<ul>
+ <li><strong>Detect and Access Camera</strong> - Create code to check for the existence of
+cameras and request access.</li>
+ <li><strong>Create a Preview Class</strong> - Create a camera preview class that extends {@link
+android.view.SurfaceView} and implements the {@link android.view.SurfaceHolder} interface. This
+class previews the live images from the camera.</li>
+ <li><strong>Build a Preview Layout</strong> - Once you have the camera preview class, create a
+view layout that incorporates the preview and the user interface controls you want.</li>
+ <li><strong>Setup Listeners for Capture</strong> - Connect listeners for your interface
+controls to start image or video capture in response to user actions, such as pressing a
+button.</li>
+ <li><strong>Capture and Save Files</strong> - Setup the code for capturing pictures or
+videos and saving the output.</li>
+ <li><strong>Release the Camera</strong> - After using the camera, your application must
+properly release it for use by other applications.</li>
+</ul>
+
+<p>Camera hardware is a shared resource that must be carefully managed so your application does
+not collide with other applications that may also want to use it. The following sections discusses
+how to detect camera hardware, how to request access to a camera and how to release it when your
+application is done using it.</p>
+
+<p class="caution"><strong>Caution:</strong> Remember to release the {@link android.hardware.Camera}
+object by calling the {@link android.hardware.Camera#release() Camera.release()} when your
+application is done using it! If your application does not properly release the camera, all
+subsequent attempts to access the camera, including those by your own application, will fail and may
+cause your or other applications to be shut down.</p>
+
+
+<h3 id="detect-camera">Detecting camera hardware</h3>
+<p>If your application does not specifically require a camera using a manifest declaration, you
+should check to see if a camera is available at runtime. To perform this check, use the {@link
+android.content.pm.PackageManager#hasSystemFeature(java.lang.String)
+PackageManager.hasSystemFeature()} method, as shown in the example code below:</p>
+
+<pre>
+/** Check if this device has a camera */
+private boolean checkCameraHardware(Context context) {
+ if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
+ // this device has a camera
+ return true;
+ } else {
+ // no camera on this device
+ return false;
+ }
+}
+</pre>
+
+<p>Android devices can have multiple cameras, for example a back-facing camera for photography and a
+front-facing camera for video calls. Android 2.3 (API Level 9) and later allows you to check the
+number of cameras available on a device using the {@link
+android.hardware.Camera#getNumberOfCameras() Camera.getNumberOfCameras()} method.</p>
+
+<h3 id="access-camera">Accessing cameras</h3>
+<p>If you have determined that the device on which your application is running has a camera, you
+must request to access it by getting an instance of {@link android.hardware.Camera} (unless you
+are using an <a href="#intents">intent to access the camera</a>). </p>
+
+<p>To access the primary camera, use the {@link android.hardware.Camera#open() Camera.open()} method
+and be sure to catch any exceptions, as shown in the code below:</p>
+
+<pre>
+/** A safe way to get an instance of the Camera object. */
+public static Camera getCameraInstance(){
+ Camera c = null;
+ try {
+ c = Camera.open(); // attempt to get a Camera instance
+ }
+ catch (Exception e){
+ // Camera is not available (in use or does not exist)
+ }
+ return c; // returns null if camera is unavailable
+}
+</pre>
+
+<p class="caution"><strong>Caution:</strong> Always check for exceptions when using {@link
+android.hardware.Camera#open() Camera.open()}. Failing to check for exceptions if the camera is in
+use or does not exist will cause your application to be shut down by the system.</p>
+
+<p>On devices running Android 2.3 (API Level 9) or higher, you can access specific cameras using
+{@link android.hardware.Camera#open(int) Camera.open(int)}. The example code above will access
+the first, back-facing camera on a device with more than one camera.</p>
+
+<h3 id="check-camera-features">Checking camera features</h3>
+<p>Once you obtain access to a camera, you can get further information about its capabilties using
+the {@link android.hardware.Camera#getParameters() Camera.getParameters()} method and checking the
+returned {@link android.hardware.Camera.Parameters} object for supported capabilities. When using
+API Level 9 or higher, use the {@link android.hardware.Camera#getCameraInfo(int,
+android.hardware.Camera.CameraInfo) Camera.getCameraInfo()} to determine if a camera is on the front
+or back of the device, and the orientation of the image.</p>
+
+
+
+<h3 id="camera-preview">Creating a preview class</h3>
+<p>For users to effectively take pictures or video, they must be able to see what the device camera
+sees. A camera preview class is a {@link android.view.SurfaceView} that can display the live image
+data coming from a camera, so users can frame and capture a picture or video.</p>
+
+<p>The following example code demonstrates how to create a basic camera preview class that can be
+included in a {@link android.view.View} layout. This class implements {@link
+android.view.SurfaceHolder.Callback SurfaceHolder.Callback} in order to capture the callback events
+for creating and destroying the view, which are needed for assigning the camera preview input.</p>
+
+<pre>
+/** A basic Camera preview class */
+public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
+ private SurfaceHolder mHolder;
+ private Camera mCamera;
+
+ public CameraPreview(Context context, Camera camera) {
+ super(context);
+ mCamera = camera;
+
+ // Install a SurfaceHolder.Callback so we get notified when the
+ // underlying surface is created and destroyed.
+ mHolder = getHolder();
+ mHolder.addCallback(this);
+ // deprecated setting, but required on Android versions prior to 3.0
+ mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ }
+
+ public void surfaceCreated(SurfaceHolder holder) {
+ // The Surface has been created, now tell the camera where to draw the preview.
+ try {
+ mCamera.setPreviewDisplay(holder);
+ mCamera.startPreview();
+ } catch (IOException e) {
+ Log.d(TAG, "Error setting camera preview: " + e.getMessage());
+ }
+ }
+
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ // empty. Take care of releasing the Camera preview in your activity.
+ }
+
+ public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
+ // If your preview can change or rotate, take care of those events here.
+ // Make sure to stop the preview before resizing or reformatting it.
+
+ if (mHolder.getSurface() == null){
+ // preview surface does not exist
+ return;
+ }
+
+ // stop preview before making changes
+ try {
+ mCamera.stopPreview();
+ } catch (Exception e){
+ // ignore: tried to stop a non-existent preview
+ }
+
+ // make any resize, rotate or reformatting changes here
+
+ // start preview with new settings
+ try {
+ mCamera.setPreviewDisplay(mHolder);
+ mCamera.startPreview();
+
+ } catch (Exception e){
+ Log.d(TAG, "Error starting camera preview: " + e.getMessage());
+ }
+ }
+}
+</pre>
+
+
+<h3 id="preview-layout">Placing preview in a layout</h3>
+<p>A camera preview class, such as the example shown in the previous section, must be placed in the
+layout of an activity along with other user interface controls for taking a picture or video. This
+section shows you how to build a basic layout and activity for the preview.</p>
+
+<p>The following layout code provides a very basic view that can be used to display a camera
+preview. In this example, the {@link android.widget.FrameLayout} element is meant to be the
+container for the camera preview class. This layout type is used so that additional picture
+information or controls can be overlayed on the live camera preview images.</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+ <FrameLayout
+ android:id="@+id/camera_preview"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_weight="1"
+ />
+
+ <Button
+ android:id="@+id/button_capture"
+ android:text="Capture"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ />
+</LinearLayout>
+</pre>
+
+<p>On most devices, the default orientation of the camera preview is landscape. This example layout
+specifies a horizontal (landscape) layout and the code below fixes the orientation of the
+application to landscape. For simplicity in rendering a camera preview, you should change your
+application's preview activity orientation to landscape by adding the following to your
+manifest.</p>
+
+<pre>
+<activity android:name=".CameraActivity"
+ android:label="@string/app_name"
+
+ android:screenOrientation="landscape">
+ <!-- configure this activity to use landscape orientation -->
+
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+</activity>
+</pre>
+
+<p class="note"><strong>Note:</strong> A camera preview does not have to be in landscape mode.
+Starting in Android 2.2 (API Level 8), you can use the {@link
+android.hardware.Camera#setDisplayOrientation(int) setDisplayOrientation()} method to set the
+rotation of the preview image. In order to change preview orientation as the user re-orients the
+phone, within the {@link
+android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder, int, int, int)
+surfaceChanged()} method of your preview class, first stop the preview with {@link
+android.hardware.Camera#stopPreview() Camera.stopPreview()} change the orientation and then
+start the preview again with {@link android.hardware.Camera#startPreview()
+Camera.startPreview()}.</p>
+
+<p>In the activity for your camera view, add your preview class to the {@link
+android.widget.FrameLayout} element shown in the example above. Your camera activity must also
+ensure that it releases the camera when it is paused or shut down. The following example shows how
+to modify a camera activity to attach the preview class shown in <a href="#camera-preview">Creating
+a preview class</a>.</p>
+
+<pre>
+public class CameraActivity extends Activity {
+
+ private Camera mCamera;
+ private CameraPreview mPreview;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ // Create an instance of Camera
+ mCamera = getCameraInstance();
+
+ // Create our Preview view and set it as the content of our activity.
+ mPreview = new CameraPreview(this, mCamera);
+ FrameLayout preview = (FrameLayout) findViewById(id.camera_preview);
+ preview.addView(mPreview);
+ }
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> The {@code getCameraInstance()} method in the example above
+refers to the example method shown in <a href="#access-camera">Accessing cameras</a>.</p>
+
+
+<h3 id="capture-picture">Capturing pictures</h3>
+<p>Once you have built a preview class and a view layout in which to display it, you are ready to
+start capturing images with your application. In your application code, you must set up listeners
+for your user interface controls to respond to a user action by taking a picture.</p>
+
+<p>In order to retrieve a picture, use the {@link
+android.hardware.Camera#takePicture(android.hardware.Camera.ShutterCallback,
+android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback)
+Camera.takePicture()} method. This method takes three parameters which receive data from the camera.
+In order to receive data in a JPEG format, you must implement an {@link
+android.hardware.Camera.PictureCallback} interface to receive the image data and
+write it to a file. The following code shows a basic implementation of the {@link
+android.hardware.Camera.PictureCallback} interface to save an image received from the camera.</p>
+
+<pre>
+private PictureCallback mPicture = new PictureCallback() {
+
+ @Override
+ public void onPictureTaken(byte[] data, Camera camera) {
+
+ File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
+ if (pictureFile == null){
+ Log.d(TAG, "Error creating media file, check storage permissions: " +
+ e.getMessage());
+ return;
+ }
+
+ try {
+ FileOutputStream fos = new FileOutputStream(pictureFile);
+ fos.write(data);
+ fos.close();
+ } catch (FileNotFoundException e) {
+ Log.d(TAG, "File not found: " + e.getMessage());
+ } catch (IOException e) {
+ Log.d(TAG, "Error accessing file: " + e.getMessage());
+ }
+ }
+};
+</pre>
+
+<p>Trigger capturing an image by calling the {@link
+android.hardware.Camera#takePicture(android.hardware.Camera.ShutterCallback,
+android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback)
+Camera.takePicture()} method. The following example code shows how to call this method from a
+button {@link android.view.View.OnClickListener}.</p>
+
+<pre>
+// Add a listener to the Capture button
+Button captureButton = (Button) findViewById(id.button_capture);
+ captureButton.setOnClickListener(
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // get an image from the camera
+ mCamera.takePicture(null, null, mPicture);
+ }
+ }
+);
+</pre>
+
+<p class="note"><strong>Note:</strong> The {@code mPicture} member in the following example refers
+to the example code above.</p>
+
+<p class="caution"><strong>Caution:</strong> Remember to release the {@link android.hardware.Camera}
+object by calling the {@link android.hardware.Camera#release() Camera.release()} when your
+application is done using it! For information about how to release the camera, see <a
+href="#release-camera">Releasing the camera</a>.</p>
+
+
+<h3 id="capture-video">Capturing videos</h3>
+
+<p>Video capture using the Android framework requires careful management of the {@link
+android.hardware.Camera} object and coordination with the {@link android.media.MediaRecorder}
+class. When recording video with {@link android.hardware.Camera}, you must manage the {@link
+android.hardware.Camera#lock() Camera.lock()} and {@link android.hardware.Camera#unlock()
+Camera.unlock()} calls to allow {@link android.media.MediaRecorder} access to the camera hardware,
+in addition to the {@link android.hardware.Camera#open() Camera.open()} and {@link
+android.hardware.Camera#release() Camera.release()} calls.</p>
+
+<p class="note"><strong>Note:</strong> Starting with Android 4.0 (API level 14), the {@link
+android.hardware.Camera#lock() Camera.lock()} and {@link android.hardware.Camera#unlock()
+Camera.unlock()} calls are managed for you automatically.</p>
+
+<p>Unlike taking pictures with a device camera, capturing video requires a very particular call
+order. You must follow a specific order of execution to successfully prepare for and capture video
+with your application, as detailed below.</p>
+
+<ol>
+ <li><strong>Open Camera</strong> - Use the {@link android.hardware.Camera#open() Camera.open()}
+to get an instance of the camera object.</li>
+ <li><strong>Connect Preview</strong> - Prepare a live camera image preview by connecting a {@link
+android.view.SurfaceView} to the camera using {@link
+android.hardware.Camera#setPreviewDisplay(android.view.SurfaceHolder) Camera.setPreviewDisplay()}.
+ </li>
+ <li><strong>Start Preview</strong> - Call {@link android.hardware.Camera#startPreview()
+Camera.startPreview()} to begin displaying the live camera images.</li>
+ <li><strong>Start Recording Video</strong> - The following steps must be completed <em>in
+order</em> to successfully record video:
+ <ol style="list-style-type: lower-alpha;">
+ <li><strong>Unlock the Camera</strong> - Unlock the camera for use by {@link
+android.media.MediaRecorder} by calling {@link android.hardware.Camera#unlock()
+Camera.unlock()}.</li>
+ <li><strong>Configure MediaRecorder</strong> - Call in the following {@link
+android.media.MediaRecorder} methods <em>in this order</em>. For more information, see the {@link
+android.media.MediaRecorder} reference documentation.
+ <ol>
+ <li>{@link android.media.MediaRecorder#setCamera(android.hardware.Camera)
+setCamera()} - Set the camera to be used for video capture, use your application's current instance
+of {@link android.hardware.Camera}.</li>
+ <li>{@link android.media.MediaRecorder#setAudioSource(int) setAudioSource()} - Set the
+audio source, use {@link android.media.MediaRecorder.AudioSource#CAMCORDER
+MediaRecorder.AudioSource.CAMCORDER}. </li>
+ <li>{@link android.media.MediaRecorder#setVideoSource(int) setVideoSource()} - Set
+the video source, use {@link android.media.MediaRecorder.VideoSource#CAMERA
+MediaRecorder.VideoSource.CAMERA}.</li>
+ <li>Set the video output format and encoding. For Android 2.2 (API Level 8) and
+higher, use the {@link android.media.MediaRecorder#setProfile(android.media.CamcorderProfile)
+MediaRecorder.setProfile} method, and get a profile instance using {@link
+android.media.CamcorderProfile#get(int) CamcorderProfile.get()}. For versions of Android prior to
+2.2, you must set the video output format and encoding parameters:
+ <ol style="list-style-type: lower-roman;">
+ <li>{@link android.media.MediaRecorder#setOutputFormat(int) setOutputFormat()} - Set
+the output format, specify the default setting or {@link
+android.media.MediaRecorder.OutputFormat#MPEG_4 MediaRecorder.OutputFormat.MPEG_4}.</li>
+ <li>{@link android.media.MediaRecorder#setAudioEncoder(int) setAudioEncoder()} - Set
+the sound encoding type, specify the default setting or {@link
+android.media.MediaRecorder.AudioEncoder#AMR_NB MediaRecorder.AudioEncoder.AMR_NB}.</li>
+ <li>{@link android.media.MediaRecorder#setVideoEncoder(int) setVideoEncoder()} - Set
+the video encoding type, specify the default setting or {@link
+android.media.MediaRecorder.VideoEncoder#MPEG_4_SP MediaRecorder.VideoEncoder.MPEG_4_SP}.</li>
+ </ol>
+ </li>
+ <li>{@link android.media.MediaRecorder#setOutputFile(java.lang.String) setOutputFile()} -
+Set the output file, use {@code getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()} from the example
+method in the <a href="#saving-media">Saving Media Files</a> section.</li>
+ <li>{@link android.media.MediaRecorder#setPreviewDisplay(android.view.Surface)
+setPreviewDisplay()} - Specify the {@link android.view.SurfaceView} preview layout element for
+your application. Use the same object you specified for <strong>Connect Preview</strong>.</li>
+ </ol>
+ <p class="caution"><strong>Caution:</strong> You must call these {@link
+android.media.MediaRecorder} configuration methods <em>in this order</em>, otherwise your
+application will encounter errors and the recording will fail.</p>
+ </li>
+ <li><strong>Prepare MediaRecorder</strong> - Prepare the {@link android.media.MediaRecorder}
+with provided configuration settings by calling {@link android.media.MediaRecorder#prepare()
+MediaRecorder.prepare()}.</li>
+ <li><strong>Start MediaRecorder</strong> - Start recording video by calling {@link
+android.media.MediaRecorder#start() MediaRecorder.start()}.</li>
+ </ol>
+ </li>
+ <li><strong>Stop Recording Video</strong> - Call the following methods <em>in order</em>, to
+successfully complete a video recording:
+ <ol style="list-style-type: lower-alpha;">
+ <li><strong>Stop MediaRecorder</strong> - Stop recording video by calling {@link
+android.media.MediaRecorder#stop() MediaRecorder.stop()}.</li>
+ <li><strong>Reset MediaRecorder</strong> - Optionally, remove the configuration settings from
+the recorder by calling {@link android.media.MediaRecorder#reset() MediaRecorder.reset()}.</li>
+ <li><strong>Release MediaRecorder</strong> - Release the {@link android.media.MediaRecorder}
+by calling {@link android.media.MediaRecorder#release() MediaRecorder.release()}.</li>
+ <li><strong>Lock the Camera</strong> - Lock the camera so that future {@link
+android.media.MediaRecorder} sessions can use it by calling {@link android.hardware.Camera#lock()
+Camera.lock()}. Starting with Android 4.0 (API level 14), this call is not required unless the
+{@link android.media.MediaRecorder#prepare() MediaRecorder.prepare()} call fails.</li>
+ </ol>
+ </li>
+ <li><strong>Stop the Preview</strong> - When your activity has finished using the camera, stop the
+preview using {@link android.hardware.Camera#stopPreview() Camera.stopPreview()}.</li>
+ <li><strong>Release Camera</strong> - Release the camera so that other applications can use
+it by calling {@link android.hardware.Camera#release() Camera.release()}.</li>
+</ol>
+
+<p class="note"><strong>Note:</strong> It is possible to use {@link android.media.MediaRecorder}
+without creating a camera preview first and skip the first few steps of this process. However,
+since users typically prefer to see a preview before starting a recording, that process is not
+discussed here.</p>
+
+<h4 id="configuring-mediarecorder">Configuring MediaRecorder</h4>
+<p>When using the {@link android.media.MediaRecorder} class to record video, you must perform
+configuration steps in a <em>specific order</em> and then call the {@link
+android.media.MediaRecorder#prepare() MediaRecorder.prepare()} method to check and implement the
+configuration. The following example code demonstrates how to properly configure and prepare the
+{@link android.media.MediaRecorder} class for video recording.</p>
+
+<pre>
+private boolean prepareVideoRecorder(){
+
+ mCamera = getCameraInstance();
+ mMediaRecorder = new MediaRecorder();
+
+ // Step 1: Unlock and set camera to MediaRecorder
+ mCamera.unlock();
+ mMediaRecorder.setCamera(mCamera);
+
+ // Step 2: Set sources
+ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
+ mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+
+ // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
+ mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
+
+ // Step 4: Set output file
+ mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
+
+ // Step 5: Set the preview output
+ mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
+
+ // Step 6: Prepare configured MediaRecorder
+ try {
+ mMediaRecorder.prepare();
+ } catch (IllegalStateException e) {
+ Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
+ releaseMediaRecorder();
+ return false;
+ } catch (IOException e) {
+ Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
+ releaseMediaRecorder();
+ return false;
+ }
+ return true;
+}
+</pre>
+
+<p>Prior to Android 2.2 (API Level 8), you must set the output format and encoding formats
+parameters directly, instead of using {@link android.media.CamcorderProfile}. This approach is
+demonstrated in the following code:</p>
+
+<pre>
+ // Step 3: Set output format and encoding (for versions prior to API Level 8)
+ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
+ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
+ mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
+</pre>
+
+<p>The following video recording parameters for {@link android.media.MediaRecorder} are given
+default settings, however, you may want to adjust these settings for your application:</p>
+
+<ul>
+ <li>{@link android.media.MediaRecorder#setVideoEncodingBitRate(int)
+setVideoEncodingBitRate()}</li>
+ <li>{@link android.media.MediaRecorder#setVideoSize(int, int) setVideoSize()}</li>
+ <li>{@link android.media.MediaRecorder#setVideoFrameRate(int) setVideoFrameRate()}</li>
+ <li>{@link android.media.MediaRecorder#setAudioEncodingBitRate(int)
+setAudioEncodingBitRate()}</li> <li>{@link android.media.MediaRecorder#setAudioChannels(int)
+setAudioChannels()}</li>
+ <li>{@link android.media.MediaRecorder#setAudioSamplingRate(int) setAudioSamplingRate()}</li>
+</ul>
+
+<h4 id="start-stop-mediarecorder">Starting and Stopping MediaRecorder</h4>
+<p>When starting and stopping video recording using the {@link android.media.MediaRecorder} class,
+you must follow a specific order, as listed below.</p>
+
+<ol>
+ <li>Unlock the camera with {@link android.hardware.Camera#unlock() Camera.unlock()}</li>
+ <li>Configure {@link android.media.MediaRecorder} as shown in the code example above</li>
+ <li>Start recording using {@link android.media.MediaRecorder#start()
+MediaRecorder.start()}</li>
+ <li>Record the video</li>
+ <li>Stop recording using {@link
+android.media.MediaRecorder#stop() MediaRecorder.stop()}</li>
+ <li>Release the media recorder with {@link android.media.MediaRecorder#release()
+MediaRecorder.release()}</li>
+ <li>Lock the camera using {@link android.hardware.Camera#lock() Camera.lock()}</li>
+</ol>
+
+<p>The following example code demonstrates how to wire up a button to properly start and stop
+video recording using the camera and the {@link android.media.MediaRecorder} class.</p>
+
+<p class="note"><strong>Note:</strong> When completing a video recording, do not release the camera
+or else your preview will be stopped.</p>
+
+<pre>
+private boolean isRecording = false;
+
+// Add a listener to the Capture button
+Button captureButton = (Button) findViewById(id.button_capture);
+captureButton.setOnClickListener(
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (isRecording) {
+ // stop recording and release camera
+ mMediaRecorder.stop(); // stop the recording
+ releaseMediaRecorder(); // release the MediaRecorder object
+ mCamera.lock(); // take camera access back from MediaRecorder
+
+ // inform the user that recording has stopped
+ setCaptureButtonText("Capture");
+ isRecording = false;
+ } else {
+ // initialize video camera
+ if (prepareVideoRecorder()) {
+ // Camera is available and unlocked, MediaRecorder is prepared,
+ // now you can start recording
+ mMediaRecorder.start();
+
+ // inform the user that recording has started
+ setCaptureButtonText("Stop");
+ isRecording = true;
+ } else {
+ // prepare didn't work, release the camera
+ releaseMediaRecorder();
+ // inform user
+ }
+ }
+ }
+ }
+);
+</pre>
+
+<p class="note"><strong>Note:</strong> In the above example, the {@code prepareVideoRecorder()}
+method refers to the example code shown in <a
+href="#configuring-mediarecorder">Configuring MediaRecorder</a>. This method takes care of locking
+the camera, configuring and preparing the {@link android.media.MediaRecorder} instance.</p>
+
+
+<h3 id="release-camera">Releasing the camera</h3>
+<p>Cameras are a resource that is shared by applications on a device. Your application can make
+use of the camera after getting an instance of {@link android.hardware.Camera}, and you must be
+particularly careful to release the camera object when your application stops using it, and as
+soon as your application is paused ({@link android.app.Activity#onPause() Activity.onPause()}). If
+your application does not properly release the camera, all subsequent attempts to access the camera,
+including those by your own application, will fail and may cause your or other applications to be
+shut down.</p>
+
+<p>To release an instance of the {@link android.hardware.Camera} object, use the {@link
+android.hardware.Camera#release() Camera.release()} method, as shown in the example code below.</p>
+
+<pre>
+public class CameraActivity extends Activity {
+ private Camera mCamera;
+ private SurfaceView mPreview;
+ private MediaRecorder mMediaRecorder;
+
+ ...
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ releaseMediaRecorder(); // if you are using MediaRecorder, release it first
+ releaseCamera(); // release the camera immediately on pause event
+ }
+
+ private void releaseMediaRecorder(){
+ if (mMediaRecorder != null) {
+ mMediaRecorder.reset(); // clear recorder configuration
+ mMediaRecorder.release(); // release the recorder object
+ mMediaRecorder = null;
+ mCamera.lock(); // lock camera for later use
+ }
+ }
+
+ private void releaseCamera(){
+ if (mCamera != null){
+ mCamera.release(); // release the camera for other applications
+ mCamera = null;
+ }
+ }
+}
+</pre>
+
+<p class="caution"><strong>Caution:</strong> If your application does not properly release the
+camera, all subsequent attempts to access the camera, including those by your own application, will
+fail and may cause your or other applications to be shut down.</p>
+
+
+<h2 id="saving-media">Saving Media Files</h2>
+<p>Media files created by users such as pictures and videos should be saved to a device's external
+storage directory (SD Card) to conserve system space and to allow users to access these files
+without their device. There are many possible directory locations to save media files on a device,
+however there are only two standard locations you should consider as a developer:</p>
+
+<ul>
+ <li><strong>{@link android.os.Environment#getExternalStoragePublicDirectory(java.lang.String)
+Environment.getExternalStoragePublicDirectory}({@link android.os.Environment#DIRECTORY_PICTURES
+Environment.DIRECTORY_PICTURES})</strong> - This method returns the standard, shared and recommended
+location for saving pictures and videos. This directory is shared (public), so other applications
+can easily discover, read, change and delete files saved in this location. If your application is
+uninstalled by the user, media files saved to this location will not be removed. To avoid
+interfering with users existing pictures and videos, you should create a sub-directory for your
+application's media files within this directory, as shown in the code sample below. This method is
+available in Android 2.2 (API Level 8), for equivalent calls in earlier API versions, see <a
+href="{@docRoot}guide/topics/data/data-storage.html#SavingSharedFiles">Saving Shared Files</a>.</li>
+ <li><strong>{@link android.content.Context#getExternalFilesDir(java.lang.String)
+Context.getExternalFilesDir}({@link android.os.Environment#DIRECTORY_PICTURES
+Environment.DIRECTORY_PICTURES})</strong> - This method returns a standard location for saving
+pictures and videos which are associated with your application. If your application is uninstalled,
+any files saved in this location are removed. Security is not enforced for files in this
+location and other applications may read, change and delete them.</li>
+</ul>
+
+<p>The following example code demonstrates how to create a {@link java.io.File} or {@link
+android.net.Uri} location for a media file that can be used when invoking a device's camera with
+an {@link android.content.Intent} or as part of a <a href="#custom-camera">Building a Camera
+App</a>.</p>
+
+<pre>
+public static final int MEDIA_TYPE_IMAGE = 1;
+public static final int MEDIA_TYPE_VIDEO = 2;
+
+/** Create a file Uri for saving an image or video */
+private static Uri getOutputMediaFileUri(int type){
+ return Uri.fromFile(getOutputMediaFile(type));
+}
+
+/** Create a File for saving an image or video */
+private static Uri getOutputMediaFile(int type){
+ // To be safe, you should check that the SDCard is mounted
+ // using Environment.getExternalStorageState() before doing this.
+
+ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES), "MyCameraApp");
+ // This location works best if you want the created images to be shared
+ // between applications and persist after your app has been uninstalled.
+
+ // Create the storage directory if it does not exist
+ if (! mediaStorageDir.exists()){
+ if (! mediaStorageDir.mkdirs()){
+ Log.d("MyCameraApp", "failed to create directory");
+ return null;
+ }
+ }
+
+ // Create a media file name
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
+ File mediaFile;
+ if (type == MEDIA_TYPE_IMAGE){
+ mediaFile = new File(mediaStorageDir.getPath() + File.separator +
+ "IMG_"+ timeStamp + ".jpg");
+ } else if(type == MEDIA_TYPE_VIDEO) {
+ mediaFile = new File(mediaStorageDir.getPath() + File.separator +
+ "VID_"+ timeStamp + ".mp4");
+ } else {
+ return null;
+ }
+
+ return mediaFile;
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> {@link
+android.os.Environment#getExternalStoragePublicDirectory(java.lang.String)
+Environment.getExternalStoragePublicDirectory()} is available in Android 2.2 (API Level 8) or
+higher. If you are targeting devices with earlier versions of Android, use {@link
+android.os.Environment#getExternalStorageDirectory() Environment.getExternalStorageDirectory()}
+instead. For more information, see <a
+href="{@docRoot}guide/topics/data/data-storage.html#SavingSharedFiles">Saving Shared Files</a>.</p>
+
+<p>For more information about saving files on an Android device, see <a
+href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/media/index.jd b/docs/html/guide/topics/media/index.jd
index 06e6208..7c1754f 100644
--- a/docs/html/guide/topics/media/index.jd
+++ b/docs/html/guide/topics/media/index.jd
@@ -1,971 +1,62 @@
-page.title=Media
+page.title=Multimedia and Camera
@jd:body
<div id="qv-wrapper">
<div id="qv">
-<h2>Quickview</h2>
-<ul>
-<li>MediaPlayer APIs allow you to play and record media</li>
-<li>You can handle data from raw resources, files, and streams</li>
-<li>The platform supports a variety of media formats. See <a
-href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media Formats</a></li>
-</ul>
-
-<h2>In this document</h2>
+<h2>Topics</h2>
<ol>
-<li><a href="#mediaplayer">Using MediaPlayer</a>
- <ol>
- <li><a href='#preparingasync'>Asynchronous Preparation</a></li>
- <li><a href='#managestate'>Managing State</a></li>
- <li><a href='#releaseplayer'>Releasing the MediaPlayer</a></li>
- </ol>
-</li>
-<li><a href="#mpandservices">Using a Service with MediaPlayer</a>
- <ol>
- <li><a href="#asyncprepare">Running asynchronously</a></li>
- <li><a href="#asyncerror">Handling asynchronous errors</a></li>
- <li><a href="#wakelocks">Using wake locks</a></li>
- <li><a href="#foregroundserv">Running as a foreground service</a></li>
- <li><a href="#audiofocus">Handling audio focus</a></li>
- <li><a href="#cleanup">Performing cleanup</a></li>
- </ol>
-</li>
-<li><a href="#noisyintent">Handling the AUDIO_BECOMING_NOISY Intent</a>
-<li><a href="#viacontentresolver">Retrieving Media from a Content Resolver</a>
-<li><a href="#jetcontent">Playing JET content</a>
-<li><a href="#audiocapture">Performing Audio Capture</a>
+<li><a href="{@docRoot}guide/topics/media/mediaplayer.html">MediaPlayer</a></li>
+<li><a href="{@docRoot}guide/topics/media/jetplayer.html">JetPlayer</a></li>
+<li><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></li>
+<li><a href="{@docRoot}guide/topics/media/audio-capture.html">Audio Capture</a></li>
</ol>
<h2>Key classes</h2>
<ol>
<li>{@link android.media.MediaPlayer}</li>
+<li>{@link android.media.JetPlayer}</li>
+<li>{@link android.hardware.Camera}</li>
<li>{@link android.media.MediaRecorder}</li>
<li>{@link android.media.AudioManager}</li>
-<li>{@link android.media.JetPlayer}</li>
<li>{@link android.media.SoundPool}</li>
</ol>
<h2>See also</h2>
<ol>
-<li><a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a></li>
-<li><a href="{@docRoot}guide/topics/media/jet/jetcreator_manual.html">JetCreator User Manual</a></li>
+<li></li>
+<li><a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media Formats</a></li>
+<li><a href="{@docRoot}guide/topics/media/jet/jetcreator_manual.html">JetCreator User
+Manual</a></li>
</ol>
</div>
</div>
-<p>The Android multimedia framework includes support for encoding and decoding a
-variety of common media types, so that you can easily integrate audio,
-video and images into your applications. You can play audio or video from media files stored in your
-application's resources (raw resources), from standalone files in the filesystem, or from a data
-stream arriving over a network connection, all using {@link android.media.MediaPlayer} APIs.</p>
+<p>The Android multimedia framework includes support for capturing and playing audio, video and
+images in a variety of common media types, so that you can easily integrate them into your
+applications. You can play audio or video from media files stored in your application's resources,
+from standalone files in the file system, or from a data stream arriving over a
+network connection, all using the {@link android.media.MediaPlayer} or {@link
+android.media.JetPlayer} APIs. You can also record audio, video and take pictures using the {@link
+android.media.MediaRecorder} and {@link android.hardware.Camera} APIs if supported by the device
+hardware.</p>
-<p>You can also record audio and video using the {@link android.media.MediaRecorder} APIs if
-supported by the device hardware. Note that the emulator doesn't have hardware to capture audio or
-video, but actual mobile devices are likely to provide these capabilities.</p>
+<p>The following topics show you how to use the Android framework to implement multimedia capture
+and playback.</p>
-<p>This document shows you how to write a media-playing application that interacts with the user and
-the system in order to obtain good performance and a pleasant user experience.</p>
+<dl>
+ <dt><strong><a href="{@docRoot}guide/topics/media/mediaplayer.html">MediaPlayer</a></strong></dt>
+ <dd>How to play audio and video in your application.</dd>
-<p class="note"><strong>Note:</strong> You can play back the audio data only to the standard output
-device. Currently, that is the mobile device speaker or a Bluetooth headset. You cannot play sound
-files in the conversation audio during a call.</p>
+ <dt><strong><a href="{@docRoot}guide/topics/media/jetplayer.html">JetPlayer</a></strong></dt>
+ <dd>How to play interactive audio and video in your application using content created with
+JetCreator.</dd>
+ <dt><strong><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></strong></dt>
+ <dd>How to use a device camera to take pictures or video in your application.</dd>
-<h2 id="mediaplayer">Using MediaPlayer</h2>
-
-<p>One of the most important components of the media framework is the
-{@link android.media.MediaPlayer MediaPlayer}
-class. An object of this class can fetch, decode, and play both audio and video
-with minimal setup. It supports several different media sources such as:
-<ul>
- <li>Local resources</li>
- <li>Internal URIs, such as one you might obtain from a Content Resolver</li>
- <li>External URLs (streaming)</li>
-</ul>
-</p>
-
-<p>For a list of media formats that Android supports,
-see the <a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media
-Formats</a> document. </p>
-
-<p>Here is an example
-of how to play audio that's available as a local raw resource (saved in your application's
-{@code res/raw/} directory):</p>
-
-<pre>MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
-mediaPlayer.start(); // no need to call prepare(); create() does that for you
-</pre>
-
-<p>In this case, a "raw" resource is a file that the system does not
-try to parse in any particular way. However, the content of this resource should not
-be raw audio. It should be a properly encoded and formatted media file in one
-of the supported formats.</p>
-
-<p>And here is how you might play from a URI available locally in the system
-(that you obtained through a Content Resolver, for instance):</p>
-
-<pre>Uri myUri = ....; // initialize Uri here
-MediaPlayer mediaPlayer = new MediaPlayer();
-mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
-mediaPlayer.setDataSource(getApplicationContext(), myUri);
-mediaPlayer.prepare();
-mediaPlayer.start();</pre>
-
-<p>Playing from a remote URL via HTTP streaming looks like this:</p>
-
-<pre>String url = "http://........"; // your URL here
-MediaPlayer mediaPlayer = new MediaPlayer();
-mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
-mediaPlayer.setDataSource(url);
-mediaPlayer.prepare(); // might take long! (for buffering, etc)
-mediaPlayer.start();</pre>
-
-<p class="note"><strong>Note:</strong>
-If you're passing a URL to stream an online media file, the file must be capable of
-progressive download.</p>
-
-<p class="caution"><strong>Caution:</strong> You must either catch or pass
-{@link java.lang.IllegalArgumentException} and {@link java.io.IOException} when using
-{@link android.media.MediaPlayer#setDataSource setDataSource()}, because
-the file you are referencing might not exist.</p>
-
-<h3 id='#preparingasync'>Asynchronous Preparation</h3>
-
-<p>Using {@link android.media.MediaPlayer MediaPlayer} can be straightforward in
-principle. However, it's important to keep in mind that a few more things are
-necessary to integrate it correctly with a typical Android application. For
-example, the call to {@link android.media.MediaPlayer#prepare prepare()} can
-take a long time to execute, because
-it might involve fetching and decoding media data. So, as is the case with any
-method that may take long to execute, you should <strong>never call it from your
-application's UI thread</strong>. Doing that will cause the UI to hang until the method returns,
-which is a very bad user experience and can cause an ANR (Application Not Responding) error. Even if
-you expect your resource to load quickly, remember that anything that takes more than a tenth
-of a second to respond in the UI will cause a noticeable pause and will give
-the user the impression that your application is slow.</p>
-
-<p>To avoid hanging your UI thread, spawn another thread to
-prepare the {@link android.media.MediaPlayer} and notify the main thread when done. However, while
-you could write the threading logic
-yourself, this pattern is so common when using {@link android.media.MediaPlayer} that the framework
-supplies a convenient way to accomplish this task by using the
-{@link android.media.MediaPlayer#prepareAsync prepareAsync()} method. This method
-starts preparing the media in the background and returns immediately. When the media
-is done preparing, the {@link android.media.MediaPlayer.OnPreparedListener#onPrepared onPrepared()}
-method of the {@link android.media.MediaPlayer.OnPreparedListener
-MediaPlayer.OnPreparedListener}, configured through
-{@link android.media.MediaPlayer#setOnPreparedListener setOnPreparedListener()} is called.</p>
-
-<h3 id='#managestate'>Managing State</h3>
-
-<p>Another aspect of a {@link android.media.MediaPlayer} that you should keep in mind is
-that it's state-based. That is, the {@link android.media.MediaPlayer} has an internal state
-that you must always be aware of when writing your code, because certain operations
-are only valid when then player is in specific states. If you perform an operation while in the
-wrong state, the system may throw an exception or cause other undesireable behaviors.</p>
-
-<p>The documentation in the
-{@link android.media.MediaPlayer MediaPlayer} class shows a complete state diagram,
-that clarifies which methods move the {@link android.media.MediaPlayer} from one state to another.
-For example, when you create a new {@link android.media.MediaPlayer}, it is in the <em>Idle</em>
-state. At that point, you should initialize it by calling
-{@link android.media.MediaPlayer#setDataSource setDataSource()}, bringing it
-to the <em>Initialized</em> state. After that, you have to prepare it using either the
-{@link android.media.MediaPlayer#prepare prepare()} or
-{@link android.media.MediaPlayer#prepareAsync prepareAsync()} method. When
-the {@link android.media.MediaPlayer} is done preparing, it will then enter the <em>Prepared</em>
-state, which means you can call {@link android.media.MediaPlayer#start start()}
-to make it play the media. At that point, as the diagram illustrates,
-you can move between the <em>Started</em>, <em>Paused</em> and <em>PlaybackCompleted</em> states by
-calling such methods as
-{@link android.media.MediaPlayer#start start()},
-{@link android.media.MediaPlayer#pause pause()}, and
-{@link android.media.MediaPlayer#seekTo seekTo()},
-amongst others. When you
-call {@link android.media.MediaPlayer#stop stop()}, however, notice that you
-cannot call {@link android.media.MediaPlayer#start start()} again until you
-prepare the {@link android.media.MediaPlayer} again.</p>
-
-<p>Always keep <a href='{@docRoot}images/mediaplayer_state_diagram.gif'>the state diagram</a>
-in mind when writing code that interacts with a
-{@link android.media.MediaPlayer} object, because calling its methods from the wrong state is a
-common cause of bugs.</p>
-
-<h3 id='#releaseplayer'>Releasing the MediaPlayer</h3>
-
-<p>A {@link android.media.MediaPlayer MediaPlayer} can consume valuable
-system resources.
-Therefore, you should always take extra precautions to make sure you are not
-hanging on to a {@link android.media.MediaPlayer} instance longer than necessary. When you
-are done with it, you should always call
-{@link android.media.MediaPlayer#release release()} to make sure any
-system resources allocated to it are properly released. For example, if you are
-using a {@link android.media.MediaPlayer} and your activity receives a call to {@link
-android.app.Activity#onStop onStop()}, you must release the {@link android.media.MediaPlayer},
-because it
-makes little sense to hold on to it while your activity is not interacting with
-the user (unless you are playing media in the background, which is discussed in the next section).
-When your activity is resumed or restarted, of course, you need to
-create a new {@link android.media.MediaPlayer} and prepare it again before resuming playback.</p>
-
-<p>Here's how you should release and then nullify your {@link android.media.MediaPlayer}:</p>
-<pre>
-mediaPlayer.release();
-mediaPlayer = null;
-</pre>
-
-<p>As an example, consider the problems that could happen if you
-forgot to release the {@link android.media.MediaPlayer} when your activity is stopped, but create a
-new one when the activity starts again. As you may know, when the user changes the
-screen orientation (or changes the device configuration in another way),
-the system handles that by restarting the activity (by default), so you might quickly
-consume all of the system resources as the user
-rotates the device back and forth between portrait and landscape, because at each
-orientation change, you create a new {@link android.media.MediaPlayer} that you never
-release. (For more information about runtime restarts, see <a
-href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime Changes</a>.)</p>
-
-<p>You may be wondering what happens if you want to continue playing
-"background media" even when the user leaves your activity, much in the same
-way that the built-in Music application behaves. In this case, what you need is
-a {@link android.media.MediaPlayer MediaPlayer} controlled by a {@link android.app.Service}, as
-discussed in <a href="mpandservices">Using a Service with MediaPlayer</a>.</p>
-
-<h2 id="mpandservices">Using a Service with MediaPlayer</h2>
-
-<p>If you want your media to play in the background even when your application
-is not onscreen—that is, you want it to continue playing while the user is
-interacting with other applications—then you must start a
-{@link android.app.Service Service} and control the
-{@link android.media.MediaPlayer MediaPlayer} instance from there.
-You should be careful about this setup, because the user and the system have expectations
-about how an application running a background service should interact with the rest of the
-system. If your application does not fulfil those expectations, the user may
-have a bad experience. This section describes the main issues that you should be
-aware of and offers suggestions about how to approach them.</p>
-
-
-<h3 id="asyncprepare">Running asynchronously</h3>
-
-<p>First of all, like an {@link android.app.Activity Activity}, all work in a
-{@link android.app.Service Service} is done in a single thread by
-default—in fact, if you're running an activity and a service from the same application, they
-use the same thread (the "main thread") by default. Therefore, services need to
-process incoming intents quickly
-and never perform lengthy computations when responding to them. If any heavy
-work or blocking calls are expected, you must do those tasks asynchronously: either from
-another thread you implement yourself, or using the framework's many facilities
-for asynchronous processing.</p>
-
-<p>For instance, when using a {@link android.media.MediaPlayer} from your main thread,
-you should call {@link android.media.MediaPlayer#prepareAsync prepareAsync()} rather than
-{@link android.media.MediaPlayer#prepare prepare()}, and implement
-a {@link android.media.MediaPlayer.OnPreparedListener MediaPlayer.OnPreparedListener}
-in order to be notified when the preparation is complete and you can start playing.
-For example:</p>
-
-<pre>
-public class MyService extends Service implements MediaPlayer.OnPreparedListener {
- private static final ACTION_PLAY = "com.example.action.PLAY";
- MediaPlayer mMediaPlayer = null;
-
- public int onStartCommand(Intent intent, int flags, int startId) {
- ...
- if (intent.getAction().equals(ACTION_PLAY)) {
- mMediaPlayer = ... // initialize it here
- mMediaPlayer.setOnPreparedListener(this);
- mMediaPlayer.prepareAsync(); // prepare async to not block main thread
- }
- }
-
- /** Called when MediaPlayer is ready */
- public void onPrepared(MediaPlayer player) {
- player.start();
- }
-}
-</pre>
-
-
-<h3 id="asyncerror">Handling asynchronous errors</h3>
-
-<p>On synchronous operations, errors would normally
-be signaled with an exception or an error code, but whenever you use asynchronous
-resources, you should make sure your application is notified
-of errors appropriately. In the case of a {@link android.media.MediaPlayer MediaPlayer},
-you can accomplish this by implementing a
-{@link android.media.MediaPlayer.OnErrorListener MediaPlayer.OnErrorListener} and
-setting it in your {@link android.media.MediaPlayer} instance:</p>
-
-<pre>
-public class MyService extends Service implements MediaPlayer.OnErrorListener {
- MediaPlayer mMediaPlayer;
-
- public void initMediaPlayer() {
- // ...initialize the MediaPlayer here...
-
- mMediaPlayer.setOnErrorListener(this);
- }
-
- @Override
- public boolean onError(MediaPlayer mp, int what, int extra) {
- // ... react appropriately ...
- // The MediaPlayer has moved to the Error state, must be reset!
- }
-}
-</pre>
-
-<p>It's important to remember that when an error occurs, the {@link android.media.MediaPlayer}
-moves to the <em>Error</em> state (see the documentation for the
-{@link android.media.MediaPlayer MediaPlayer} class for the full state diagram)
-and you must reset it before you can use it again.
-
-
-<h3 id="wakelocks">Using wake locks</h3>
-
-<p>When designing applications that play media
-in the background, the device may go to sleep
-while your service is running. Because the Android system tries to conserve
-battery while the device is sleeping, the system tries to shut off any
-of the phone's features that are
-not necessary, including the CPU and the WiFi hardware.
-However, if your service is playing or streaming music, you want to prevent
-the system from interfering with your playback.</p>
-
-<p>In order to ensure that your service continues to run under
-those conditions, you have to use "wake locks." A wake lock is a way to signal to
-the system that your application is using some feature that should
-stay available even if the phone is idle.</p>
-
-<p class="caution"><strong>Notice:</strong> You should always use wake locks sparingly and hold them
-only for as long as truly necessary, because they significantly reduce the battery life of the
-device.</p>
-
-<p>To ensure that the CPU continues running while your {@link android.media.MediaPlayer} is
-playing, call the {@link android.media.MediaPlayer#setWakeMode
-setWakeMode()} method when initializing your {@link android.media.MediaPlayer}. Once you do,
-the {@link android.media.MediaPlayer} holds the specified lock while playing and releases the lock
-when paused or stopped:</p>
-
-<pre>
-mMediaPlayer = new MediaPlayer();
-// ... other initialization here ...
-mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
-</pre>
-
-<p>However, the wake lock acquired in this example guarantees only that the CPU remains awake. If
-you are streaming media over the
-network and you are using Wi-Fi, you probably want to hold a
-{@link android.net.wifi.WifiManager.WifiLock WifiLock} as
-well, which you must acquire and release manually. So, when you start preparing the
-{@link android.media.MediaPlayer} with the remote URL, you should create and acquire the Wi-Fi lock.
-For example:</p>
-
-<pre>
-WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))
- .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");
-
-wifiLock.acquire();
-</pre>
-
-<p>When you pause or stop your media, or when you no longer need the
-network, you should release the lock:</p>
-
-<pre>
-wifiLock.release();
-</pre>
-
-
-<h3 id="foregroundserv">Running as a foreground service</h3>
-
-<p>Services are often used for performing background tasks, such as fetching emails,
-synchronizing data, downloading content, amongst other possibilities. In these
-cases, the user is not actively aware of the service's execution, and probably
-wouldn't even notice if some of these services were interrupted and later restarted.</p>
-
-<p>But consider the case of a service that is playing music. Clearly this is a service that the user
-is actively aware of and the experience would be severely affected by any interruptions.
-Additionally, it's a service that the user will likely wish to interact with during its execution.
-In this case, the service should run as a "foreground service." A
-foreground service holds a higher level of importance within the system—the system will
-almost never kill the service, because it is of immediate importance to the user. When running
-in the foreground, the service also must provide a status bar notification to ensure that users are
-aware of the running service and allow them to open an activity that can interact with the
-service.</p>
-
-<p>In order to turn your service into a foreground service, you must create a
-{@link android.app.Notification Notification} for the status bar and call
-{@link android.app.Service#startForeground startForeground()} from the {@link
-android.app.Service}. For example:</p>
-
-<pre>String songName;
-// assign the song name to songName
-PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0,
- new Intent(getApplicationContext(), MainActivity.class),
- PendingIntent.FLAG_UPDATE_CURRENT);
-Notification notification = new Notification();
-notification.tickerText = text;
-notification.icon = R.drawable.play0;
-notification.flags |= Notification.FLAG_ONGOING_EVENT;
-notification.setLatestEventInfo(getApplicationContext(), "MusicPlayerSample",
- "Playing: " + songName, pi);
-startForeground(NOTIFICATION_ID, notification);
-</pre>
-
-<p>While your service is running in the foreground, the notification you
-configured is visible in the notification area of the device. If the user
-selects the notification, the system invokes the {@link android.app.PendingIntent} you supplied. In
-the example above, it opens an activity ({@code MainActivity}).</p>
-
-<p>Figure 1 shows how your notification appears to the user:</p>
-
-<img src='images/notification1.png' />
-
-<img src='images/notification2.png' />
-<p class="img-caption"><strong>Figure 1.</strong> Screenshots of a foreground service's notification, showing the notification icon in the status bar (left) and the expanded view (right).</p>
-
-<p>You should only hold on to the "foreground service" status while your
-service is actually performing something the user is actively aware of. Once
-that is no longer true, you should release it by calling
-{@link android.app.Service#stopForeground stopForeground()}:</p>
-
-<pre>
-stopForeground(true);
-</pre>
-
-<p>For more information, see the documentation about <a
-href="{@docRoot}guide/topics/fundamentals/services.html#Foreground">Services</a> and
-<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>.</p>
-
-
-<h3 id="audiofocus">Handling audio focus</h3>
-
-<p>Even though only one activity can run at any given time, Android is a
-multi-tasking environment. This poses a particular challenge to applications
-that use audio, because there is only one audio output and there may be several
-media services competing for its use. Before Android 2.2, there was no built-in
-mechanism to address this issue, which could in some cases lead to a bad user
-experience. For example, when a user is listening to
-music and another application needs to notify the user of something very important,
-the user might not hear the notification tone due to the loud music. Starting with
-Android 2.2, the platform offers a way for applications to negotiate their
-use of the device's audio output. This mechanism is called Audio Focus.</p>
-
-<p>When your application needs to output audio such as music or a notification,
-you should always request audio focus. Once it has focus, it can use the sound output freely, but it should
-always listen for focus changes. If it is notified that it has lost the audio
-focus, it should immediately either kill the audio or lower it to a quiet level
-(known as "ducking"—there is a flag that indicates which one is appropriate) and only resume
-loud playback after it receives focus again.</p>
-
-<p>Audio Focus is cooperative in nature. That is, applications are expected
-(and highly encouraged) to comply with the audio focus guidelines, but the
-rules are not enforced by the system. If an application wants to play loud
-music even after losing audio focus, nothing in the system will prevent that.
-However, the user is more likely to have a bad experience and will be more
-likely to uninstall the misbehaving application.</p>
-
-<p>To request audio focus, you must call
-{@link android.media.AudioManager#requestAudioFocus requestAudioFocus()} from the {@link
-android.media.AudioManager}, as the example below demonstrates:</p>
-
-<pre>
-AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
-int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
- AudioManager.AUDIOFOCUS_GAIN);
-
-if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
- // could not get audio focus.
-}
-</pre>
-
-<p>The first parameter to {@link android.media.AudioManager#requestAudioFocus requestAudioFocus()}
-is an {@link android.media.AudioManager.OnAudioFocusChangeListener
-AudioManager.OnAudioFocusChangeListener},
-whose {@link android.media.AudioManager.OnAudioFocusChangeListener#onAudioFocusChange
-onAudioFocusChange()} method is called whenever there is a change in audio focus. Therefore, you
-should also implement this interface on your service and activities. For example:</p>
-
-<pre>
-class MyService extends Service
- implements AudioManager.OnAudioFocusChangeListener {
- // ....
- public void onAudioFocusChange(int focusChange) {
- // Do something based on focus change...
- }
-}
-</pre>
-
-<p>The <code>focusChange</code> parameter tells you how the audio focus has changed, and
-can be one of the following values (they are all constants defined in
-{@link android.media.AudioManager AudioManager}):</p>
-
-<ul>
-<li>{@link android.media.AudioManager#AUDIOFOCUS_GAIN}: You have gained the audio focus.</li>
-
-<li>{@link android.media.AudioManager#AUDIOFOCUS_LOSS}: You have lost the audio focus for a
-presumably long time.
-You must stop all audio playback. Because you should expect not to have focus back
-for a long time, this would be a good place to clean up your resources as much
-as possible. For example, you should release the {@link android.media.MediaPlayer}.</li>
-
-<li>{@link android.media.AudioManager#AUDIOFOCUS_LOSS_TRANSIENT}: You have
-temporarily lost audio focus, but should receive it back shortly. You must stop
-all audio playback, but you can keep your resources because you will probably get
-focus back shortly.</li>
-
-<li>{@link android.media.AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK}: You have temporarily
-lost audio focus,
-but you are allowed to continue to play audio quietly (at a low volume) instead
-of killing audio completely.</li>
-</ul>
-
-<p>Here is an example implementation:</p>
-
-<pre>
-public void onAudioFocusChange(int focusChange) {
- switch (focusChange) {
- case AudioManager.AUDIOFOCUS_GAIN:
- // resume playback
- if (mMediaPlayer == null) initMediaPlayer();
- else if (!mMediaPlayer.isPlaying()) mMediaPlayer.start();
- mMediaPlayer.setVolume(1.0f, 1.0f);
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS:
- // Lost focus for an unbounded amount of time: stop playback and release media player
- if (mMediaPlayer.isPlaying()) mMediaPlayer.stop();
- mMediaPlayer.release();
- mMediaPlayer = null;
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- // Lost focus for a short time, but we have to stop
- // playback. We don't release the media player because playback
- // is likely to resume
- if (mMediaPlayer.isPlaying()) mMediaPlayer.pause();
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
- // Lost focus for a short time, but it's ok to keep playing
- // at an attenuated level
- if (mMediaPlayer.isPlaying()) mMediaPlayer.setVolume(0.1f, 0.1f);
- break;
- }
-}
-</pre>
-
-<p>Keep in mind that the audio focus APIs are available only with API level 8 (Android 2.2)
-and above, so if you want to support previous
-versions of Android, you should adopt a backward compatibility strategy that
-allows you to use this feature if available, and fall back seamlessly if not.</p>
-
-<p>You can achieve backward compatibility either by calling the audio focus methods by reflection
-or by implementing all the audio focus features in a separate class (say,
-<code>AudioFocusHelper</code>). Here is an example of such a class:</p>
-
-<pre>
-public class AudioFocusHelper implements AudioManager.OnAudioFocusChangeListener {
- AudioManager mAudioManager;
-
- // other fields here, you'll probably hold a reference to an interface
- // that you can use to communicate the focus changes to your Service
-
- public AudioFocusHelper(Context ctx, /* other arguments here */) {
- mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
- // ...
- }
-
- public boolean requestFocus() {
- return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==
- mAudioManager.requestAudioFocus(mContext, AudioManager.STREAM_MUSIC,
- AudioManager.AUDIOFOCUS_GAIN);
- }
-
- public boolean abandonFocus() {
- return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==
- mAudioManager.abandonAudioFocus(this);
- }
-
- @Override
- public void onAudioFocusChange(int focusChange) {
- // let your service know about the focus change
- }
-}
-</pre>
-
-
-<p>You can create an instance of <code>AudioFocusHelper</code> class only if you detect that
-the system is running API level 8 or above. For example:</p>
-
-<pre>
-if (android.os.Build.VERSION.SDK_INT >= 8) {
- mAudioFocusHelper = new AudioFocusHelper(getApplicationContext(), this);
-} else {
- mAudioFocusHelper = null;
-}
-</pre>
-
-
-<h3 id="cleanup">Performing cleanup</h3>
-
-<p>As mentioned earlier, a {@link android.media.MediaPlayer} object can consume a significant
-amount of system resources, so you should keep it only for as long as you need and call
-{@link android.media.MediaPlayer#release release()} when you are done with it. It's important
-to call this cleanup method explicitly rather than rely on system garbage collection because
-it might take some time before the garbage collector reclaims the {@link android.media.MediaPlayer},
-as it's only sensitive to memory needs and not to shortage of other media-related resources.
-So, in the case when you're using a service, you should always override the
-{@link android.app.Service#onDestroy onDestroy()} method to make sure you are releasing
-the {@link android.media.MediaPlayer}:</p>
-
-<pre>
-public class MyService extends Service {
- MediaPlayer mMediaPlayer;
- // ...
-
- @Override
- public void onDestroy() {
- if (mMediaPlayer != null) mMediaPlayer.release();
- }
-}
-</pre>
-
-<p>You should always look for other opportunities to release your {@link android.media.MediaPlayer}
-as well, apart from releasing it when being shut down. For example, if you expect not
-to be able to play media for an extended period of time (after losing audio focus, for example),
-you should definitely release your existing {@link android.media.MediaPlayer} and create it again
-later. On the
-other hand, if you only expect to stop playback for a very short time, you should probably
-hold on to your {@link android.media.MediaPlayer} to avoid the overhead of creating and preparing it
-again.</p>
-
-
-
-<h2 id="noisyintent">Handling the AUDIO_BECOMING_NOISY Intent</h2>
-
-<p>Many well-written applications that play audio automatically stop playback when an event
-occurs that causes the audio to become noisy (ouput through external speakers). For instance,
-this might happen when a user is listening to music through headphones and accidentally
-disconnects the headphones from the device. However, this behavior does not happen automatically.
-If you don't implement this feature, audio plays out of the device's external speakers, which
-might not be what the user wants.</p>
-
-<p>You can ensure your app stops playing music in these situations by handling
-the {@link android.media.AudioManager#ACTION_AUDIO_BECOMING_NOISY} intent, for which you can register a receiver by
-adding the following to your manifest:</p>
-
-<pre>
-<receiver android:name=".MusicIntentReceiver">
- <intent-filter>
- <action android:name="android.media.AUDIO_BECOMING_NOISY" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>This registers the <code>MusicIntentReceiver</code> class as a broadcast receiver for that
-intent. You should then implement this class:</p>
-
-<pre>
-public class MusicIntentReceiver implements android.content.BroadcastReceiver {
- @Override
- public void onReceive(Context ctx, Intent intent) {
- if (intent.getAction().equals(
- android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
- // signal your service to stop playback
- // (via an Intent, for instance)
- }
- }
-}
-</pre>
-
-
-
-
-<h2 id="viacontentresolver">Retrieving Media from a Content Resolver</h2>
-
-<p>Another feature that may be useful in a media player application is the ability to
-retrieve music that the user has on the device. You can do that by querying the {@link
-android.content.ContentResolver} for external media:</p>
-
-<pre>
-ContentResolver contentResolver = getContentResolver();
-Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
-Cursor cursor = contentResolver.query(uri, null, null, null, null);
-if (cursor == null) {
- // query failed, handle error.
-} else if (!cursor.moveToFirst()) {
- // no media on the device
-} else {
- int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
- int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
- do {
- long thisId = cursor.getLong(idColumn);
- String thisTitle = cursor.getString(titleColumn);
- // ...process entry...
- } while (cursor.moveToNext());
-}
-</pre>
-
-<p>To use this with the {@link android.media.MediaPlayer}, you can do this:</p>
-
-<pre>
-long id = /* retrieve it from somewhere */;
-Uri contentUri = ContentUris.withAppendedId(
- android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
-
-mMediaPlayer = new MediaPlayer();
-mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
-mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
-
-// ...prepare and start...
-</pre>
-
-
-
-<h2 id="jetcontent">Playing JET content</h2>
-
-<p>The Android platform includes a JET engine that lets you add interactive playback of JET audio
-content in your applications. You can create JET content for interactive playback using the
-JetCreator authoring application that ships with the SDK. To play and manage JET content from your
-application, use the {@link android.media.JetPlayer JetPlayer} class.</p>
-
-<p>For a description of JET concepts and instructions on how to use the JetCreator authoring tool,
-see the <a href="{@docRoot}guide/topics/media/jet/jetcreator_manual.html">JetCreator User
-Manual</a>. The tool is available on Windows, OS X, and Linux platforms (Linux does not
-support auditioning of imported assets like with the Windows and OS X versions).
-</p>
-
-<p>Here's an example of how to set up JET playback from a <code>.jet</code> file stored on the SD card:</p>
-
-<pre>
-JetPlayer jetPlayer = JetPlayer.getJetPlayer();
-jetPlayer.loadJetFile("/sdcard/level1.jet");
-byte segmentId = 0;
-
-// queue segment 5, repeat once, use General MIDI, transpose by -1 octave
-jetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);
-// queue segment 2
-jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);
-
-jetPlayer.play();
-</pre>
-
-<p>The SDK includes an example application — JetBoy — that shows how to use {@link
-android.media.JetPlayer JetPlayer} to create an interactive music soundtrack in your game. It also
-illustrates how to use JET events to synchronize music and game logic. The application is located at
-<code><sdk>/platforms/android-1.5/samples/JetBoy</code>.</p>
-
-
-<h2 id="audiocapture">Performing Audio Capture</h2>
-
-<p>Audio capture from the device is a bit more complicated than audio and video playback, but still fairly simple:</p>
-<ol>
- <li>Create a new instance of {@link android.media.MediaRecorder android.media.MediaRecorder}.</li>
- <li>Set the audio source using
- {@link android.media.MediaRecorder#setAudioSource MediaRecorder.setAudioSource()}. You will probably want to use
- <code>MediaRecorder.AudioSource.MIC</code>.</li>
- <li>Set output file format using
- {@link android.media.MediaRecorder#setOutputFormat MediaRecorder.setOutputFormat()}.
- </li>
- <li>Set output file name using
- {@link android.media.MediaRecorder#setOutputFile MediaRecorder.setOutputFile()}.
- </li>
- <li>Set the audio encoder using
- {@link android.media.MediaRecorder#setAudioEncoder MediaRecorder.setAudioEncoder()}.
- </li>
- <li>Call {@link android.media.MediaRecorder#prepare MediaRecorder.prepare()}
- on the MediaRecorder instance.</li>
- <li>To start audio capture, call
- {@link android.media.MediaRecorder#start MediaRecorder.start()}. </li>
- <li>To stop audio capture, call {@link android.media.MediaRecorder#stop MediaRecorder.stop()}.
- <li>When you are done with the MediaRecorder instance, call
-{@link android.media.MediaRecorder#release MediaRecorder.release()} on it. Calling
-{@link android.media.MediaRecorder#release MediaRecorder.release()} is always recommended to
-free the resource immediately.</li>
-</ol>
-
-<h3>Example: Record audio and play the recorded audio</h3>
-<p>The example class below illustrates how to set up, start and stop audio capture, and to play the recorded audio file.</p>
-<pre>
-/*
- * The application needs to have the permission to write to external storage
- * if the output file is written to the external storage, and also the
- * permission to record audio. These permissions must be set in the
- * application's AndroidManifest.xml file, with something like:
- *
- * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- * <uses-permission android:name="android.permission.RECORD_AUDIO" />
- *
- */
-package com.android.audiorecordtest;
-
-import android.app.Activity;
-import android.widget.LinearLayout;
-import android.os.Bundle;
-import android.os.Environment;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.content.Context;
-import android.util.Log;
-import android.media.MediaRecorder;
-import android.media.MediaPlayer;
-
-import java.io.IOException;
-
-
-public class AudioRecordTest extends Activity
-{
- private static final String LOG_TAG = "AudioRecordTest";
- private static String mFileName = null;
-
- private RecordButton mRecordButton = null;
- private MediaRecorder mRecorder = null;
-
- private PlayButton mPlayButton = null;
- private MediaPlayer mPlayer = null;
-
- private void onRecord(boolean start) {
- if (start) {
- startRecording();
- } else {
- stopRecording();
- }
- }
-
- private void onPlay(boolean start) {
- if (start) {
- startPlaying();
- } else {
- stopPlaying();
- }
- }
-
- private void startPlaying() {
- mPlayer = new MediaPlayer();
- try {
- mPlayer.setDataSource(mFileName);
- mPlayer.prepare();
- mPlayer.start();
- } catch (IOException e) {
- Log.e(LOG_TAG, "prepare() failed");
- }
- }
-
- private void stopPlaying() {
- mPlayer.release();
- mPlayer = null;
- }
-
- private void startRecording() {
- mRecorder = new MediaRecorder();
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(mFileName);
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
-
- try {
- mRecorder.prepare();
- } catch (IOException e) {
- Log.e(LOG_TAG, "prepare() failed");
- }
-
- mRecorder.start();
- }
-
- private void stopRecording() {
- mRecorder.stop();
- mRecorder.release();
- mRecorder = null;
- }
-
- class RecordButton extends Button {
- boolean mStartRecording = true;
-
- OnClickListener clicker = new OnClickListener() {
- public void onClick(View v) {
- onRecord(mStartRecording);
- if (mStartRecording) {
- setText("Stop recording");
- } else {
- setText("Start recording");
- }
- mStartRecording = !mStartRecording;
- }
- };
-
- public RecordButton(Context ctx) {
- super(ctx);
- setText("Start recording");
- setOnClickListener(clicker);
- }
- }
-
- class PlayButton extends Button {
- boolean mStartPlaying = true;
-
- OnClickListener clicker = new OnClickListener() {
- public void onClick(View v) {
- onPlay(mStartPlaying);
- if (mStartPlaying) {
- setText("Stop playing");
- } else {
- setText("Start playing");
- }
- mStartPlaying = !mStartPlaying;
- }
- };
-
- public PlayButton(Context ctx) {
- super(ctx);
- setText("Start playing");
- setOnClickListener(clicker);
- }
- }
-
- public AudioRecordTest() {
- mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
- mFileName += "/audiorecordtest.3gp";
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- LinearLayout ll = new LinearLayout(this);
- mRecordButton = new RecordButton(this);
- ll.addView(mRecordButton,
- new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- 0));
- mPlayButton = new PlayButton(this);
- ll.addView(mPlayButton,
- new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- 0));
- setContentView(ll);
- }
-
- @Override
- public void onPause() {
- super.onPause();
- if (mRecorder != null) {
- mRecorder.release();
- mRecorder = null;
- }
-
- if (mPlayer != null) {
- mPlayer.release();
- mPlayer = null;
- }
- }
-}
-</pre>
-
-
-
+ <dt><strong><a href="{@docRoot}guide/topics/media/audio-capture.html">Audio
+Capture</a></strong></dt>
+ <dd>How to record sound in your application.</dd>
+</dl>
\ No newline at end of file
diff --git a/docs/html/guide/topics/media/jetplayer.jd b/docs/html/guide/topics/media/jetplayer.jd
new file mode 100644
index 0000000..f3d55f9
--- /dev/null
+++ b/docs/html/guide/topics/media/jetplayer.jd
@@ -0,0 +1,70 @@
+page.title=JetPlayer
+parent.title=Multimedia and Camera
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#jetcontent">Playing JET content</a>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+<li>{@link android.media.JetPlayer}</li>
+</ol>
+
+<h2>Related Samples</h2>
+<ol>
+<li><a href="{@docRoot}resources/samples/JetBoy/index.html">JetBoy</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+<li><a href="{@docRoot}guide/topics/media/jet/jetcreator_manual.html">JetCreator User
+Manual</a></li>
+<li><a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media Formats</a></li>
+<li><a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a></li>
+<li><a href="{@docRoot}guide/topics/media/mediaplayer.html">MediaPlayer</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>The Android platform includes a JET engine that lets you add interactive playback of JET audio
+content in your applications. You can create JET content for interactive playback using the
+JetCreator authoring application that ships with the SDK. To play and manage JET content from your
+application, use the {@link android.media.JetPlayer JetPlayer} class.</p>
+
+
+<h2 id="jetcontent">Playing JET content</h2>
+
+<p>This section shows you how to write, set up and play JET content. For a description of JET
+concepts and instructions on how to use the JetCreator authoring tool, see the <a
+href="{@docRoot}guide/topics/media/jet/jetcreator_manual.html">JetCreator User
+Manual</a>. The tool is available on Windows, OS X, and Linux platforms (Linux does not
+support auditioning of imported assets like with the Windows and OS X versions).
+</p>
+
+<p>Here's an example of how to set up JET playback from a <code>.jet</code> file stored on the SD
+card:</p>
+
+<pre>
+JetPlayer jetPlayer = JetPlayer.getJetPlayer();
+jetPlayer.loadJetFile("/sdcard/level1.jet");
+byte segmentId = 0;
+
+// queue segment 5, repeat once, use General MIDI, transpose by -1 octave
+jetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);
+// queue segment 2
+jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);
+
+jetPlayer.play();
+</pre>
+
+<a>The SDK includes an example application — JetBoy — that shows how to use {@link
+android.media.JetPlayer JetPlayer} to create an interactive music soundtrack in your game. It also
+illustrates how to use JET events to synchronize music and game logic. The application is located at
+<a href="{@docRoot}resources/samples/JetBoy/index.html">JetBoy</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/media/mediaplayer.jd b/docs/html/guide/topics/media/mediaplayer.jd
new file mode 100644
index 0000000..b3ca7dd
--- /dev/null
+++ b/docs/html/guide/topics/media/mediaplayer.jd
@@ -0,0 +1,747 @@
+page.title=Media Playback
+parent.title=Multimedia and Camera
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#basics">The Basics</a>
+<li><a href="#manifest">Manifest Declarations</a></li>
+<li><a href="#mediaplayer">Using MediaPlayer</a>
+ <ol>
+ <li><a href='#preparingasync'>Asynchronous Preparation</a></li>
+ <li><a href='#managestate'>Managing State</a></li>
+ <li><a href='#releaseplayer'>Releasing the MediaPlayer</a></li>
+ </ol>
+</li>
+<li><a href="#mpandservices">Using a Service with MediaPlayer</a>
+ <ol>
+ <li><a href="#asyncprepare">Running asynchronously</a></li>
+ <li><a href="#asyncerror">Handling asynchronous errors</a></li>
+ <li><a href="#wakelocks">Using wake locks</a></li>
+ <li><a href="#foregroundserv">Running as a foreground service</a></li>
+ <li><a href="#audiofocus">Handling audio focus</a></li>
+ <li><a href="#cleanup">Performing cleanup</a></li>
+ </ol>
+</li>
+<li><a href="#noisyintent">Handling the AUDIO_BECOMING_NOISY Intent</a>
+<li><a href="#viacontentresolver">Retrieving Media from a Content Resolver</a>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+<li>{@link android.media.MediaPlayer}</li>
+<li>{@link android.media.AudioManager}</li>
+<li>{@link android.media.SoundPool}</li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+<li><a href="{@docRoot}guide/topics/media/jetplayer.html">JetPlayer</a></li>
+<li><a href="{@docRoot}guide/topics/media/audio-capture.html">Audio Capture</a></li>
+<li><a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media Formats</a></li>
+<li><a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>The Android multimedia framework includes support for playing variety of common media types, so
+that you can easily integrate audio, video and images into your applications. You can play audio or
+video from media files stored in your application's resources (raw resources), from standalone files
+in the filesystem, or from a data stream arriving over a network connection, all using {@link
+android.media.MediaPlayer} APIs.</p>
+
+<p>This document shows you how to write a media-playing application that interacts with the user and
+the system in order to obtain good performance and a pleasant user experience.</p>
+
+<p class="note"><strong>Note:</strong> You can play back the audio data only to the standard output
+device. Currently, that is the mobile device speaker or a Bluetooth headset. You cannot play sound
+files in the conversation audio during a call.</p>
+
+<h2 id="basics">The Basics</h2>
+<p>The following classes are used to play sound and video in the Android framework:</p>
+
+<dl>
+ <dt>{@link android.media.MediaPlayer}</dt>
+ <dd>This class is the primary API for playing sound and video.</dd>
+ <dt>{@link android.media.AudioManager}</dt>
+ <dd>This class manages audio sources and audio output on a device.</dd>
+</dl>
+
+<h2 id="manifest">Manifest Declarations</h2>
+<p>Before starting development on your application using MediaPlayer, make sure your manifest has
+the appropriate declarations to allow use of related features.</p>
+
+<ul>
+ <li><strong>Internet Permission</strong> - If you are using MediaPlayer to stream network-based
+content, your application must request network access.
+<pre>
+<uses-permission android:name="android.permission.INTERNET" />
+</pre>
+ </li>
+ <li><strong>Wake Lock Permission</strong> - If your player application needs to keep the screen
+from dimming or the processor from sleeping, or uses the {@link
+android.media.MediaPlayer#setScreenOnWhilePlaying(boolean) MediaPlayer.setScreenOnWhilePlaying()} or
+{@link android.media.MediaPlayer#setWakeMode(android.content.Context, int)
+MediaPlayer.setWakeMode()} methods, you must request this permission.
+<pre>
+<uses-permission android:name="android.permission.WAKE_LOCK" />
+</pre>
+ </li>
+</ul>
+
+<h2 id="mediaplayer">Using MediaPlayer</h2>
+<p>One of the most important components of the media framework is the
+{@link android.media.MediaPlayer MediaPlayer}
+class. An object of this class can fetch, decode, and play both audio and video
+with minimal setup. It supports several different media sources such as:
+<ul>
+ <li>Local resources</li>
+ <li>Internal URIs, such as one you might obtain from a Content Resolver</li>
+ <li>External URLs (streaming)</li>
+</ul>
+</p>
+
+<p>For a list of media formats that Android supports,
+see the <a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media
+Formats</a> document. </p>
+
+<p>Here is an example
+of how to play audio that's available as a local raw resource (saved in your application's
+{@code res/raw/} directory):</p>
+
+<pre>MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
+mediaPlayer.start(); // no need to call prepare(); create() does that for you
+</pre>
+
+<p>In this case, a "raw" resource is a file that the system does not
+try to parse in any particular way. However, the content of this resource should not
+be raw audio. It should be a properly encoded and formatted media file in one
+of the supported formats.</p>
+
+<p>And here is how you might play from a URI available locally in the system
+(that you obtained through a Content Resolver, for instance):</p>
+
+<pre>Uri myUri = ....; // initialize Uri here
+MediaPlayer mediaPlayer = new MediaPlayer();
+mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+mediaPlayer.setDataSource(getApplicationContext(), myUri);
+mediaPlayer.prepare();
+mediaPlayer.start();</pre>
+
+<p>Playing from a remote URL via HTTP streaming looks like this:</p>
+
+<pre>String url = "http://........"; // your URL here
+MediaPlayer mediaPlayer = new MediaPlayer();
+mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+mediaPlayer.setDataSource(url);
+mediaPlayer.prepare(); // might take long! (for buffering, etc)
+mediaPlayer.start();</pre>
+
+<p class="note"><strong>Note:</strong>
+If you're passing a URL to stream an online media file, the file must be capable of
+progressive download.</p>
+
+<p class="caution"><strong>Caution:</strong> You must either catch or pass
+{@link java.lang.IllegalArgumentException} and {@link java.io.IOException} when using
+{@link android.media.MediaPlayer#setDataSource setDataSource()}, because
+the file you are referencing might not exist.</p>
+
+<h3 id='preparingasync'>Asynchronous Preparation</h3>
+
+<p>Using {@link android.media.MediaPlayer MediaPlayer} can be straightforward in
+principle. However, it's important to keep in mind that a few more things are
+necessary to integrate it correctly with a typical Android application. For
+example, the call to {@link android.media.MediaPlayer#prepare prepare()} can
+take a long time to execute, because
+it might involve fetching and decoding media data. So, as is the case with any
+method that may take long to execute, you should <strong>never call it from your
+application's UI thread</strong>. Doing that will cause the UI to hang until the method returns,
+which is a very bad user experience and can cause an ANR (Application Not Responding) error. Even if
+you expect your resource to load quickly, remember that anything that takes more than a tenth
+of a second to respond in the UI will cause a noticeable pause and will give
+the user the impression that your application is slow.</p>
+
+<p>To avoid hanging your UI thread, spawn another thread to
+prepare the {@link android.media.MediaPlayer} and notify the main thread when done. However, while
+you could write the threading logic
+yourself, this pattern is so common when using {@link android.media.MediaPlayer} that the framework
+supplies a convenient way to accomplish this task by using the
+{@link android.media.MediaPlayer#prepareAsync prepareAsync()} method. This method
+starts preparing the media in the background and returns immediately. When the media
+is done preparing, the {@link android.media.MediaPlayer.OnPreparedListener#onPrepared onPrepared()}
+method of the {@link android.media.MediaPlayer.OnPreparedListener
+MediaPlayer.OnPreparedListener}, configured through
+{@link android.media.MediaPlayer#setOnPreparedListener setOnPreparedListener()} is called.</p>
+
+<h3 id='managestate'>Managing State</h3>
+
+<p>Another aspect of a {@link android.media.MediaPlayer} that you should keep in mind is
+that it's state-based. That is, the {@link android.media.MediaPlayer} has an internal state
+that you must always be aware of when writing your code, because certain operations
+are only valid when then player is in specific states. If you perform an operation while in the
+wrong state, the system may throw an exception or cause other undesireable behaviors.</p>
+
+<p>The documentation in the
+{@link android.media.MediaPlayer MediaPlayer} class shows a complete state diagram,
+that clarifies which methods move the {@link android.media.MediaPlayer} from one state to another.
+For example, when you create a new {@link android.media.MediaPlayer}, it is in the <em>Idle</em>
+state. At that point, you should initialize it by calling
+{@link android.media.MediaPlayer#setDataSource setDataSource()}, bringing it
+to the <em>Initialized</em> state. After that, you have to prepare it using either the
+{@link android.media.MediaPlayer#prepare prepare()} or
+{@link android.media.MediaPlayer#prepareAsync prepareAsync()} method. When
+the {@link android.media.MediaPlayer} is done preparing, it will then enter the <em>Prepared</em>
+state, which means you can call {@link android.media.MediaPlayer#start start()}
+to make it play the media. At that point, as the diagram illustrates,
+you can move between the <em>Started</em>, <em>Paused</em> and <em>PlaybackCompleted</em> states by
+calling such methods as
+{@link android.media.MediaPlayer#start start()},
+{@link android.media.MediaPlayer#pause pause()}, and
+{@link android.media.MediaPlayer#seekTo seekTo()},
+amongst others. When you
+call {@link android.media.MediaPlayer#stop stop()}, however, notice that you
+cannot call {@link android.media.MediaPlayer#start start()} again until you
+prepare the {@link android.media.MediaPlayer} again.</p>
+
+<p>Always keep <a href='{@docRoot}images/mediaplayer_state_diagram.gif'>the state diagram</a>
+in mind when writing code that interacts with a
+{@link android.media.MediaPlayer} object, because calling its methods from the wrong state is a
+common cause of bugs.</p>
+
+<h3 id='releaseplayer'>Releasing the MediaPlayer</h3>
+
+<p>A {@link android.media.MediaPlayer MediaPlayer} can consume valuable
+system resources.
+Therefore, you should always take extra precautions to make sure you are not
+hanging on to a {@link android.media.MediaPlayer} instance longer than necessary. When you
+are done with it, you should always call
+{@link android.media.MediaPlayer#release release()} to make sure any
+system resources allocated to it are properly released. For example, if you are
+using a {@link android.media.MediaPlayer} and your activity receives a call to {@link
+android.app.Activity#onStop onStop()}, you must release the {@link android.media.MediaPlayer},
+because it
+makes little sense to hold on to it while your activity is not interacting with
+the user (unless you are playing media in the background, which is discussed in the next section).
+When your activity is resumed or restarted, of course, you need to
+create a new {@link android.media.MediaPlayer} and prepare it again before resuming playback.</p>
+
+<p>Here's how you should release and then nullify your {@link android.media.MediaPlayer}:</p>
+<pre>
+mediaPlayer.release();
+mediaPlayer = null;
+</pre>
+
+<p>As an example, consider the problems that could happen if you
+forgot to release the {@link android.media.MediaPlayer} when your activity is stopped, but create a
+new one when the activity starts again. As you may know, when the user changes the
+screen orientation (or changes the device configuration in another way),
+the system handles that by restarting the activity (by default), so you might quickly
+consume all of the system resources as the user
+rotates the device back and forth between portrait and landscape, because at each
+orientation change, you create a new {@link android.media.MediaPlayer} that you never
+release. (For more information about runtime restarts, see <a
+href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime Changes</a>.)</p>
+
+<p>You may be wondering what happens if you want to continue playing
+"background media" even when the user leaves your activity, much in the same
+way that the built-in Music application behaves. In this case, what you need is
+a {@link android.media.MediaPlayer MediaPlayer} controlled by a {@link android.app.Service}, as
+discussed in <a href="mpandservices">Using a Service with MediaPlayer</a>.</p>
+
+<h2 id="mpandservices">Using a Service with MediaPlayer</h2>
+
+<p>If you want your media to play in the background even when your application
+is not onscreen—that is, you want it to continue playing while the user is
+interacting with other applications—then you must start a
+{@link android.app.Service Service} and control the
+{@link android.media.MediaPlayer MediaPlayer} instance from there.
+You should be careful about this setup, because the user and the system have expectations
+about how an application running a background service should interact with the rest of the
+system. If your application does not fulfil those expectations, the user may
+have a bad experience. This section describes the main issues that you should be
+aware of and offers suggestions about how to approach them.</p>
+
+
+<h3 id="asyncprepare">Running asynchronously</h3>
+
+<p>First of all, like an {@link android.app.Activity Activity}, all work in a
+{@link android.app.Service Service} is done in a single thread by
+default—in fact, if you're running an activity and a service from the same application, they
+use the same thread (the "main thread") by default. Therefore, services need to
+process incoming intents quickly
+and never perform lengthy computations when responding to them. If any heavy
+work or blocking calls are expected, you must do those tasks asynchronously: either from
+another thread you implement yourself, or using the framework's many facilities
+for asynchronous processing.</p>
+
+<p>For instance, when using a {@link android.media.MediaPlayer} from your main thread,
+you should call {@link android.media.MediaPlayer#prepareAsync prepareAsync()} rather than
+{@link android.media.MediaPlayer#prepare prepare()}, and implement
+a {@link android.media.MediaPlayer.OnPreparedListener MediaPlayer.OnPreparedListener}
+in order to be notified when the preparation is complete and you can start playing.
+For example:</p>
+
+<pre>
+public class MyService extends Service implements MediaPlayer.OnPreparedListener {
+ private static final ACTION_PLAY = "com.example.action.PLAY";
+ MediaPlayer mMediaPlayer = null;
+
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ ...
+ if (intent.getAction().equals(ACTION_PLAY)) {
+ mMediaPlayer = ... // initialize it here
+ mMediaPlayer.setOnPreparedListener(this);
+ mMediaPlayer.prepareAsync(); // prepare async to not block main thread
+ }
+ }
+
+ /** Called when MediaPlayer is ready */
+ public void onPrepared(MediaPlayer player) {
+ player.start();
+ }
+}
+</pre>
+
+
+<h3 id="asyncerror">Handling asynchronous errors</h3>
+
+<p>On synchronous operations, errors would normally
+be signaled with an exception or an error code, but whenever you use asynchronous
+resources, you should make sure your application is notified
+of errors appropriately. In the case of a {@link android.media.MediaPlayer MediaPlayer},
+you can accomplish this by implementing a
+{@link android.media.MediaPlayer.OnErrorListener MediaPlayer.OnErrorListener} and
+setting it in your {@link android.media.MediaPlayer} instance:</p>
+
+<pre>
+public class MyService extends Service implements MediaPlayer.OnErrorListener {
+ MediaPlayer mMediaPlayer;
+
+ public void initMediaPlayer() {
+ // ...initialize the MediaPlayer here...
+
+ mMediaPlayer.setOnErrorListener(this);
+ }
+
+ @Override
+ public boolean onError(MediaPlayer mp, int what, int extra) {
+ // ... react appropriately ...
+ // The MediaPlayer has moved to the Error state, must be reset!
+ }
+}
+</pre>
+
+<p>It's important to remember that when an error occurs, the {@link android.media.MediaPlayer}
+moves to the <em>Error</em> state (see the documentation for the
+{@link android.media.MediaPlayer MediaPlayer} class for the full state diagram)
+and you must reset it before you can use it again.
+
+
+<h3 id="wakelocks">Using wake locks</h3>
+
+<p>When designing applications that play media
+in the background, the device may go to sleep
+while your service is running. Because the Android system tries to conserve
+battery while the device is sleeping, the system tries to shut off any
+of the phone's features that are
+not necessary, including the CPU and the WiFi hardware.
+However, if your service is playing or streaming music, you want to prevent
+the system from interfering with your playback.</p>
+
+<p>In order to ensure that your service continues to run under
+those conditions, you have to use "wake locks." A wake lock is a way to signal to
+the system that your application is using some feature that should
+stay available even if the phone is idle.</p>
+
+<p class="caution"><strong>Notice:</strong> You should always use wake locks sparingly and hold them
+only for as long as truly necessary, because they significantly reduce the battery life of the
+device.</p>
+
+<p>To ensure that the CPU continues running while your {@link android.media.MediaPlayer} is
+playing, call the {@link android.media.MediaPlayer#setWakeMode
+setWakeMode()} method when initializing your {@link android.media.MediaPlayer}. Once you do,
+the {@link android.media.MediaPlayer} holds the specified lock while playing and releases the lock
+when paused or stopped:</p>
+
+<pre>
+mMediaPlayer = new MediaPlayer();
+// ... other initialization here ...
+mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
+</pre>
+
+<p>However, the wake lock acquired in this example guarantees only that the CPU remains awake. If
+you are streaming media over the
+network and you are using Wi-Fi, you probably want to hold a
+{@link android.net.wifi.WifiManager.WifiLock WifiLock} as
+well, which you must acquire and release manually. So, when you start preparing the
+{@link android.media.MediaPlayer} with the remote URL, you should create and acquire the Wi-Fi lock.
+For example:</p>
+
+<pre>
+WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))
+ .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");
+
+wifiLock.acquire();
+</pre>
+
+<p>When you pause or stop your media, or when you no longer need the
+network, you should release the lock:</p>
+
+<pre>
+wifiLock.release();
+</pre>
+
+
+<h3 id="foregroundserv">Running as a foreground service</h3>
+
+<p>Services are often used for performing background tasks, such as fetching emails,
+synchronizing data, downloading content, amongst other possibilities. In these
+cases, the user is not actively aware of the service's execution, and probably
+wouldn't even notice if some of these services were interrupted and later restarted.</p>
+
+<p>But consider the case of a service that is playing music. Clearly this is a service that the user
+is actively aware of and the experience would be severely affected by any interruptions.
+Additionally, it's a service that the user will likely wish to interact with during its execution.
+In this case, the service should run as a "foreground service." A
+foreground service holds a higher level of importance within the system—the system will
+almost never kill the service, because it is of immediate importance to the user. When running
+in the foreground, the service also must provide a status bar notification to ensure that users are
+aware of the running service and allow them to open an activity that can interact with the
+service.</p>
+
+<p>In order to turn your service into a foreground service, you must create a
+{@link android.app.Notification Notification} for the status bar and call
+{@link android.app.Service#startForeground startForeground()} from the {@link
+android.app.Service}. For example:</p>
+
+<pre>String songName;
+// assign the song name to songName
+PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0,
+ new Intent(getApplicationContext(), MainActivity.class),
+ PendingIntent.FLAG_UPDATE_CURRENT);
+Notification notification = new Notification();
+notification.tickerText = text;
+notification.icon = R.drawable.play0;
+notification.flags |= Notification.FLAG_ONGOING_EVENT;
+notification.setLatestEventInfo(getApplicationContext(), "MusicPlayerSample",
+ "Playing: " + songName, pi);
+startForeground(NOTIFICATION_ID, notification);
+</pre>
+
+<p>While your service is running in the foreground, the notification you
+configured is visible in the notification area of the device. If the user
+selects the notification, the system invokes the {@link android.app.PendingIntent} you supplied. In
+the example above, it opens an activity ({@code MainActivity}).</p>
+
+<p>Figure 1 shows how your notification appears to the user:</p>
+
+<img src='images/notification1.png' />
+
+<img src='images/notification2.png' />
+<p class="img-caption"><strong>Figure 1.</strong> Screenshots of a foreground service's
+notification, showing the notification icon in the status bar (left) and the expanded view
+(right).</p>
+
+<p>You should only hold on to the "foreground service" status while your
+service is actually performing something the user is actively aware of. Once
+that is no longer true, you should release it by calling
+{@link android.app.Service#stopForeground stopForeground()}:</p>
+
+<pre>
+stopForeground(true);
+</pre>
+
+<p>For more information, see the documentation about <a
+href="{@docRoot}guide/topics/fundamentals/services.html#Foreground">Services</a> and
+<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>.</p>
+
+
+<h3 id="audiofocus">Handling audio focus</h3>
+
+<p>Even though only one activity can run at any given time, Android is a
+multi-tasking environment. This poses a particular challenge to applications
+that use audio, because there is only one audio output and there may be several
+media services competing for its use. Before Android 2.2, there was no built-in
+mechanism to address this issue, which could in some cases lead to a bad user
+experience. For example, when a user is listening to
+music and another application needs to notify the user of something very important,
+the user might not hear the notification tone due to the loud music. Starting with
+Android 2.2, the platform offers a way for applications to negotiate their
+use of the device's audio output. This mechanism is called Audio Focus.</p>
+
+<p>When your application needs to output audio such as music or a notification,
+you should always request audio focus. Once it has focus, it can use the sound output freely, but it
+should
+always listen for focus changes. If it is notified that it has lost the audio
+focus, it should immediately either kill the audio or lower it to a quiet level
+(known as "ducking"—there is a flag that indicates which one is appropriate) and only resume
+loud playback after it receives focus again.</p>
+
+<p>Audio Focus is cooperative in nature. That is, applications are expected
+(and highly encouraged) to comply with the audio focus guidelines, but the
+rules are not enforced by the system. If an application wants to play loud
+music even after losing audio focus, nothing in the system will prevent that.
+However, the user is more likely to have a bad experience and will be more
+likely to uninstall the misbehaving application.</p>
+
+<p>To request audio focus, you must call
+{@link android.media.AudioManager#requestAudioFocus requestAudioFocus()} from the {@link
+android.media.AudioManager}, as the example below demonstrates:</p>
+
+<pre>
+AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
+ AudioManager.AUDIOFOCUS_GAIN);
+
+if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+ // could not get audio focus.
+}
+</pre>
+
+<p>The first parameter to {@link android.media.AudioManager#requestAudioFocus requestAudioFocus()}
+is an {@link android.media.AudioManager.OnAudioFocusChangeListener
+AudioManager.OnAudioFocusChangeListener},
+whose {@link android.media.AudioManager.OnAudioFocusChangeListener#onAudioFocusChange
+onAudioFocusChange()} method is called whenever there is a change in audio focus. Therefore, you
+should also implement this interface on your service and activities. For example:</p>
+
+<pre>
+class MyService extends Service
+ implements AudioManager.OnAudioFocusChangeListener {
+ // ....
+ public void onAudioFocusChange(int focusChange) {
+ // Do something based on focus change...
+ }
+}
+</pre>
+
+<p>The <code>focusChange</code> parameter tells you how the audio focus has changed, and
+can be one of the following values (they are all constants defined in
+{@link android.media.AudioManager AudioManager}):</p>
+
+<ul>
+<li>{@link android.media.AudioManager#AUDIOFOCUS_GAIN}: You have gained the audio focus.</li>
+
+<li>{@link android.media.AudioManager#AUDIOFOCUS_LOSS}: You have lost the audio focus for a
+presumably long time.
+You must stop all audio playback. Because you should expect not to have focus back
+for a long time, this would be a good place to clean up your resources as much
+as possible. For example, you should release the {@link android.media.MediaPlayer}.</li>
+
+<li>{@link android.media.AudioManager#AUDIOFOCUS_LOSS_TRANSIENT}: You have
+temporarily lost audio focus, but should receive it back shortly. You must stop
+all audio playback, but you can keep your resources because you will probably get
+focus back shortly.</li>
+
+<li>{@link android.media.AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK}: You have temporarily
+lost audio focus,
+but you are allowed to continue to play audio quietly (at a low volume) instead
+of killing audio completely.</li>
+</ul>
+
+<p>Here is an example implementation:</p>
+
+<pre>
+public void onAudioFocusChange(int focusChange) {
+ switch (focusChange) {
+ case AudioManager.AUDIOFOCUS_GAIN:
+ // resume playback
+ if (mMediaPlayer == null) initMediaPlayer();
+ else if (!mMediaPlayer.isPlaying()) mMediaPlayer.start();
+ mMediaPlayer.setVolume(1.0f, 1.0f);
+ break;
+
+ case AudioManager.AUDIOFOCUS_LOSS:
+ // Lost focus for an unbounded amount of time: stop playback and release media player
+ if (mMediaPlayer.isPlaying()) mMediaPlayer.stop();
+ mMediaPlayer.release();
+ mMediaPlayer = null;
+ break;
+
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
+ // Lost focus for a short time, but we have to stop
+ // playback. We don't release the media player because playback
+ // is likely to resume
+ if (mMediaPlayer.isPlaying()) mMediaPlayer.pause();
+ break;
+
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
+ // Lost focus for a short time, but it's ok to keep playing
+ // at an attenuated level
+ if (mMediaPlayer.isPlaying()) mMediaPlayer.setVolume(0.1f, 0.1f);
+ break;
+ }
+}
+</pre>
+
+<p>Keep in mind that the audio focus APIs are available only with API level 8 (Android 2.2)
+and above, so if you want to support previous
+versions of Android, you should adopt a backward compatibility strategy that
+allows you to use this feature if available, and fall back seamlessly if not.</p>
+
+<p>You can achieve backward compatibility either by calling the audio focus methods by reflection
+or by implementing all the audio focus features in a separate class (say,
+<code>AudioFocusHelper</code>). Here is an example of such a class:</p>
+
+<pre>
+public class AudioFocusHelper implements AudioManager.OnAudioFocusChangeListener {
+ AudioManager mAudioManager;
+
+ // other fields here, you'll probably hold a reference to an interface
+ // that you can use to communicate the focus changes to your Service
+
+ public AudioFocusHelper(Context ctx, /* other arguments here */) {
+ mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ // ...
+ }
+
+ public boolean requestFocus() {
+ return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==
+ mAudioManager.requestAudioFocus(mContext, AudioManager.STREAM_MUSIC,
+ AudioManager.AUDIOFOCUS_GAIN);
+ }
+
+ public boolean abandonFocus() {
+ return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==
+ mAudioManager.abandonAudioFocus(this);
+ }
+
+ @Override
+ public void onAudioFocusChange(int focusChange) {
+ // let your service know about the focus change
+ }
+}
+</pre>
+
+
+<p>You can create an instance of <code>AudioFocusHelper</code> class only if you detect that
+the system is running API level 8 or above. For example:</p>
+
+<pre>
+if (android.os.Build.VERSION.SDK_INT >= 8) {
+ mAudioFocusHelper = new AudioFocusHelper(getApplicationContext(), this);
+} else {
+ mAudioFocusHelper = null;
+}
+</pre>
+
+
+<h3 id="cleanup">Performing cleanup</h3>
+
+<p>As mentioned earlier, a {@link android.media.MediaPlayer} object can consume a significant
+amount of system resources, so you should keep it only for as long as you need and call
+{@link android.media.MediaPlayer#release release()} when you are done with it. It's important
+to call this cleanup method explicitly rather than rely on system garbage collection because
+it might take some time before the garbage collector reclaims the {@link android.media.MediaPlayer},
+as it's only sensitive to memory needs and not to shortage of other media-related resources.
+So, in the case when you're using a service, you should always override the
+{@link android.app.Service#onDestroy onDestroy()} method to make sure you are releasing
+the {@link android.media.MediaPlayer}:</p>
+
+<pre>
+public class MyService extends Service {
+ MediaPlayer mMediaPlayer;
+ // ...
+
+ @Override
+ public void onDestroy() {
+ if (mMediaPlayer != null) mMediaPlayer.release();
+ }
+}
+</pre>
+
+<p>You should always look for other opportunities to release your {@link android.media.MediaPlayer}
+as well, apart from releasing it when being shut down. For example, if you expect not
+to be able to play media for an extended period of time (after losing audio focus, for example),
+you should definitely release your existing {@link android.media.MediaPlayer} and create it again
+later. On the
+other hand, if you only expect to stop playback for a very short time, you should probably
+hold on to your {@link android.media.MediaPlayer} to avoid the overhead of creating and preparing it
+again.</p>
+
+
+
+<h2 id="noisyintent">Handling the AUDIO_BECOMING_NOISY Intent</h2>
+
+<p>Many well-written applications that play audio automatically stop playback when an event
+occurs that causes the audio to become noisy (ouput through external speakers). For instance,
+this might happen when a user is listening to music through headphones and accidentally
+disconnects the headphones from the device. However, this behavior does not happen automatically.
+If you don't implement this feature, audio plays out of the device's external speakers, which
+might not be what the user wants.</p>
+
+<p>You can ensure your app stops playing music in these situations by handling
+the {@link android.media.AudioManager#ACTION_AUDIO_BECOMING_NOISY} intent, for which you can
+register a receiver by
+adding the following to your manifest:</p>
+
+<pre>
+<receiver android:name=".MusicIntentReceiver">
+ <intent-filter>
+ <action android:name="android.media.AUDIO_BECOMING_NOISY" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>This registers the <code>MusicIntentReceiver</code> class as a broadcast receiver for that
+intent. You should then implement this class:</p>
+
+<pre>
+public class MusicIntentReceiver implements android.content.BroadcastReceiver {
+ @Override
+ public void onReceive(Context ctx, Intent intent) {
+ if (intent.getAction().equals(
+ android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
+ // signal your service to stop playback
+ // (via an Intent, for instance)
+ }
+ }
+}
+</pre>
+
+
+
+
+<h2 id="viacontentresolver">Retrieving Media from a Content Resolver</h2>
+
+<p>Another feature that may be useful in a media player application is the ability to
+retrieve music that the user has on the device. You can do that by querying the {@link
+android.content.ContentResolver} for external media:</p>
+
+<pre>
+ContentResolver contentResolver = getContentResolver();
+Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+Cursor cursor = contentResolver.query(uri, null, null, null, null);
+if (cursor == null) {
+ // query failed, handle error.
+} else if (!cursor.moveToFirst()) {
+ // no media on the device
+} else {
+ int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
+ int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
+ do {
+ long thisId = cursor.getLong(idColumn);
+ String thisTitle = cursor.getString(titleColumn);
+ // ...process entry...
+ } while (cursor.moveToNext());
+}
+</pre>
+
+<p>To use this with the {@link android.media.MediaPlayer}, you can do this:</p>
+
+<pre>
+long id = /* retrieve it from somewhere */;
+Uri contentUri = ContentUris.withAppendedId(
+ android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
+
+mMediaPlayer = new MediaPlayer();
+mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
+
+// ...prepare and start...
+</pre>
\ No newline at end of file
diff --git a/docs/html/guide/topics/resources/drawable-resource.jd b/docs/html/guide/topics/resources/drawable-resource.jd
index 912b6fd..ed9f990 100644
--- a/docs/html/guide/topics/resources/drawable-resource.jd
+++ b/docs/html/guide/topics/resources/drawable-resource.jd
@@ -641,6 +641,7 @@
android:drawable="@[package:]drawable/<em>drawable_resource</em>"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
+ android:state_hovered=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
@@ -692,6 +693,11 @@
<dd><em>Boolean</em>. "true" if this item should be used when the object is focused (such as when a button
is highlighted using the trackball/d-pad); "false" if this item should be used in the default,
non-focused state.</dd>
+ <dt><code>android:state_hovered</code></dt>
+ <dd><em>Boolean</em>. "true" if this item should be used when the object is being hovered
+by a cursor; "false" if this item should be used in the default, non-hovered state. Often, this
+drawable may be the same drawable used for the "focused" state.
+ <p>Introduced in API level 14.</p></dd>
<dt><code>android:state_selected</code></dt>
<dd><em>Boolean</em>. "true" if this item should be used when the object is selected (such as when a
tab is opened); "false" if this item should be used when the object is not selected.</dd>
@@ -729,6 +735,8 @@
android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <!-- focused -->
+ <item android:state_hovered="true"
+ android:drawable="@drawable/button_focused" /> <!-- hovered -->
<item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
</pre>
diff --git a/docs/html/guide/topics/resources/layout-resource.jd b/docs/html/guide/topics/resources/layout-resource.jd
index b069521..286e3d1 100644
--- a/docs/html/guide/topics/resources/layout-resource.jd
+++ b/docs/html/guide/topics/resources/layout-resource.jd
@@ -7,7 +7,7 @@
<div id="qv">
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li>
</ol>
</div>
</div>
@@ -127,8 +127,9 @@
</dl>
<p>More attributes are supported by the {@link android.view.View}
base class, and many more are supported by each implementation of
- {@link android.view.View}. Read <a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring
- Layout</a> for more information. For a reference of all available attributes,
+ {@link android.view.View}. Read <a
+href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> for more information. For
+a reference of all available attributes,
see the corresponding reference documentation (for example, the <a
href="{@docRoot}reference/android/widget/TextView.html#lattrs">TextView XML attributes</a>).</p>
</dd>
@@ -235,7 +236,8 @@
<p>You can create your own custom {@link android.view.View} and {@link android.view.ViewGroup}
elements and apply them to your layout the same as a standard layout
element. You can also specify the attributes supported in the XML element. To learn more,
-read <a href="{@docRoot}guide/topics/ui/custom-components.html">Building Custom Components</a>.
+see the <a href="{@docRoot}guide/topics/ui/custom-components.html">Custom Components</a> developer
+guide.
</p>
</dd> <!-- end elements and attributes -->
@@ -273,7 +275,7 @@
<dt>see also:</dt>
<dd>
<ul>
- <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li>
<li>{@link android.view.View}</li>
<li>{@link android.view.ViewGroup}</li>
</ul>
diff --git a/docs/html/guide/topics/resources/localization.jd b/docs/html/guide/topics/resources/localization.jd
index 36e12f6..9affb15 100755
--- a/docs/html/guide/topics/resources/localization.jd
+++ b/docs/html/guide/topics/resources/localization.jd
@@ -52,7 +52,7 @@
<li><a
href="{@docRoot}resources/tutorials/localization/index.html">Hello, L10N Tutorial</a></li>
<li><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></li>
- <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li>
<li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">Activity Lifecycle</a></li>
</ol>
</div>
diff --git a/docs/html/guide/topics/resources/menu-resource.jd b/docs/html/guide/topics/resources/menu-resource.jd
index 5b90ce2..fb7612e 100644
--- a/docs/html/guide/topics/resources/menu-resource.jd
+++ b/docs/html/guide/topics/resources/menu-resource.jd
@@ -7,7 +7,7 @@
<div id="qv">
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/menus.html">Menus</a></li>
</ol>
</div>
</div>
@@ -15,8 +15,8 @@
<p>A menu resource defines an application menu (Options Menu, Context Menu, or submenu) that
can be inflated with {@link android.view.MenuInflater}.</p>
-<p>For a guide to using menus, see the <a href="{@docRoot}guide/topics/ui/menus.html">Creating
-Menus</a> document.</p>
+<p>For a guide to using menus, see the <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a>
+developer guide.</p>
<dl class="xml">
@@ -43,9 +43,10 @@
android:titleCondensed="<em>string</em>"
android:icon="@[package:]drawable/<em>drawable_resource_name</em>"
android:onClick="<em>method name</em>"
- android:showAsAction=["ifRoom" | "never" | "withText" | "always"]
+ android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
android:actionLayout="@[package:]layout/<em>layout_resource_name</em>"
android:actionViewClass="<em>class name</em>"
+ android:actionProviderClass="<em>class name</em>"
android:alphabeticShortcut="<em>string</em>"
android:numericShortcut="<em>string</em>"
android:checkable=["true" | "false"]
@@ -131,29 +132,44 @@
Avoid using this unless it's critical that the item always appear in the action
bar. Setting multiple items to always appear as action items can result in them overlapping
with other UI in the action bar.</td></tr>
+ <tr><td><code>collapseActionView</code></td><td>The action view associated
+with this action item (as declared by <code>android:actionViewLayout</code>) is
+collapsible.<br/>Introduced in API Level 14.</td></tr>
</table>
- <p>See <a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a> for
-more information.</p>
+ <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer
+guide for more information.</p>
<p>Introduced in API Level 11.</p>
</dd>
<dt><code>android:actionViewLayout</code></dt>
<dd><em>Layout resource</em>. A layout to use as the action view.
- <p>See <a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a> for
-more information.</p>
+ <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer
+guide for more information.</p>
<p>Introduced in API Level 11.</p></dd>
- <dt><code>android:actionViewClassName</code></dt>
+ <dt><code>android:actionViewClass</code></dt>
<dd><em>Class name</em>. A fully-qualified class name for the {@link android.view.View}
-to use as the action view.
- <p>See <a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a> for
-more information.</p>
+to use as the action view. For example,
+{@code "android.widget.SearchView"} to use {@link android.widget.SearchView} as an action view.
+ <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer
+guide for more information.</p>
<p class="warning"><strong>Warning:</strong> If you obfuscate your code using <a
href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> (or a similar tool),
be sure to exclude the class you specify in this attribute from renaming, because it can break the
functionality.</p>
<p>Introduced in API Level 11.</p></dd>
+ <dt><code>android:actionProviderClass</code></dt>
+ <dd><em>Class name</em>. A fully-qualified class name for the {@link
+android.view.ActionProvider} to use in place of the action item. For example,
+{@code "android.widget.ShareActionProvider"} to use {@link android.widget.ShareActionProvider}.
+ <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer
+guide for more information.</p>
+ <p class="warning"><strong>Warning:</strong> If you obfuscate your code using <a
+href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> (or a similar tool),
+be sure to exclude the class you specify in this attribute from renaming, because it can break the
+functionality.</p>
+ <p>Introduced in API Level 14.</p></dd>
<dt><code>android:alphabeticShortcut</code></dt>
<dd><em>Char</em>. A character for the alphabetic shortcut key.</dd>
diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd
index 74a9073..871b063 100644
--- a/docs/html/guide/topics/resources/runtime-changes.jd
+++ b/docs/html/guide/topics/resources/runtime-changes.jd
@@ -25,80 +25,78 @@
<p>Some device configurations can change during runtime
(such as screen orientation, keyboard availability, and language). When such a change occurs,
Android restarts the running
-Activity ({@link android.app.Activity#onDestroy()} is called, followed by {@link
+{@link android.app.Activity} ({@link android.app.Activity#onDestroy()} is called, followed by {@link
android.app.Activity#onCreate(Bundle) onCreate()}). The restart behavior is designed to help your
application adapt to new configurations by automatically reloading your application with
-alternative resources.</p>
+alternative resources that match the new device configuration.</p>
-<p>To properly handle a restart, it is important that your Activity restores its previous
+<p>To properly handle a restart, it is important that your activity restores its previous
state through the normal <a
href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity
lifecycle</a>, in which Android calls
{@link android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} before it destroys
-your Activity so that you can save data about the application state. You can then restore the state
+your activity so that you can save data about the application state. You can then restore the state
during {@link android.app.Activity#onCreate(Bundle) onCreate()} or {@link
-android.app.Activity#onRestoreInstanceState(Bundle) onRestoreInstanceState()}. To test
-that your application restarts itself with the application state intact, you should
-invoke configuration changes (such as changing the screen orientation) while performing various
-tasks in your application.</p>
+android.app.Activity#onRestoreInstanceState(Bundle) onRestoreInstanceState()}.</p>
-<p>Your application should be able to restart at any time without loss of user data or
-state in order to handle events such as when the user receives an incoming phone call and then
-returns to your application (read about the
-<a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity lifecycle</a>).</p>
+<p>To test that your application restarts itself with the application state intact, you should
+invoke configuration changes (such as changing the screen orientation) while performing various
+tasks in your application. Your application should be able to restart at any time without loss of
+user data or state in order to handle events such as configuration changes or when the user receives
+an incoming phone call and then returns to your application much later after your application
+process may have been destroyed. To learn how you can restore your activity state, read about the <a
+href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity lifecycle</a>.</p>
<p>However, you might encounter a situation in which restarting your application and
restoring significant amounts of data can be costly and create a poor user experience. In such a
-situation, you have two options:</p>
+situation, you have two other options:</p>
<ol type="a">
<li><a href="#RetainingAnObject">Retain an object during a configuration change</a>
- <p>Allow your Activity to restart when a configuration changes, but carry a stateful
-{@link java.lang.Object} to the new instance of your Activity.</p>
+ <p>Allow your activity to restart when a configuration changes, but carry a stateful
+{@link java.lang.Object} to the new instance of your activity.</p>
</li>
<li><a href="#HandlingTheChange">Handle the configuration change yourself</a>
- <p>Prevent the system from restarting your Activity during certain configuration
-changes and receive a callback when the configurations do change, so that you can manually update
-your Activity as necessary.</p>
+ <p>Prevent the system from restarting your activity during certain configuration
+changes, but receive a callback when the configurations do change, so that you can manually update
+your activity as necessary.</p>
</li>
</ol>
<h2 id="RetainingAnObject">Retaining an Object During a Configuration Change</h2>
-<p>If restarting your Activity requires that you recover large sets of data, re-establish a
-network connection, or perform other intensive operations, then a full restart due to a
-configuration change might
-be an unpleasant user experience. Also, it may not be possible for you to completely
-maintain your Activity state with the {@link android.os.Bundle} that the system saves for you during
-the Activity lifecycle—it is not designed to carry large objects (such as bitmaps) and the
-data within it must be serialized then deserialized, which can consume a lot of memory and make the
-configuration change slow. In such a situation, you can alleviate the burden of reinitializing
-your Activity by retaining a stateful Object when your Activity is restarted due to a configuration
-change.</p>
+<p>If restarting your activity requires that you recover large sets of data, re-establish a network
+connection, or perform other intensive operations, then a full restart due to a configuration change
+might be a slow user experience. Also, it might not be possible for you to completely restore your
+activity state with the {@link android.os.Bundle} that the system saves for you with the {@link
+android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} callback—it is not
+designed to carry large objects (such as bitmaps) and the data within it must be serialized then
+deserialized, which can consume a lot of memory and make the configuration change slow. In such a
+situation, you can alleviate the burden of reinitializing your activity by retaining a stateful
+{@link java.lang.Object} when your activity is restarted due to a configuration change.</p>
-<p>To retain an Object during a runtime configuration change:</p>
+<p>To retain an object during a runtime configuration change:</p>
<ol>
<li>Override the {@link android.app.Activity#onRetainNonConfigurationInstance()} method to return
-the Object you would like to retain.</li>
- <li>When your Activity is created again, call {@link
-android.app.Activity#getLastNonConfigurationInstance()} to recover your Object.</li>
+the object you would like to retain.</li>
+ <li>When your activity is created again, call {@link
+android.app.Activity#getLastNonConfigurationInstance()} to recover your object.</li>
</ol>
-<p>Android calls {@link android.app.Activity#onRetainNonConfigurationInstance()} between {@link
-android.app.Activity#onStop()} and {@link
-android.app.Activity#onDestroy()} when it shuts down your Activity due to a configuration
-change. In your implementation of {@link
-android.app.Activity#onRetainNonConfigurationInstance()}, you can return any {@link
-java.lang.Object} that you need in order to efficiently restore your state after the configuration
-change.</p>
+<p>When the Android system shuts down your activity due to a configuration change, it calls {@link
+android.app.Activity#onRetainNonConfigurationInstance()} between the {@link
+android.app.Activity#onStop()} and {@link android.app.Activity#onDestroy()} callbacks. In your
+implementation of {@link android.app.Activity#onRetainNonConfigurationInstance()}, you can return
+any {@link java.lang.Object} that you need in order to efficiently restore your state after the
+configuration change.</p>
<p>A scenario in which this can be valuable is if your application loads a lot of data from the
-web. If the user changes the orientation of the device and the Activity restarts, your application
+web. If the user changes the orientation of the device and the activity restarts, your application
must re-fetch the data, which could be slow. What you can do instead is implement
{@link android.app.Activity#onRetainNonConfigurationInstance()} to return an object carrying your
-data and then retrieve the data when your Activity starts again with {@link
+data and then retrieve the data when your activity starts again with {@link
android.app.Activity#getLastNonConfigurationInstance()}. For example:</p>
<pre>
@@ -113,11 +111,11 @@
should never pass an object that is tied to the {@link android.app.Activity}, such as a {@link
android.graphics.drawable.Drawable}, an {@link android.widget.Adapter}, a {@link android.view.View}
or any other object that's associated with a {@link android.content.Context}. If you do, it will
-leak all the Views and resources of the original Activity instance. (To leak the resources
+leak all the views and resources of the original activity instance. (Leaking resources
means that your application maintains a hold on them and they cannot be garbage-collected, so
lots of memory can be lost.)</p>
-<p>Then retrieve the {@code data} when your Activity starts again:</p>
+<p>Then retrieve the data when your activity starts again:</p>
<pre>
@Override
@@ -133,11 +131,10 @@
}
</pre>
-<p>In this case, {@link android.app.Activity#getLastNonConfigurationInstance()} retrieves
-the data saved by {@link android.app.Activity#onRetainNonConfigurationInstance()}. If {@code data}
-is null (which happens when the
-Activity starts due to any reason other than a configuration change) then the data object is loaded
-from the original source.</p>
+<p>In this case, {@link android.app.Activity#getLastNonConfigurationInstance()} returns the data
+saved by {@link android.app.Activity#onRetainNonConfigurationInstance()}. If {@code data} is null
+(which happens when the activity starts due to any reason other than a configuration change) then
+this code loads the data object from the original source.</p>
@@ -147,27 +144,27 @@
<p>If your application doesn't need to update resources during a specific configuration
change <em>and</em> you have a performance limitation that requires you to
-avoid the Activity restart, then you can declare that your Activity handles the configuration change
-itself, which prevents the system from restarting your Activity.</p>
+avoid the activity restart, then you can declare that your activity handles the configuration change
+itself, which prevents the system from restarting your activity.</p>
<p class="note"><strong>Note:</strong> Handling the configuration change yourself can make it much
more difficult to use alternative resources, because the system does not automatically apply them
-for you. This technique should be considered a last resort and is not recommended for most
-applications.</p>
+for you. This technique should be considered a last resort when you must avoid restarts due to a
+configuration change and is not recommended for most applications.</p>
-<p>To declare that your Activity handles a configuration change, edit the appropriate <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
-in your manifest file to include the <a
+<p>To declare that your activity handles a configuration change, edit the appropriate <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element in
+your manifest file to include the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
-android:configChanges}</a> attribute with a string value that represents the configuration that you
-want to handle. Possible values are listed in the documentation for
-the <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
-android:configChanges}</a> attribute (the most commonly used values are {@code orientation} to
-handle when the screen orientation changes and {@code keyboardHidden} to handle when the
-keyboard availability changes). You can declare multiple configuration values in the attribute
-by separating them with a pipe character ("|").</p>
+android:configChanges}</a> attribute with a value that represents the configuration you want to
+handle. Possible values are listed in the documentation for the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
+android:configChanges}</a> attribute (the most commonly used values are {@code "orientation"} to
+prevent restarts when the screen orientation changes and {@code "keyboardHidden"} to prevent
+restarts when the keyboard availability changes). You can declare multiple configuration values in
+the attribute by separating them with a pipe {@code |} character.</p>
-<p>For example, the following manifest snippet declares an Activity that handles both the
+<p>For example, the following manifest code declares an activity that handles both the
screen orientation change and keyboard availability change:</p>
<pre>
@@ -176,20 +173,32 @@
android:label="@string/app_name">
</pre>
-<p>Now when one of these configurations change, {@code MyActivity} is not restarted.
-Instead, the Activity receives a call to {@link
+<p>Now, when one of these configurations change, {@code MyActivity} does not restart.
+Instead, the {@code MyActivity} receives a call to {@link
android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}. This method
is passed a {@link android.content.res.Configuration} object that specifies
the new device configuration. By reading fields in the {@link android.content.res.Configuration},
you can determine the new configuration and make appropriate changes by updating
the resources used in your interface. At the
-time this method is called, your Activity's {@link android.content.res.Resources} object is updated
+time this method is called, your activity's {@link android.content.res.Resources} object is updated
to return resources based on the new configuration, so you can easily
-reset elements of your UI without the system restarting your Activity.</p>
+reset elements of your UI without the system restarting your activity.</p>
+
+<p class="caution"><strong>Caution:</strong> Beginning with Android 3.2 (API level 13), <strong>the
+"screen size" also changes</strong> when the device switches between portrait and landscape
+orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing
+for API level 13 or higher (as declared by the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> and <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a>
+attributes), you must include the {@code "screenSize"} value in addition to the {@code
+"orientation"} value. That is, you must decalare {@code
+android:configChanges="orientation|screenSize"}. However, if your application targets API level
+12 or lower, then your activity always handles this configuration change itself (this configuration
+change does not restart your activity, even when running on an Android 3.2 or higher device).</p>
<p>For example, the following {@link
android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} implementation
-checks the availability of a hardware keyboard and the current device orientation:</p>
+checks the current device orientation:</p>
<pre>
@Override
@@ -202,12 +211,6 @@
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
- // Checks whether a hardware keyboard is available
- if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
- Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
- } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
- Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
- }
}
</pre>
@@ -216,7 +219,8 @@
the configuration has changed and can simply re-assign all your resources that provide alternatives
to the configuration that you're handling. For example, because the {@link
android.content.res.Resources} object is now updated, you can reset
-any {@link android.widget.ImageView}s with {@link android.widget.ImageView#setImageResource(int)}
+any {@link android.widget.ImageView}s with {@link android.widget.ImageView#setImageResource(int)
+setImageResource()}
and the appropriate resource for the new configuration is used (as described in <a
href="providing-resources.html#AlternateResources">Providing Resources</a>).</p>
@@ -226,9 +230,9 @@
to use with each field, refer to the appropriate field in the {@link
android.content.res.Configuration} reference.</p>
-<p class="note"><strong>Remember:</strong> When you declare your Activity to handle a configuration
+<p class="note"><strong>Remember:</strong> When you declare your activity to handle a configuration
change, you are responsible for resetting any elements for which you provide alternatives. If you
-declare your Activity to handle the orientation change and have images that should change
+declare your activity to handle the orientation change and have images that should change
between landscape and portrait, you must re-assign each resource to each element during {@link
android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}.</p>
@@ -236,13 +240,14 @@
changes, you can instead <em>not</em> implement {@link
android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}. In
which case, all of the resources used before the configuration change are still used
-and you've only avoided the restart of your Activity. However, your application should always be
-able to shutdown and restart with its previous state intact. Not only because
-there are other configuration changes that you cannot prevent from restarting your application but
-also in order to handle events such as when the user receives an incoming phone call and then
-returns to your application.</p>
+and you've only avoided the restart of your activity. However, your application should always be
+able to shutdown and restart with its previous state intact, so you should not consider this
+technique an escape from retaining your state during normal activity lifecycle. Not only because
+there are other configuration changes that you cannot prevent from restarting your application, but
+also because you should handle events such as when the user leaves your application and it gets
+destroyed before the user returns to it.</p>
-<p>For more about which configuration changes you can handle in your Activity, see the <a
+<p>For more about which configuration changes you can handle in your activity, see the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
android:configChanges}</a> documentation and the {@link android.content.res.Configuration}
class.</p>
diff --git a/docs/html/guide/topics/resources/style-resource.jd b/docs/html/guide/topics/resources/style-resource.jd
index def727c..f6252dba 100644
--- a/docs/html/guide/topics/resources/style-resource.jd
+++ b/docs/html/guide/topics/resources/style-resource.jd
@@ -7,7 +7,7 @@
<div id="qv">
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a></li>
</ol>
</div>
</div>
@@ -18,7 +18,7 @@
an entire {@link android.app.Activity} or application (from within the manifest file).</p>
<p>For more information about creating and applying styles, please read
-<a href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
+<a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
<p class="note"><strong>Note:</strong> A style is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd
index d869a44..27409d5 100644
--- a/docs/html/guide/topics/search/search-dialog.jd
+++ b/docs/html/guide/topics/search/search-dialog.jd
@@ -748,8 +748,8 @@
documentation for {@link android.widget.SearchView} and its nested interfaces for the
appropriate event listeners.</p>
-<p>For more information about action views in the Action Bar, read <a
-href="{@docRoot}guide/topics/ui/actionbar.html#ActionView">Using the Action Bar</a> (which
+<p>For more information about action views in the Action Bar, read the <a
+href="{@docRoot}guide/topics/ui/actionbar.html#ActionView">Action Bar</a> developer guide (which
includes sample code for adding a search widget as an action view).</p>
@@ -803,8 +803,8 @@
android.app.Activity#onSearchRequested onSearchRequested()}.</p>
<p>For more information about how items in the Action Bar work and how to handle this situation, see
-the documentation for <a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action
-Bar</a>.</p>
+the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
+Bar</a> developer guide.</p>
<p>Also see the <a
href="{@docRoot}resources/samples/SearchableDictionary/src/com/example/android/searchabledict/
diff --git a/docs/html/guide/topics/security/security.jd b/docs/html/guide/topics/security/security.jd
index 2e31940..1fd9ba0 100644
--- a/docs/html/guide/topics/security/security.jd
+++ b/docs/html/guide/topics/security/security.jd
@@ -20,6 +20,10 @@
</ol>
</div>
</div>
+<p>This document describes how application developers can use the
+security features provided by Android. A more general <a
+href="http://source.android.com/tech/security/index.html"> Android Security
+Overview</a> is provided in the Android Open Source Project.</p>
<p>Android is a privilege-separated operating system, in which each
application runs with a distinct system identity (Linux user ID and group
@@ -41,7 +45,7 @@
e-mails), reading or writing another application's files, performing
network access, keeping the device awake, etc.</p>
-<p>Because the kernel sandboxes applications from each other, applications
+<p>Because Android sandboxes applications from each other, applications
must explicitly share resources and data. They do this by declaring the
<em>permissions</em> they need for additional capabilities not provided by
the basic sandbox. Applications statically declare the permissions they
@@ -50,11 +54,11 @@
dynamically (at run-time) because it complicates the user experience to the
detriment of security.</p>
-<p>The kernel is solely responsible for sandboxing applications from each
-other. In particular the Dalvik VM is not a security boundary, and any app
-can run native code (see <a href="/sdk/ndk/index.html">the Android NDK</a>).
-All types of applications — Java, native, and hybrid — are
-sandboxed in the same way and have the same degree of security from each
+<p>The application sandbox does not depend on the technology used to build
+an application. In particular the Dalvik VM is not a security boundary, and
+any app can run native code (see <a href="/sdk/ndk/index.html">the Android
+NDK</a>). All types of applications — Java, native, and hybrid —
+are sandboxed in the same way and have the same degree of security from each
other.</p>
<a name="signing"></a>
@@ -220,12 +224,13 @@
</pre>
<p>You can look at the permissions currently defined in the system with the
-shell command <code>adb shell pm list permissions</code>. In particular,
-the '-s' option displays the permissions in a form roughly similar to how the
-user will see them:</p>
+Settings app and the shell command <code>adb shell pm list permissions</code>.
+To use the Settings app, go to Settings > Applications. Pick an app and
+scroll down to see the permissions that the app uses. For developers, the adb '-s'
+option displays the permissions in a form similar to how the user will see them:</p>
<pre>
-$ adb shell pm list permissions -s
+$ adb shell pm list permissions -s
All Permissions:
Network communication: view Wi-Fi state, create Bluetooth connections, full
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index 6f12b95..4742923 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -1,4 +1,4 @@
-page.title=Using the Action Bar
+page.title=Action Bar
parent.title=User Interface
parent.link=index.html
@jd:body
@@ -49,7 +49,7 @@
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/menus.html">Menus</a></li>
</ol>
</div>
</div>
@@ -157,7 +157,7 @@
<p>When the activity first starts, the system populates the Action Bar and overflow menu by calling
{@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()} for your activity. As
-discussed in the guide to <a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a>, it's in
+discussed in the <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> developer guid, it's in
this callback method that you define the Options Menu for the activity.</p>
<p>You can specify a menu item to appear as an action item—if there is room
@@ -211,7 +211,7 @@
collide with other elements in the Action Bar.</p>
<p>For more information about menus, see the <a
-href="{@docRoot}guide/topics/ui/menus.html#options-menu">Creating Menus</a> developer guide.</p>
+href="{@docRoot}guide/topics/ui/menus.html#options-menu">Menus</a> developer guide.</p>
<h3 id="Home">Using the app icon as an action item</h3>
@@ -845,7 +845,7 @@
</dl>
<p>For more information about using themes in your application, read <a
-href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
+href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
diff --git a/docs/html/guide/topics/ui/custom-components.jd b/docs/html/guide/topics/ui/custom-components.jd
index 900e08b..be82dbc 100644
--- a/docs/html/guide/topics/ui/custom-components.jd
+++ b/docs/html/guide/topics/ui/custom-components.jd
@@ -1,4 +1,4 @@
-page.title=Building Custom Components
+page.title=Custom Components
parent.title=User Interface
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/ui/declaring-layout.jd b/docs/html/guide/topics/ui/declaring-layout.jd
index 4a574be..4dc915f 100644
--- a/docs/html/guide/topics/ui/declaring-layout.jd
+++ b/docs/html/guide/topics/ui/declaring-layout.jd
@@ -1,4 +1,4 @@
-page.title=Declaring Layout
+page.title=XML Layouts
parent.title=User Interface
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index c1272b6..16f14cb 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -1,4 +1,4 @@
-page.title=Creating Dialogs
+page.title=Dialogs
parent.title=User Interface
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/ui/drag-drop.jd b/docs/html/guide/topics/ui/drag-drop.jd
index 0329c192..93753cc 100644
--- a/docs/html/guide/topics/ui/drag-drop.jd
+++ b/docs/html/guide/topics/ui/drag-drop.jd
@@ -1,4 +1,4 @@
-page.title=Dragging and Dropping
+page.title=Drag and Drop
parent.title=User Interface
parent.link=index.html
@jd:body
@@ -107,7 +107,7 @@
<a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
</li>
<li>
- <a href="{@docRoot}guide/topics/ui/ui-events.html">Handling UI Events</a>
+ <a href="{@docRoot}guide/topics/ui/ui-events.html">Input Events</a>
</li>
</ol>
</div>
diff --git a/docs/html/guide/topics/ui/index.jd b/docs/html/guide/topics/ui/index.jd
index 375c9fe..d3060c5 100644
--- a/docs/html/guide/topics/ui/index.jd
+++ b/docs/html/guide/topics/ui/index.jd
@@ -9,7 +9,7 @@
<li><a href="#ViewHierarchy">View Hierarchy</a></li>
<li><a href="#Layout">Layout</a></li>
<li><a href="#Widgets">Widgets</a></li>
- <li><a href="#Events">UI Events</a></li>
+ <li><a href="#Events">Input Events</a></li>
<li><a href="#Menus">Menus</a></li>
<li><a href="#Advanced">Advanced Topics</a>
<ol>
@@ -104,7 +104,7 @@
another LinearLayout (or other type of view group) inside here, to lengthen the view hierarchy and create a more
complex layout.</p>
-<p>For more on building a UI layout, read <a href="declaring-layout.html">Declaring Layout</a>.
+<p>For more on building a UI layout, read <a href="declaring-layout.html">XML Layouts</a>.
<div class="sidebox-wrapper">
<div class="sidebox">
@@ -132,16 +132,16 @@
But you're not limited to the kinds of widgets provided by the Android platform. If you'd
like to do something more customized and create your own actionable elements, you can, by defining your own
View object or by extending and combining existing widgets.</p>
-<p>Read more in <a href="custom-components.html">Building Custom Components</a>.</p>
+<p>Read more in the <a href="custom-components.html">Custom Components</a> developer guide.</p>
<p>For a list of the widgets provided by Android, see the {@link android.widget} package.</p>
-<h2 id="Events">UI Events</h2>
+<h2 id="Events">Input Events</h2>
<p>Once you've added some Views/widgets to the UI, you probably want to know about the
-user's interaction with them, so you can perform actions. To be informed of UI events, you need to
-do one of two things:</p>
+user's interaction with them, so you can perform actions. To be informed of user input events, you
+need to do one of two things:</p>
<ul>
<li><strong>Define an event listener and register it with the View.</strong> More often than not,
this is how you'll listen for events. The View class contains a collection of nested interfaces named
@@ -166,8 +166,8 @@
</li>
</ul>
-<p>Continue reading about handling user interaction with Views in the <a href="ui-events.html">Handling UI Events</a>
-document.</p>
+<p>Continue reading about handling user interaction with Views in the <a
+href="ui-events.html">Input Events</a> document.</p>
<h2 id="Menus">Menus</h2>
@@ -192,7 +192,7 @@
<p>And just like your application layout, you have the option to declare the items for you menu in an XML file.</p>
-<p>Read <a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a> to learn more.</p>
+<p>Read <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> to learn more.</p>
<h2 id="Advanced">Advanced Topics</h2>
@@ -232,4 +232,4 @@
<p>Styles and themes are resources. Android provides some default style and theme resources that you can use,
or you can declare your own custom style and theme resources.</p>
<p>Learn more about using styles and themes in the
-<a href="themes.html">Applying Styles and Themes</a> document.</p>
+<a href="themes.html">Styles and Themes</a> document.</p>
diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd
index 984bf8f..2948244 100644
--- a/docs/html/guide/topics/ui/menus.jd
+++ b/docs/html/guide/topics/ui/menus.jd
@@ -1,4 +1,4 @@
-page.title=Creating Menus
+page.title=Menus
parent.title=User Interface
parent.link=index.html
@jd:body
@@ -36,7 +36,7 @@
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a></li>
<li><a href="{@docRoot}guide/topics/resources/menu-resource.html">Menu Resource</a></li>
</ol>
</div>
@@ -301,8 +301,8 @@
items in the Options Menu. If you want to provide menu items that are context-sensitive to a {@link
android.view.View}, use a <a href="#context-menu">Context Menu</a>.</p>
-<p>If you're developing for Android 3.0 or higher, be sure to also read <a
-href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a>.</p>
+<p>If you're developing for Android 3.0 or higher, be sure to also read the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guide.</p>
diff --git a/docs/html/guide/topics/ui/notifiers/index.jd b/docs/html/guide/topics/ui/notifiers/index.jd
index 8fc57fc..c61d4f0 100644
--- a/docs/html/guide/topics/ui/notifiers/index.jd
+++ b/docs/html/guide/topics/ui/notifiers/index.jd
@@ -1,19 +1,8 @@
-page.title=Notifying the User
+page.title=Notifications
parent.title=User Interface
parent.link=../index.html
@jd:body
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Topics</h2>
- <ol>
- <li><a href="toasts.html">Creating Toast Notifications</a></li>
- <li><a href="notifications.html">Creating Status Bar Notifications</a></li>
- <li><a href="{@docRoot}guide/topics/ui/dialogs.html">Creating Dialogs</a></li>
- </ol>
- </div>
-</div>
-
<p>Several types of situations may arise that require you to notify the user
about an event that occurs in your application. Some events require the user to respond
and others do not. For example:</p>
@@ -57,7 +46,7 @@
the user to respond and take action, consider using a
<a href="#StatusBar">Status Bar Notification</a> instead.</p>
-<p>For more information, refer to <a href="toasts.html">Creating Toast Notifications</a>.</p>
+<p>For more information, refer to <a href="toasts.html">Toast Notifications</a>.</p>
<h2 id="StatusBar">Status Bar Notification</h2>
@@ -79,7 +68,7 @@
<a href="#Dialog">Dialog Notification</a> instead.</p>
<p>For more information, refer to
-<a href="notifications.html">Creating Status Bar Notifications</a>.</p>
+<a href="notifications.html">Status Bar Notifications</a>.</p>
<h2 id="Dialog">Dialog Notification</h2>
@@ -97,7 +86,7 @@
in your application's UI and for other purposes besides notifications.
For a complete discussion on all the available types of dialogs,
including its uses for notifications, refer to
-<a href="{@docRoot}guide/topics/ui/dialogs.html">Creating Dialogs</a>.</p>
+<a href="{@docRoot}guide/topics/ui/dialogs.html">Dialogs</a>.</p>
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index f12c5ee..7bc1cde 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -1,5 +1,5 @@
-page.title=Creating Status Bar Notifications
-parent.title=Notifying the User
+page.title=Status Bar Notifications
+parent.title=Notifications
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/ui/notifiers/toasts.jd b/docs/html/guide/topics/ui/notifiers/toasts.jd
index 0d3e10c..1a1fb1f 100644
--- a/docs/html/guide/topics/ui/notifiers/toasts.jd
+++ b/docs/html/guide/topics/ui/notifiers/toasts.jd
@@ -1,5 +1,5 @@
-page.title=Creating Toast Notifications
-parent.title=Notifying the User
+page.title=Toast Notifications
+parent.title=Notifications
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd
index a213bea..d787492 100644
--- a/docs/html/guide/topics/ui/themes.jd
+++ b/docs/html/guide/topics/ui/themes.jd
@@ -1,4 +1,4 @@
-page.title=Applying Styles and Themes
+page.title=Styles and Themes
parent.title=User Interface
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/ui/ui-events.jd b/docs/html/guide/topics/ui/ui-events.jd
index 7d7bfaf..93bad43 100644
--- a/docs/html/guide/topics/ui/ui-events.jd
+++ b/docs/html/guide/topics/ui/ui-events.jd
@@ -1,4 +1,4 @@
-page.title=Handling UI Events
+page.title=Input Events
parent.title=User Interface
parent.link=index.html
@jd:body
@@ -72,7 +72,8 @@
<dt><code>onCreateContextMenu()</code></dt>
<dd>From {@link android.view.View.OnCreateContextMenuListener}.
This is called when a Context Menu is being built (as the result of a sustained "long click"). See the discussion
- on context menus in <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Creating Menus</a> for more information.</dd>
+ on context menus in the <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menus</a>
+ developer guide.</dd>
</dl>
<p>These methods are the sole inhabitants of their respective interface. To define one of these methods
@@ -159,8 +160,9 @@
<p>If you're building a custom component from View, then you'll be able to define several callback methods
used as default event handlers.
-In the document on <a href="{@docRoot}guide/topics/ui/custom-components.html">Building Custom Components</a>,
-you'll learn see some of the common callbacks used for event handling, including:</p>
+In the document about <a href="{@docRoot}guide/topics/ui/custom-components.html">Custom
+Components</a>, you'll learn see some of the common callbacks used for event handling,
+including:</p>
<ul>
<li><code>{@link android.view.View#onKeyDown}</code> - Called when a new key event occurs.</li>
<li><code>{@link android.view.View#onKeyUp}</code> - Called when a key up event occurs.</li>
diff --git a/docs/html/guide/tutorials/notepad/notepad-ex2.jd b/docs/html/guide/tutorials/notepad/notepad-ex2.jd
index 854731f..fed40ab 100644
--- a/docs/html/guide/tutorials/notepad/notepad-ex2.jd
+++ b/docs/html/guide/tutorials/notepad/notepad-ex2.jd
@@ -299,7 +299,8 @@
in real Android applications.</p>
<p>Creating a
good UI is part art and part science, and the rest is work. Mastery of <a
- href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a> is an essential part of creating
+ href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> is an essential part of
+creating
a good looking Android application.</p>
<p>Take a look at the
<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>
diff --git a/docs/html/images/icon_design/action_bar_examples.png b/docs/html/images/icon_design/action_bar_examples.png
new file mode 100644
index 0000000..b6b2b0a
--- /dev/null
+++ b/docs/html/images/icon_design/action_bar_examples.png
Binary files differ
diff --git a/docs/html/images/icon_design/action_bar_holo_dark_style.png b/docs/html/images/icon_design/action_bar_holo_dark_style.png
new file mode 100644
index 0000000..2837859
--- /dev/null
+++ b/docs/html/images/icon_design/action_bar_holo_dark_style.png
Binary files differ
diff --git a/docs/html/images/icon_design/action_bar_holo_light_style.png b/docs/html/images/icon_design/action_bar_holo_light_style.png
new file mode 100644
index 0000000..84e3655
--- /dev/null
+++ b/docs/html/images/icon_design/action_bar_holo_light_style.png
Binary files differ
diff --git a/docs/html/images/icon_design/launcher_dodont_clock.png b/docs/html/images/icon_design/launcher_dodont_clock.png
new file mode 100644
index 0000000..16fe651
--- /dev/null
+++ b/docs/html/images/icon_design/launcher_dodont_clock.png
Binary files differ
diff --git a/docs/html/images/icon_design/launcher_dodont_custom.png b/docs/html/images/icon_design/launcher_dodont_custom.png
new file mode 100644
index 0000000..fee3bff
--- /dev/null
+++ b/docs/html/images/icon_design/launcher_dodont_custom.png
Binary files differ
diff --git a/docs/html/images/icon_design/launcher_dodont_custom_2.png b/docs/html/images/icon_design/launcher_dodont_custom_2.png
new file mode 100644
index 0000000..d9fa1c9
--- /dev/null
+++ b/docs/html/images/icon_design/launcher_dodont_custom_2.png
Binary files differ
diff --git a/docs/html/images/icon_design/launcher_dodont_settings.png b/docs/html/images/icon_design/launcher_dodont_settings.png
new file mode 100644
index 0000000..2e689af
--- /dev/null
+++ b/docs/html/images/icon_design/launcher_dodont_settings.png
Binary files differ
diff --git a/docs/html/images/icon_design/launcher_examples.png b/docs/html/images/icon_design/launcher_examples.png
new file mode 100644
index 0000000..896a285
--- /dev/null
+++ b/docs/html/images/icon_design/launcher_examples.png
Binary files differ
diff --git a/docs/html/images/icon_design/status_bar_honeycomb_dimming.png b/docs/html/images/icon_design/status_bar_honeycomb_dimming.png
new file mode 100644
index 0000000..b319f45
--- /dev/null
+++ b/docs/html/images/icon_design/status_bar_honeycomb_dimming.png
Binary files differ
diff --git a/docs/html/images/icon_design/status_bar_honeycomb_examples.png b/docs/html/images/icon_design/status_bar_honeycomb_examples.png
new file mode 100644
index 0000000..6335426
--- /dev/null
+++ b/docs/html/images/icon_design/status_bar_honeycomb_examples.png
Binary files differ
diff --git a/docs/html/images/icon_design/status_bar_honeycomb_style.png b/docs/html/images/icon_design/status_bar_honeycomb_style.png
new file mode 100644
index 0000000..5844d8b
--- /dev/null
+++ b/docs/html/images/icon_design/status_bar_honeycomb_style.png
Binary files differ
diff --git a/docs/html/intl/ja/guide/developing/eclipse-adt.jd b/docs/html/intl/ja/guide/developing/eclipse-adt.jd
index e7accd8..397c006 100644
--- a/docs/html/intl/ja/guide/developing/eclipse-adt.jd
+++ b/docs/html/intl/ja/guide/developing/eclipse-adt.jd
@@ -77,7 +77,7 @@
<dd>アプリケーションのリソース用(描画ファイル、レイアウト ファイル、文字列値など)のフォルダです。<a href="{@docRoot}guide/topics/resources/index.html">Resources and Assets</a>をご覧ください。</dd>
<dt><code>AndroidManifest.xml</code></dt>
<dd>このプロジェクトの Android マニフェストです。<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>をご覧ください。</dd>
- <dt><code>default.properties</code></dt>
+ <dt><code>project.properties</code></dt>
<dd>このファイルには、ビルド ターゲットのようなプロジェクトの設定が含まれます。このファイルはプロジェクトに不可欠なので、ソース リビジョン管理システムで管理する必要があります。このファイルを手動で編集しないでください。プロジェクトのプロパティを編集するには、プロジェクト フォルダを右クリックして、[プロパティ(Properties)] を選択します。</dd>
</dl>
diff --git a/docs/html/intl/ja/guide/developing/other-ide.jd b/docs/html/intl/ja/guide/developing/other-ide.jd
index 2983da2..ba82c18 100644
--- a/docs/html/intl/ja/guide/developing/other-ide.jd
+++ b/docs/html/intl/ja/guide/developing/other-ide.jd
@@ -98,8 +98,8 @@
<ul>
<li><code>AndroidManifest.xml</code> - アプリケーションのマニフェスト ファイル。指定したプロジェクトの Activity クラスと同期されます。</li>
<li><code>build.xml</code> - Ant 用のビルド ファイルです。</li>
- <li><code>default.properties</code> - ビルド システム用のプロパティです。このファイルを変更しないでください。<em></em></li>
- <li><code>build.properties</code> - ビルド システム用のカスタマイズ可能なプロパティです。このファイルを編集して、Ant が使用するデフォルトのビルド設定をオーバーライドできます。</li>
+ <li><code>project.properties</code> - ビルド システム用のプロパティです。このファイルを変更しないでください。<em></em></li>
+ <li><code>ant.properties</code> - ビルド システム用のカスタマイズ可能なプロパティです。このファイルを編集して、Ant が使用するデフォルトのビルド設定をオーバーライドできます。</li>
<li><code>src<em>/your/package/namespace/ActivityName</em>.java</code> - プロジェクトの作成時に指定した Activity クラスです。</li>
<li><code>bin/</code> - ビルド スクリプト用の出力ディレクトリです。</li>
<li><code>gen/</code> - <code>Ant</code> が生成するファイル(<code>R.java</code> など)が含まれます。 </li>
diff --git a/docs/html/resources/articles/zipalign.jd b/docs/html/resources/articles/zipalign.jd
index 9e767aa..d3c68a6 100644
--- a/docs/html/resources/articles/zipalign.jd
+++ b/docs/html/resources/articles/zipalign.jd
@@ -67,7 +67,7 @@
information to sign the packages, since aligning has to happen after signing. In
order to be able to sign packages, and therefore to align them, <em>Ant</em>
needs to know the location of the keystore and the name of the key in
-<code>build.properties</code>. The name of the properties are
+<code>ant.properties</code>. The name of the properties are
<code>key.store</code> and <code>key.alias</code> respectively. If those
properties are present, the signing tool will prompt to enter the store/key
passwords during the build, and the script will sign and then align the apk
diff --git a/docs/html/resources/faq/commontasks.jd b/docs/html/resources/faq/commontasks.jd
index b211db0..c72343a0 100644
--- a/docs/html/resources/faq/commontasks.jd
+++ b/docs/html/resources/faq/commontasks.jd
@@ -268,7 +268,8 @@
{@link android.app.Activity#finishActivity(int) Activity.finishActivity()}
on any screens that it opens to close them. </p>
<a name="listening" id="listening"></a><h2>Listening for Button Clicks</h2>
-<p>Button click and other UI event capturing are covered in <a href="{@docRoot}guide/topics/ui/ui-events.html">Handling UI Events</a> on the UI Design page.</p>
+<p>Button click and other UI event capturing are covered in <a
+href="{@docRoot}guide/topics/ui/ui-events.html">Input Events</a>.</p>
<a name="configurewindowproperties" id="configurewindowproperties"></a><h2>Configuring General Window Properties</h2>
<p>You can set a number of general window properties, such as whether to display
a title, whether the window is floating, and whether it displays an icon, by
@@ -543,7 +544,7 @@
which enables a dialog box with an embedded progress bar to send a "I'm working
on it" notification to the user. </p>
<a name="addmenuitems" id="addmenuitems"></a><h2>Adding Items to the Screen Menu</h2>
-<p>See <a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a>.</p>
+<p>See <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a>.</p>
<a name="webpage" id="webpage"></a><h2>Display a Web Page</h2>
<p>Use the {@link android.webkit.WebView webkit.WebView} object. </p>
diff --git a/docs/html/resources/faq/security.jd b/docs/html/resources/faq/security.jd
index b0d832b..52ee0d9 100644
--- a/docs/html/resources/faq/security.jd
+++ b/docs/html/resources/faq/security.jd
@@ -7,8 +7,7 @@
<li><a href="#secure">Is Android Secure?</a></li>
<li><a href="#issue">I think I found a security flaw. How do I report
it?</a></li>
- <li><a href="#informed">How can I stay informed of Android security
- announcements?</a></li>
+ <li><a href="#informed">How can I stay informed about Android security?</a></li>
<li><a href="#use">How do I securely use my Android phone?</a></li>
<li><a href="#malware">I think I found malicious software being distributed
for Android. How can I help?</a></li>
@@ -26,9 +25,15 @@
of the most secure mobile platforms available while still fulfilling our goal
of opening the mobile device space to innovation and competition.</p>
-<p>The Android Platform provides a rich <a
+<p> A comprehensive overview of the <a
+href="http://source.android.com/tech/security/index.html">Android
+security model and Android security processes</a> is provided in the Android
+Open Source Project Website.</p>
+
+<p>Application developers play an important part in the security of Android.
+The Android Platform provides developers with a rich <a
href="http://code.google.com/android/devel/security.html">security model</a>
-that allows developers to request the capabilities, or access, needed by their
+that to request the capabilities, or access, needed by their
application and to define new capabilities that other applications can request.
The Android user can choose to grant or deny an application's request for
certain capabilities on the handset.</p>
@@ -49,27 +54,17 @@
href="http://code.google.com/android/security_at_android_dot_com.txt">PGP
key</a>.</p>
-<p>We appreciate researchers practicing responsible disclosure by emailing us
-with a detailed summary of the issue and keeping the issue confidential while
+<p>We appreciate researchers practicing responsible disclosure by emailing us
+with a detailed summary of the issue and keeping the issue confidential while
users are at risk. In return, we will make sure to keep the researcher informed
of our progress in issuing a fix and will properly credit the reporter(s) when
-we announce the patch. We will always move swiftly to mitigate or fix an
-externally-reported flaw and will publicly announce the fix once patches are
-available to users.</p>
+we provide the patch. We will always move swiftly to mitigate or fix an
+externally-reported flaw and provide updates to users. </p>
-<a name="informed" id="informed"></a><h2>How can I stay informed of Android
-security announcements?</h2>
+<a name="informed" id="informed"></a><h2>How can I stay informed about Android security?</h2>
-<p>An important part of sustainably securing a platform, such as, Android is
-keeping the user and security community informed of bugs and fixes. We will
-publicly announce security bugs when the fixes are available via postings to
-the <a
-href="http://groups.google.com/group/android-security-announce">android-security-announce</a>
-group on Google Groups. You can subscribe to this group as you would a mailing
-list and view the archives here.</p>
-
-<p>For more general discussion of Android platform security, or how to use
+<p>For general discussion of Android platform security, or how to use
security features in your Android application, please subscribe to <a
href="http://groups.google.com/group/android-security-discuss">android-security-discuss</a>.
</p>
@@ -77,35 +72,39 @@
<a name="use" id="use"></a><h2>How do I securely use my Android phone?</h2>
-<p>As an open platform, Android allows users to load software from any
-developer onto a device. As with a home PC, the user must be
+<p>Android was designed so that you can safely use your phone without making
+any changes to the device or installing any special software. Android applications
+run in an Application Sandbox that limits access to sensitive information or data
+with the users permission.</p>
+
+<p>To fully benefit from the security protections in Android, it is important that
+users only download and install software from known sources.</p>
+
+<p>As an open platform, Android allows users to visit any website and load
+software from any developer onto a device. As with a home PC, the user must be
aware of who is providing the software they are downloading and must decide
whether they want to grant the application the capabilities it requests.
This decision can be informed by the user's judgment of the software
developer's trustworthiness, and where the software came from.</p>
-<p>Despite the security protections in Android, it is important
-for users to only download and install software from developers they trust.
-More details on how Android users can make smart security decisions will be
-released when consumer devices become available.</p>
-
<a name="malware" id="malware"></a><h2>I think I found malicious software being
distributed for Android. How can I help?</h2>
-<p>Like any other open platform, it will be possible for unethical developers
+<p>Like any other platform, it will be possible for unethical developers
to create malicious software, known as <a
href="http://en.wikipedia.org/wiki/Malware">malware</a>, for Android. If you
-think somebody is trying to spread malware, please let us know at <a
+think somebody is trying to spread malware, please let us know at <a
href="mailto:security@android.com">security@android.com</a>. Please include as
much detail about the application as possible, with the location it is
being distributed from and why you suspect it of being malicious software.</p>
-<p>The term <i>malicious software</i> is subjective, and we cannot make an
+<p>The term <i>malicious software</i> is subjective, and we cannot make an
exhaustive definition. Some examples of what the Android Security Team believes
to be malicious software is any application that:
<ul>
- <li>drains the device's battery very quickly;</li>
+ <li>uses a bug or security vulnerability to gain permissions that have not
+ been granted by the user</li>
<li>shows the user unsolicited messages (especially messages urging the
user to buy something);</li>
<li>resists (or attempts to resist) the user's effort to uninstall it;</li>
@@ -122,7 +121,7 @@
</p>
-<a name="fixes" id="fixes"></a><h2>How will Android-powered devices receive security
+<a name="fixes" id="fixes"></a><h2>How do Android-powered devices receive security
fixes?</h2>
<p>The manufacturer of each device is responsible for distributing software
@@ -130,27 +129,24 @@
automatically with software downloaded "over the air", while some devices
require the user to upgrade them manually.</p>
-<p>When Android-powered devices are publicly available, this FAQ will provide links how
-Open Handset Alliance members release updates.</p>
+<p>Google provides software updates for a number of Android devices, including
+the <a href="http://www.google.com/nexus">Nexus</a>
+series of devices, using an "over the air" (OTA) update. These updates may include
+security fixes as well as new features.</p>
<a name="directfix" id="directfix"></a><h2>Can I get a fix directly from the
Android Platform Project?</h2>
-<p>Android is a mobile platform that will be released as open source and
-available for free use by anybody. This means that there will be many
-Android-based products available to consumers, and most of them will be created
+<p>Android is a mobile platform that is released as open source and
+available for free use by anybody. This means that there are many
+Android-based products available to consumers, and most of them are created
without the knowledge or participation of the Android Open Source Project. Like
the maintainers of other open source projects, we cannot build and release
patches for the entire ecosystem of products using Android. Instead, we will
work diligently to find and fix flaws as quickly as possible and to distribute
-those fixes to the manufacturers of the products.</p>
+those fixes to the manufacturers of the products through the open source project.</p>
-<p>In addition, We will add security fixes to the open source distribution of
-Android and publicly announce the changes on <a
-href="http://groups.google.com/group/android-security-announce">android-security-announce</a>.
-</p>
-
-<p>If you are making an Android-powered device and would like to know how you can
+<p>If you are making an Android-powered device and would like to know how you can
properly support your customers by keeping abreast of software updates, please
contact us at <a
href="mailto:info@openhandsetalliance.com">info@openhandsetalliance.com</a>.</p>
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index 6c5d882..3e673a5 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -408,6 +408,26 @@
}
},
{
+ tags: ['sample', 'new', 'ui', 'compatibility', 'newfeature'],
+ path: 'samples/ActionBarCompat/index.html',
+ title: {
+ en: 'Action Bar Compatibility'
+ },
+ description: {
+ en: 'Shows how to use the action bar on both pre-API 11 and API 11+ devices, maximizing code re-use.'
+ }
+ },
+ {
+ tags: ['sample', 'new'],
+ path: 'samples/AndroidBeam/index.html',
+ title: {
+ en: 'Android Beam'
+ },
+ description: {
+ en: 'An example of how to use the Android Beam feature to send messages between two Android-powered devices (API level 14 or later) that support NFC.'
+ }
+ },
+ {
tags: ['sample', 'layout', 'ui'],
path: 'samples/ApiDemos/index.html',
title: {
@@ -558,13 +578,13 @@
}
},
{
- tags: ['sample', 'media' ],
+ tags: ['sample', 'media', 'updated'],
path: 'samples/RandomMusicPlayer/index.html',
title: {
en: 'Random Music Player'
},
description: {
- en: 'Demonstrates how to write a multimedia application that plays music from the device and from URLs. It manages media playback from a service and can play music in the background, respecting audio focus changes.'
+ en: 'Demonstrates how to write a multimedia application that plays music from the device and from URLs. It manages media playback from a service and can play music in the background, respecting audio focus changes. Also shows how to use the new Remote Control APIs in API level 14.'
}
},
{
@@ -578,6 +598,16 @@
}
},
{
+ tags: ['sample', 'input', 'new'],
+ path: 'samples/SampleSpellCheckerService/index.html',
+ title: {
+ en: 'Spell Checker'
+ },
+ description: {
+ en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerservice</code></a>.'
+ }
+ },
+ {
tags: ['sample', 'accountsync'],
path: 'samples/SampleSyncAdapter/index.html',
title: {
@@ -691,13 +721,23 @@
tags: ['sample', 'data', 'new'],
path: 'samples/VoicemailProviderDemo/index.html',
title: {
- en: 'Voicemail Provider Demo'
+ en: 'Voicemail Provider'
},
description: {
en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
}
},
{
+ tags: ['sample','newfeature', 'new'],
+ path: 'samples/WiFiDirectDemo/index.html',
+ title: {
+ en: 'Wi-Fi Direct Demo'
+ },
+ description: {
+ en: 'A demo application to demonstrate how to use Wi-Fi Direct APIs.'
+ }
+ },
+ {
tags: ['sample', 'ui', 'widgets'],
path: 'samples/Wiktionary/index.html',
title: {
diff --git a/docs/html/resources/samples/images/ActionBarCompat1.png b/docs/html/resources/samples/images/ActionBarCompat1.png
new file mode 100644
index 0000000..64d3e66
--- /dev/null
+++ b/docs/html/resources/samples/images/ActionBarCompat1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/ActionBarCompat2.png b/docs/html/resources/samples/images/ActionBarCompat2.png
new file mode 100644
index 0000000..04a7e6c
--- /dev/null
+++ b/docs/html/resources/samples/images/ActionBarCompat2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/WifiDirect.png b/docs/html/resources/samples/images/WifiDirect.png
new file mode 100644
index 0000000..86f7f2f
--- /dev/null
+++ b/docs/html/resources/samples/images/WifiDirect.png
Binary files differ
diff --git a/docs/html/resources/tutorials/notepad/notepad-ex2.jd b/docs/html/resources/tutorials/notepad/notepad-ex2.jd
index 499b796..7e3288f1 100644
--- a/docs/html/resources/tutorials/notepad/notepad-ex2.jd
+++ b/docs/html/resources/tutorials/notepad/notepad-ex2.jd
@@ -299,7 +299,8 @@
in real Android applications.</p>
<p>Creating a
good UI is part art and part science, and the rest is work. Mastery of <a
- href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a> is an essential part of creating
+ href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> is an essential part of
+creating
a good looking Android application.</p>
<p>Take a look at the
<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>
diff --git a/docs/html/sdk/android-3.2.jd b/docs/html/sdk/android-3.2.jd
index ea2b4ed..aeaf9c8 100644
--- a/docs/html/sdk/android-3.2.jd
+++ b/docs/html/sdk/android-3.2.jd
@@ -550,7 +550,11 @@
<p>A typical application that functions properly in both landscape and portrait orientations would not normally need to declare an orientation requirement. Rather, an application designed primarily for one orientation, such as an app designed for a television, could declare one of the constants to ensure that it isn't available to devices that don't provide that orientation.</p>
-<p>If the application is targeting API level 12 or lower, the platform assumes that if app has not specified whether it requires portrait or landscape, both orientations are required.</p>
+<p>If any of activities declared in the manifest request that they run in a specific orientation,
+using the <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
+android:screenOrientation}</a> attribute, then this also declares that the application
+requires that orientation.</p>
+
</li>
<li>Other feature constants
diff --git a/docs/html/sdk/android-4.0.jd b/docs/html/sdk/android-4.0.jd
new file mode 100644
index 0000000..8f7ac55
--- /dev/null
+++ b/docs/html/sdk/android-4.0.jd
@@ -0,0 +1,1740 @@
+page.title=Android 4.0 Platform
+sdk.platform.version=4.0
+sdk.platform.apiLevel=14
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+ <li><a href="#relnotes">Revisions</a></li>
+ <li><a href="#api">API Overview</a></li>
+ <li><a href="#api-diff">API Differences Report</a></li>
+ <li><a href="#api-level">API Level</a></li>
+ <li><a href="#apps">Built-in Applications</a></li>
+ <li><a href="#locs">Locales</a></li>
+ <li><a href="#skins">Emulator Skins</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/14/changes.html">API
+Differences Report »</a> </li>
+</ol>
+
+</div>
+</div>
+
+
+<p><em>API Level:</em> <strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android 4.0 (Ice Cream Sandwich) is a major platform release that adds new
+capabilities for users and developers. The sections below provide an overview
+of the new features and developer APIs.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. The downloadable platform includes no external libraries.</p>
+
+<p>To start developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK. For more
+information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
+Components</a>. If you are new to Android, <a
+href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
+
+<p>For a high-level introduction to the new user and developer features in Android 4.0, see the
+<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform Highlights</a>.</p>
+
+<p class="note"><strong>Reminder:</strong> If you've already published an
+Android application, please test your application on Android {@sdkPlatformVersion} as
+soon as possible to be sure your application provides the best
+experience possible on the latest Android-powered devices.</p>
+
+
+<h2 id="relnotes">Revisions</h2>
+
+<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
+have installed, refer to the "Installed Packages" listing in the Android SDK Manager.</p>
+
+
+<div class="toggle-content opened" style="padding-left:1em;">
+
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-opened.png"
+class="toggle-content-img" alt="" />
+ Android {@sdkPlatformVersion}, Revision 1</a> <em>(October 2011)</em>
+ </a></p>
+
+ <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Initial release. SDK Tools r14 or higher is recommended.</dt>
+</dl>
+
+ </div>
+</div>
+
+
+<h2 id="api">API Overview</h2>
+
+<p>The sections below provide a technical overview of new APIs in Android 4.0.</p>
+
+<div class="toggle-content closed" style="padding-left:1em;">
+
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png"
+class="toggle-content-img" alt="" />
+ <strong>Table of Contents</strong>
+ </a></p>
+
+ <div class="toggle-content-toggleme" style="padding-left:2em;">
+ <ol class="toc" style="margin-left:-1em">
+ <li><a href="#Contacts">Contacts</a></li>
+ <li><a href="#Calendar">Calendar</a></li>
+ <li><a href="#Camera">Camera</a></li>
+ <li><a href="#Multimedia">Multimedia</a></li>
+ <li><a href="#Bluetooth">Bluetooth</a></li>
+ <li><a href="#AndroidBeam">Android Beam (NDEF Push with NFC)</a></li>
+ <li><a href="#P2pWiFi">Peer-to-peer Wi-Fi</a></li>
+ <li><a href="#NetworkData">Network Data</a></li>
+ <li><a href="#Sensors">Device Sensors</a></li>
+ <li><a href="#Renderscript">Renderscript</a></li>
+ <li><a href="#A11y">Accessibility</a></li>
+ <li><a href="#Enterprise">Enterprise</a></li>
+ <li><a href="#Voicemail">Voicemail</a></li>
+ <li><a href="#SpellChecker">Spell Checker Services</a></li>
+ <li><a href="#TTS">Text-to-speech Engines</a></li>
+ <li><a href="#ActionBar">Action Bar</a></li>
+ <li><a href="#UI">User Interface and Views</a></li>
+ <li><a href="#Properties">Properties</a></li>
+ <li><a href="#HwAccel">Hardware Acceleration</a></li>
+ <li><a href="#Jni">JNI Changes</a></li>
+ <li><a href="#WebKit">WebKit</a></li>
+ <li><a href="#Permissions">Permissions</a></li>
+ <li><a href="#DeviceFeatures">Device Features</a></li>
+ </ol>
+ </div>
+</div>
+
+
+
+
+
+<h3 id="Contacts">Contacts</h3>
+
+<p>The Contact APIs that are defined by the {@link android.provider.ContactsContract} provider have
+been extended to support new features such as a personal profile for the device owner, large contact
+photos, and the ability for users to invite individual contacts to social networks that are
+installed on the device.</p>
+
+
+<h4>User Profile</h4>
+
+<p>Android now includes a personal profile that represents the device owner, as defined by the
+{@link
+android.provider.ContactsContract.Profile} table. Social apps that maintain a user identity can
+contribute to the user's profile data by creating a new {@link
+android.provider.ContactsContract.RawContacts} entry within the {@link
+android.provider.ContactsContract.Profile}. That is, raw contacts that represent the device user do
+not belong in the traditional raw contacts table defined by the {@link
+android.provider.ContactsContract.RawContacts} Uri; instead, you must add a profile raw contact in
+the table at {@link android.provider.ContactsContract.Profile#CONTENT_RAW_CONTACTS_URI}. Raw
+contacts in this table are then aggregated into the single user-visible profile information.</p>
+
+<p>Adding a new raw contact for the profile requires the {@link
+android.Manifest.permission#WRITE_PROFILE} permission. Likewise, in order to read from the profile
+table, you must request the {@link android.Manifest.permission#READ_PROFILE} permission. However,
+reading the user profile should not be required by most apps, even when contributing data to the
+profile. Reading the user profile is a sensitive permission and users will be very skeptical of apps
+that request reading their profile information.</p>
+
+<h4>Large photos</h4>
+
+<p>Android now supports high resolution photos for contacts. Now, when you push a photo into a
+contact
+record, the system processes it into both a 96x96 thumbnail (as it has previously) and a 256x256
+"display photo" stored in a new file-based photo store (the exact dimensions that the system chooses
+may vary in the future). You can add a large photo to a contact by putting a large photo in the
+usual {@link android.provider.ContactsContract.CommonDataKinds.Photo#PHOTO} column of a data row,
+which the system will then process into the appropriate thumbnail and display photo records.</p>
+
+<h4>Invite Intent</h4>
+
+<p>The {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent action allows you to
+invoke an action that indicates the user wants to add a contact to a social network that understand
+this intent and use it to invite the contact specified in the contact to that social network.</p>
+
+<p>Apps that use a sync adapter to provide information about contacts can register with the system
+to
+receive the invite intent when there’s an opportunity for the user to “invite” a contact to the
+app’s social network (such as from a contact card in the People app). To receive the invite intent,
+you simply need to add the {@code inviteContactActivity} attribute to your app’s XML sync
+configuration file, providing a fully-qualified name of the activity that the system should start
+when the user wants to “invite” a contact in your social network. The activity that starts can then
+retrieve the URI for the contact in question from the intent’s data and perform the necessary work
+to
+invite that contact to the network or add the person to the user’s connections.</p>
+
+<h4>Contact Usage Feedback</h4>
+
+<p>The new {@link android.provider.ContactsContract.DataUsageFeedback} APIs allow you to help track
+how often the user uses particular methods of contacting people, such as how often the user uses
+each phone number or e-mail address. This information helps improve the ranking for each contact
+method associated with each person and provide such contact methods as suggestions.</p>
+
+
+
+
+
+<h3 id="Calendar">Calendar</h3>
+
+<p>The new calendar API allows you to access and modify the user’s calendars and events. The
+calendar
+APIs are provided with the {@link android.provider.CalendarContract} provider. Using the calendar
+provider, you can:</p>
+<ul>
+<li>Read, write, and modify calendars.</li>
+<li>Add and modify events, attendees, reminders, and alarms.</li>
+</ul>
+
+<p>{@link android.provider.CalendarContract} defines the data model of calendar and event-related
+information. All of the user’s calendar data is stored in a number of tables defined by subclasses
+of {@link android.provider.CalendarContract}:</p>
+
+<ul>
+<li>The {@link android.provider.CalendarContract.Calendars} table holds the calendar-specific
+information. Each row in this table contains the details for a single calendar, such as the name,
+color, sync information, and so on.</li>
+
+<li>The {@link android.provider.CalendarContract.Events} table holds event-specific information.
+Each
+row in this table has the information for a single event. It contains information such as event
+title, location, start time, end time, and so on. The event can occur one-time or can recur multiple
+times. Attendees, reminders, and extended properties are stored in separate tables and reference the
+event’s _ID to link them with the event.</li>
+
+<li>The {@link android.provider.CalendarContract.Instances} table holds the start and end time for
+occurrences of an event. Each row in this table represents a single occurrence. For one-time events
+there is a one-to-one mapping of instances to events. For recurring events, multiple rows are
+automatically generated to correspond to the multiple occurrences of that event.</li>
+
+<li>The {@link android.provider.CalendarContract.Attendees} table holds the event attendee or guest
+information. Each row represents a single guest of an event. It specifies the type of guest the
+person is and the person’s attendance response for the event.</li>
+
+<li>The {@link android.provider.CalendarContract.Reminders} table holds the alert/notification data.
+Each row represents a single alert for an event. An event can have multiple reminders. The number of
+reminders per event is specified in MAX_REMINDERS, which is set by the Sync Adapter that owns the
+given calendar. Reminders are specified in minutes before the event and have a type.</li>
+
+<li>The {@link android.provider.CalendarContract.ExtendedProperties} table hold opaque data fields
+used
+by the sync adapter. The provider takes no action with items in this table except to delete them
+when their related events are deleted.</li>
+</ul>
+
+<p>To access a user’s calendar data with the calendar provider, your application must request
+permission from the user by declaring <uses-permission
+android:name="android.permission.READ_CALENDAR" /> (for read access) and <uses-permission
+android:name="android.permission.WRITE_CALENDAR" /> (for write access) in their manifest files.</p>
+
+<p>However, if all you want to do is add an event to the user’s calendar, you can instead use an
+INSERT
+{@link android.content.Intent} to start an activity in the Calendar app that creates new events.
+Using the intent does not require the WRITE_CALENDAR permission and you can specify the {@link
+android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME} and {@link
+android.provider.CalendarContract#EXTRA_EVENT_END_TIME} extra fields to pre-populate the form with
+the time of the event. The values for these times must be in milliseconds from the epoch. You must
+also specify {@code “vnd.android.cursor.item/event”} as the intent type.</p>
+
+
+
+
+
+<h3 id="Camera">Camera</h3>
+
+<p>The {@link android.hardware.Camera} APIs now support face detection and control for metering and
+focus areas.</p>
+
+<h4>Face Detection</h4>
+
+<p>Camera apps can now enhance their abilities with Android’s face detection software, which not
+only
+detects the face of a subject, but also specific facial features, such as the eyes and mouth. </p>
+
+<p>To detect faces in your camera application, you must register a {@link
+android.hardware.Camera.FaceDetectionListener} by calling {@link
+android.hardware.Camera#setFaceDetectionListener setFaceDetectionListener()}. You can then start
+your camera surface and start detecting faces by calling {@link
+android.hardware.Camera#startFaceDetection}.</p>
+
+<p>When the system detects a face, it calls the {@link
+android.hardware.Camera.FaceDetectionListener#onFaceDetection onFaceDetection()} callback in your
+implementation of {@link android.hardware.Camera.FaceDetectionListener}, including an array of
+{@link android.hardware.Camera.Face} objects.</p>
+
+<p>An instance of the {@link android.hardware.Camera.Face} class provides various information about
+the
+face detected by the camera, including:</p>
+<ul>
+<li>A {@link android.graphics.Rect} that specifies the bounds of the face, relative to the camera's
+current field of view</li>
+<li>An integer betwen 0 and 100 that indicates how confident the system is that the object is a
+human
+face</li>
+<li>A unique ID so you can track multiple faces</li>
+<li>Several {@link android.graphics.Point} objects that indicate where the eyes and mouth are
+located</li>
+</ul>
+
+
+<h4>Focus and Metering Areas</h4>
+
+<p>Camera apps can now control the areas that the camera uses for focus and when metering white
+balance
+and auto-exposure (when supported by the hardware). Both features use the new {@link
+android.hardware.Camera.Area} class to specify the region of the camera’s current view that should
+be focused or metered. An instance of the {@link android.hardware.Camera.Area} class defines the
+bounds of the area with a {@link android.graphics.Rect} and the weight of the
+area—representing the level of importance of that area, relative to other areas in
+consideration—with an integer.</p>
+
+<p>Before setting either a focus area or metering area, you should first call {@link
+android.hardware.Camera.Parameters#getMaxNumFocusAreas} or {@link
+android.hardware.Camera.Parameters#getMaxNumMeteringAreas}, respectively. If these return zero, then
+the device does not support the respective feature. </p>
+
+<p>To specify the focus or metering areas to use, simply call {@link
+android.hardware.Camera.Parameters#setFocusAreas setFocusAreas()} or {@link
+android.hardware.Camera.Parameters#setFocusAreas setMeteringAreas()}. Each take a {@link
+java.util.List} of {@link android.hardware.Camera.Area} objects that indicate the areas to consider
+for focus or metering. For example, you might implement a feature that allows the user to set the
+focus area by touching an area of the preview, which you then translate to an {@link
+android.hardware.Camera.Area} object and set the focus to that spot. The focus or exposure in that
+area will continually update as the scene in the area changes.</p>
+
+
+<h4>Other Camera Features</h4>
+<ul>
+<li>Capture photos during video recording
+While recording video, you can now call {@link android.hardware.Camera#takePicture takePicture()} to
+save a photo without interrupting the video session. Before doing so, you should call {@link
+android.hardware.Camera.Parameters#isVideoSnapshotSupported} to be sure the hardware supports
+it.</li>
+
+<li>Lock auto exposure and white balance with {@link
+android.hardware.Camera.Parameters#setAutoExposureLock setAutoExposureLock()} and {@link
+android.hardware.Camera.Parameters#setAutoWhiteBalanceLock setAutoWhiteBalanceLock()}, to prevent
+these properties from changing.</li>
+</ul>
+
+<h4>Camera Broadcast Intents</h4>
+
+<ul>
+<li>{@link android.hardware.Camera#ACTION_NEW_PICTURE Camera.ACTION_NEW_PICTURE}
+This indicates that the user has captured a new photo. The built-in camera app invokes this
+broadcast after a photo is captured and third-party camera apps should also broadcast this intent
+after capturing a photo.</li>
+<li>{@link android.hardware.Camera#ACTION_NEW_VIDEO Camera.ACTION_NEW_VIDEO}
+This indicates that the user has captured a new video. The built-in camera app invokes this
+broadcast after a video is recorded and third-party camera apps should also broadcast this intent
+after capturing a video.</li>
+</ul>
+
+
+
+
+
+<h3 id="Multimedia">Multimedia</h3>
+
+<p>Android 4.0 adds several new APIs for applications that interact with media such as photos,
+videos,
+and music.</p>
+
+
+<h4>Media Player</h4>
+
+<ul>
+<li>Streaming online media from {@link android.media.MediaPlayer} now requires {@link
+android.Manifest.permission#INTERNET} permission. If you use {@link android.media.MediaPlayer} to
+play content from the internet, be sure to add the {@link android.Manifest.permission#INTERNET}
+permission or else your media playback will not work beginning with Android 4.0.</li>
+<li>{@link android.media.MediaPlayer#setSurface(Surface) setSurface()} allows you define a {@link
+android.view.Surface} to behave as the video sink.</li>
+<li>{@link android.media.MediaPlayer#setDataSource(Context,Uri,Map) setDataSource()} allows you to
+send additional HTTP headers with your request, which can be useful for HTTP(S) live streaming</li>
+<li>HTTP(S) live streaming now respects HTTP cookies across requests</li>
+</ul>
+
+<h4>Media Type Support</h4>
+
+<p>Android 4.0 adds support for:</p>
+<ul>
+<li>HTTP/HTTPS live streaming protocol version 3 </li>
+<li>ADTS raw AAC audio encoding</li>
+<li>WEBP images</li>
+<li>Matroska video</li>
+</ul>
+<p>For more info, see <a href=”{@docRoot}guide/appendix/media-formats.html”>Supported Media
+Formats</a>.</p>
+
+
+<h4>Remote Control Client</h4>
+
+<p>The new {@link android.media.RemoteControlClient} allows media players to enable playback
+controls
+from remote control clients such as the device lock screen. Media players can also expose
+information about the media currently playing for display on the remote control, such as track
+information and album art.</p>
+
+<p>To enable remote control clients for your media player, instantiate a {@link
+android.media.RemoteControlClient} with a {@link android.app.PendingIntent} that broadcasts {@link
+android.content.Intent#ACTION_MEDIA_BUTTON}. The intent must also declare the explicit {@link
+android.content.BroadcastReceiver} component in your app that handles the {@link
+android.content.Intent#ACTION_MEDIA_BUTTON} event.</p>
+
+<p>To declare which media control inputs your player can handle, you must call {@link
+android.media.RemoteControlClient#setTransportControlFlags setTransportControlFlags()} on your
+{@link android.media.RemoteControlClient}, passing a set of {@code FLAG_KEY_MEDIA_*} flags, such as
+{@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PREVIOUS} and {@link
+android.media.RemoteControlClient#FLAG_KEY_MEDIA_NEXT}.</p>
+
+<p>You must then register your {@link android.media.RemoteControlClient} by passing it to {@link
+android.media.AudioManager#registerRemoteControlClient MediaManager.registerRemoteControlClient()}.
+Once registered, the broadcast receiver you declared when you instantiated the {@link
+android.media.RemoteControlClient} will receive {@link android.content.Intent#ACTION_MEDIA_BUTTON}
+events when a button is pressed from a remote control. The intent you receive includes the {@link
+android.view.KeyEvent} for the media key pressed, which you can retrieve from the intent with {@link
+android.content.Intent#getParcelableExtra getParcelableExtra(Intent.EXTRA_KEY_EVENT)}.</p>
+
+<p>To display information on the remote control about the media playing, call {@link
+android.media.RemoteControlClient#editMetadata editMetaData()} and add metadata to the returned
+{@link android.media.RemoteControlClient.MetadataEditor}. You can supply a bitmap for media artwork,
+numerical information such as elapsed time, and text information such as the track title. For
+information on available keys see the {@code METADATA_KEY_*} flags in {@link
+android.media.MediaMetadataRetriever}.</p>
+
+<p>For a sample implementation, see the <a
+href=”{@docRoot}resources/samples/RandomMusicPlayer/index.html”>Random Music Player</a>, which
+provides compatibility logic such that it enables the remote control client while continuing to
+support Android 2.1 devices.</p>
+
+
+<h4>Media Effects</h4>
+
+<p>A new media effects framework allows you to apply a variety of visual effects to images and
+videos.
+The system performs all effects processing on the GPU to obtain maximum performance. Applications in
+Android 4.0 such as Google Talk or the Gallery editor make use of the effects API to apply real-time
+effects to video and photos.</p>
+
+<p>For maximum performance, effects are applied directly to OpenGL textures, so your application
+must
+have a valid OpenGL context before it can use the effects APIs. The textures to which you apply
+effects may be from bitmaps, videos or even the camera. However, there are certain restrictions that
+textures must meet:</p>
+<ol>
+<li>They must be bound to a {@link android.opengl.GLES20#GL_TEXTURE_2D} texture image</li>
+<li>They must contain at least one mipmap level</li>
+</ol>
+
+<p>An {@link android.media.effect.Effect} object defines a single media effect that you can apply to
+an
+image frame. The basic workflow to create an {@link android.media.effect.Effect} is:</p>
+
+<ol>
+<li>Call {@link android.media.effect.EffectContext#createWithCurrentGlContext
+EffectContext.createWithCurrentGlContext()} from your OpenGL ES 2.0 context.</li>
+<li>Use the returned {@link android.media.effect.EffectContext} to call {@link
+android.media.effect.EffectContext#getFactory EffectContext.getFactory()}, which returns an instance
+of {@link android.media.effect.EffectFactory}.</li>
+<li>Call {@link android.media.effect.EffectFactory#createEffect createEffect()}, passing it an
+effect
+name from @link android.media.effect.EffectFactory}, such as {@link
+android.media.effect.EffectFactory#EFFECT_FISHEYE} or {@link
+android.media.effect.EffectFactory#EFFECT_VIGNETTE}.</li>
+</ol>
+
+<p>Not all devices support all effects, so you must first check if the desired effect is supported
+by
+calling {@link android.media.effect.EffectFactory#isEffectSupported isEffectSupported()}.</p>
+
+<p>You can adjust the effect’s parameters by calling {@link android.media.effect.Effect#setParameter
+setParameter()} and passing a parameter name and parameter value. Each type of effect accepts
+different parameters, which are documented with the effect name. For example, {@link
+android.media.effect.EffectFactory#EFFECT_FISHEYE} has one parameter for the {@code scale} of the
+distortion.</p>
+
+<p>To apply an effect on a texture, call {@link android.media.effect.Effect#apply apply()} on the
+{@link
+android.media.effect.Effect} and pass in the input texture, it’s width and height, and the output
+texture. The input texture must be bound to a {@link android.opengl.GLES20#GL_TEXTURE_2D} texture
+image (usually done by calling the {@link android.opengl.GLES20#glTexImage2D glTexImage2D()}
+function). You may provide multiple mipmap levels. If the output texture has not been bound to a
+texture image, it will be automatically bound by the effect as a {@link
+android.opengl.GLES20#GL_TEXTURE_2D}. It will contain one mipmap level (0), which will have the same
+size as the input.</p>
+
+
+
+
+
+
+
+<h3 id="Bluetooth">Bluetooth</h3>
+
+<p>Android now supports Bluetooth Health Profile devices, so you can create applications that use
+Bluetooth to communicate with health devices that support Bluetooth, such as heart-rate monitors,
+blood meters, thermometers, and scales.</p>
+
+<p>Similar to regular headset and A2DP profile devices, you must call {@link
+android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with a {@link
+android.bluetooth.BluetoothProfile.ServiceListener} and the {@link
+android.bluetooth.BluetoothProfile#HEALTH} profile type to establish a connection with the profile
+proxy object.</p>
+
+<p>Once you’ve acquired the Health profile proxy (the {@link android.bluetooth.BluetoothHealth}
+object), connecting to and communicating with paired health devices involves the following new
+Bluetooth classes:</p>
+<ul>
+<li>{@link android.bluetooth.BluetoothHealthCallback}: You must extend this class and implement the
+callback methods to receive updates about changes in the application’s registration state and
+Bluetooth channel state.</li>
+<li>{@link android.bluetooth.BluetoothHealthAppConfiguration}: During callbacks to your {@link
+android.bluetooth.BluetoothHealthCallback}, you’ll receive an instance of this object, which
+provides configuration information about the available Bluetooth health device, which you must use
+to perform various operations such as initiate and terminate connections with the {@link
+android.bluetooth.BluetoothHealth} APIs.</li>
+</ul>
+
+<p>For more information about using the Bluetooth Health profile, see the documentation for {@link
+android.bluetooth.BluetoothHealth}.</p>
+
+
+<h3 id="AndroidBeam">Android Beam (NDEF Push with NFC)</h3>
+
+<p>Android Beam allows you to send NDEF messages (an NFC standard for data stored on NFC tags) from
+one
+device to another (a process also known as “NDEF Push”). The data transfer is initiated when two
+Android-powered devices that support Android Beam are in close proximity (about 4 cm), usually with
+their backs touching. The data inside the NDEF message can contain any data that you wish to share
+between devices. For example, the People app shares contacts, YouTube shares videos, and Browser
+shares URLs using Android Beam.</p>
+
+<p>To transmit data between devices using Android Beam, you need to create an {@link
+android.nfc.NdefMessage} that contains the information you want to share while your activity is in
+the foreground. You must then pass the
+{@link android.nfc.NdefMessage} to the system in one of two ways:</p>
+
+<ul>
+<li>Define a single {@link android.nfc.NdefMessage} to use from the activity:
+<p>Call {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} at any time to set
+the
+message you want to send. For instance, you might call this method and pass it your {@link
+android.nfc.NdefMessage} during your activity’s {@link android.app.Activity#onCreate onCreate()}
+method. Then, whenever Android Beam is activated with another device while your activity is in the
+foreground, the system sends that {@link android.nfc.NdefMessage} to the other device.</p></li>
+
+<li>Define the {@link android.nfc.NdefMessage} depending on the current context:
+<p>Implement {@link android.nfc.NfcAdapter.CreateNdefMessageCallback}, in which the {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()} callback
+method returns the {@link android.nfc.NdefMessage} you want to send. Then pass the {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback} to {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}. In this case, when
+Android Beam is activated with another device while your activity is in the foreground, the system
+calls {@link android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
+to retrieve the {@link android.nfc.NdefMessage} you want to send. This allows you to create a
+different {@link android.nfc.NdefMessage} for each occurrence, depending on the user context (such
+as which contact in the People app is currently visible).</p></li>
+</ul>
+
+<p>In case you want to run some specific code once the system has successfully delivered your NDEF
+message to the other device, you can implement {@link
+android.nfc.NfcAdapter.OnNdefPushCompleteCallback} and set it with {@link
+android.nfc.NfcAdapter#setOnNdefPushCompleteCallback setNdefPushCompleteCallback()}. The system will
+then call {@link android.nfc.NfcAdapter.OnNdefPushCompleteCallback#onNdefPushComplete
+onNdefPushComplete()} when the message is delivered.</p>
+
+<p>On the receiving device, the system dispatches NDEF Push messages in a similar way to regular NFC
+tags. The system invokes an intent with the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+action to start an activity, with either a URL or a MIME type set according to the first {@link
+android.nfc.NdefRecord} in the {@link android.nfc.NdefMessage}. For the activity you want to
+respond, you can set intent filters for the URLs or MIME types your app cares about. For more
+information about Tag Dispatch see the <a
+href=”{@docRoot}guide/topics/nfc/index.html#dispatch”>NFC</a> developer guide.</p>
+
+<p>If you want your {@link android.nfc.NdefMessage} to carry a URI, you can now use the convenience
+method {@link android.nfc.NdefRecord#createUri createUri} to construct a new {@link
+android.nfc.NdefRecord} based on either a string or a {@link android.net.Uri} object. If the URI is
+a special format that you want your application to also receive during an Android Beam event, you
+should create an intent filter for your activity using the same URI scheme in order to receive the
+incoming NDEF message.</p>
+
+<p>You may also want to pass an “Android application record” with your {@link
+android.nfc.NdefMessage}
+in order to guarantee a specific application handles an NDEF message, regardless of whether other
+applications filter for the same intent. You can create an Android application record by calling
+{@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}, passing it the
+application’s package name. When the other device receives the NDEF message with this record, the
+system automatically starts the application matching the package name. If the target device does not
+currently have the application installed, the system uses the Android application record to launch
+Android Market and take the user to the application to install it.</p>
+
+<p>If your application doesn’t use NFC APIs to perform NDEF Push messaging, then Android provides a
+default behavior: When your application is in the foreground on one device and Android Beam is
+invoked with another Android-powered device, then the other device receives an NDEF message with an
+Android application record that identifies your application. If the receiving device has the
+application installed, the system launches it; if it’s not installed, Android Market opens and takes
+the user to your application so they can install it.</p>
+
+
+
+
+
+<h3 id="P2pWiFi">Peer-to-peer Wi-Fi</h3>
+
+<p>Android now supports Wi-Fi Direct™ for peer-to-peer (P2P) connections between
+Android-powered
+devices and other device types without a hotspot or Internet connection. The Android framework
+provides a set of Wi-Fi P2P APIs that allow you to discover and connect to other devices when each
+device supports Wi-Fi Direct™, then communicate over a speedy connection across distances much
+longer than a Bluetooth connection.</p>
+
+<p>A new package, {@link android.net.wifi.p2p}, contains all the APIs for performing peer-to-peer
+connections with Wi-Fi. The primary class you need to work with is {@link
+android.net.wifi.p2p.WifiP2pManager}, for which you can get an instance by calling {@link
+android.app.Activity#getSystemService getSystemService(WIFI_P2P_SERVICE)}. The {@link
+android.net.wifi.p2p.WifiP2pManager} provides methods that allow you to:</p>
+<ul>
+<li>Initialize your application for P2P connections by calling {@link
+android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</li>
+<li>Discover nearby devices by calling {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers
+discoverPeers()}</li>
+<li>Start a P2P connection by calling {@link android.net.wifi.p2p.WifiP2pManager#connect
+connect()}</li>
+<li>And more</li>
+</ul>
+
+<p>Several other interfaces and classes are necessary as well, such as:</p>
+<ul>
+<li>The {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} interface allows you to receive
+callbacks when an operation such as discovering peers or connecting to them succeeds or fails.</li>
+<li>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface allows you to receive
+information about discovered peers. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pDeviceList}, from which you can retrieve a {@link
+android.net.wifi.p2p.WifiP2pDevice} object for each device within range and get information such as
+the device name, address, device type, the WPS configurations the device supports, and more.</li>
+<li>The {@link android.net.wifi.p2p.WifiP2pManager.GroupInfoListener} interface allows you to
+receive
+information about a P2P group. The callback provides a {@link android.net.wifi.p2p.WifiP2pGroup}
+object, which provides group information such as the owner, the network name, and passphrase.</li>
+<li>{@link android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener} interface allows you to
+receive
+information about the current connection. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pInfo} object, which has information such as whether a group has been
+formed and who is the group owner.</li>
+</ul>
+
+<p>In order to use the Wi-Fi P2P APIs, your app must request the following user permissions:</p>
+<ul>
+<li>{@link android.Manifest.permission#ACCESS_WIFI_STATE}</li>
+<li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li>
+<li>{@link android.Manifest.permission#INTERNET} (even though your app doesn’t technically connect
+to
+the Internet, the WiFi Direct implementation uses traditional sockets that do require Internet
+permission to work).</li>
+</ul>
+
+<p>The Android system also broadcasts several different actions during certain Wi-Fi P2P events:</p>
+<ul>
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_CONNECTION_CHANGED_ACTION}: The P2P
+connection
+state has changed. This carries {@link android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_P2P_INFO} with
+a {@link android.net.wifi.p2p.WifiP2pInfo} object and {@link
+android.net.wifi.p2p.WifiP2pManager#EXTRA_NETWORK_INFO} with a {@link android.net.NetworkInfo}
+object.</li>
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_CHANGED_ACTION}: The P2P state has
+changed
+between enabled and disabled. It carries {@link
+android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_STATE} with either {@link
+android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_DISABLED} or {@link
+android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_ENABLED}</li>
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION}: The list of peer
+devices
+has changed.</li>
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_THIS_DEVICE_CHANGED_ACTION}: The details for
+this device have changed.</li>
+</ul>
+
+<p>See the {@link android.net.wifi.p2p.WifiP2pManager} documentation for more information. Also
+look
+at the <a href=”{@docRoot}resources/samples/WiFiDirectDemo/index.html”>Wi-Fi Direct</a> sample
+application for example code.</p>
+
+
+
+
+
+<h3 id="NetworkData">Network Data</h3>
+
+<p>Android 4.0 gives users precise visibility of how much network data applications are using. The
+Settings app provides controls that allow users to manage set limits for network data usage and even
+disable the use of background data for individual apps. In order to avoid users disabling your app’s
+access to data from the background, you should develop strategies to use use the data connection
+efficiently and vary your usage depending on the type of connection available.</p>
+
+<p>If your application performs a lot of network transactions, you should provide user settings that
+allow users to control your app’s data habits, such as how often your app syncs data, whether to
+perform uploads/downloads only when on Wi-Fi, whether to use data while roaming, etc. With these
+controls available to them, users are much less likely to disable your app’s access to data when
+they approach their limits, because they can instead precisely control how much data your app uses.
+When you provide an activity with these settings, you should include in its manifest declaration an
+intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action. For
+example:</p>
+
+<pre>
+<activity android:name="DataPreferences" android:label="@string/title_preferences">
+ <intent-filter>
+ <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+</activity>
+</pre>
+
+<p>This intent filter indicates to the system that this is the application that controls your
+application’s data usage. Thus, when the user inspects how much data your app is using from the
+Settings app, a “View application settings” button is available that launches your activity so the
+user can refine how much data your app uses.</p>
+
+<p>Also beware that {@link android.net.ConnectivityManager#getBackgroundDataSetting()} is now
+deprecated and always returns true—use {@link
+android.net.ConnectivityManager#getActiveNetworkInfo()} instead. Before you attempt any network
+transactions, you should always call {@link android.net.ConnectivityManager#getActiveNetworkInfo()}
+to get the {@link android.net.NetworkInfo} that represents the current network and query {@link
+android.net.NetworkInfo#isConnected()} to check whether the device has a
+connection. You can then check various other connection properties, such as whether the device is
+roaming or connected to Wi-Fi.</p>
+
+
+
+
+
+
+
+<h3 id="Sensors">Device Sensors</h3>
+
+<p>Two new sensor types have been added in Android 4.0: {@link
+android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and {@link
+android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}. </p>
+
+<p>{@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} is a temperature sensor that provides
+the ambient (room) temperature near a device. This sensor reports data in degrees Celsius. {@link
+android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} is a humidity sensor that provides the relative
+ambient (room) humidity. The sensor reports data as a percentage. If a device has both {@link
+android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and {@link
+android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} sensors, you can use them to calculate the dew point
+and the absolute humidity.</p>
+
+<p>The existing temperature sensor ({@link android.hardware.Sensor#TYPE_TEMPERATURE}) has been
+deprecated. You should use the {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} sensor
+instead.</p>
+
+<p>Additionally, Android’s three synthetic sensors have been improved so they now have lower latency
+and smoother output. These sensors include the gravity sensor ({@link
+android.hardware.Sensor#TYPE_GRAVITY}), rotation vector sensor ({@link
+android.hardware.Sensor#TYPE_ROTATION_VECTOR}), and linear acceleration sensor ({@link
+android.hardware.Sensor#TYPE_LINEAR_ACCELERATION}). The improved sensors rely on the gyroscope
+sensor to improve their output so the sensors appear only on devices that have a gyroscope. If a
+device already provides one of the sensors, then that sensor appears as a second sensor on the
+device. The three improved sensors have a version number of 2.</p>
+
+
+
+
+
+
+
+
+<h3 id="Renderscript">Renderscript</h3>
+
+<p>Three major features have been added to Renderscript:</p>
+
+<ul>
+ <li>Off-screen rendering to a framebuffer object</li>
+ <li>Rendering inside a view</li>
+ <li>RS for each from the framework APIs</li>
+</ul>
+
+<p>The {@link android.renderscript.Allocation} class now supports a {@link
+android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} memory space, which allows you to
+render things directly into the {@link android.renderscript.Allocation} and use it as a framebuffer
+object. </p>
+
+<p>{@link android.renderscript.RSTextureView} provides a means to display Renderscript graphics
+inside
+of a normal View, unlike {@link android.renderscript.RSSurfaceView}, which creates a separate
+window. This key difference allows you to do things such as move, transform, or animate an {@link
+android.renderscript.RSTextureView} as well as draw Renderscript graphics inside the View alongside
+other traditional View widgets.</p>
+
+<p>The {@link android.renderscript.Script#forEach forEach()} method allows you to call Renderscript
+compute scripts from the VM level and have them automatically delegated to available cores on the
+device. You do not use this method directly, but any compute Renderscript that you write will have a
+{@link android.renderscript.Script#forEach forEach()} method that you can call in the reflected
+Renderscript class. You can call the reflected {@link android.renderscript.Script#forEach forEach()}
+method by passing in an input {@link android.renderscript.Allocation} to process, an output {@link
+android.renderscript.Allocation} to write the result to, and a data structure if the Renderscript
+needs more information in addition to the {@link android.renderscript.Allocation}s to. Only one of
+the {@link android.renderscript.Allocation}s is necessary and the data structure is optional.</p>
+
+
+
+
+
+
+<h3 id="A11y">Accessibility</h3>
+
+<p>Android 4.0 improves accessibility for users with disabilities with the Touch Exploration service
+and provides extended APIs for developers of new accessibility services.</p>
+
+<h4>Touch Exploration</h4>
+
+<p>Users with vision loss can now explore applications by touching areas of the screen and hearing
+voice descriptions of the content. The “Explore by Touch” feature works like a virtual cursor as the
+user drags a finger across the screen.</p>
+
+<p>You don’t have to use any new APIs to enhance touch exploration in your application, because the
+existing {@link android.R.attr#contentDescription android:contentDescription}
+attribute and {@link android.view.View#setContentDescription setContentDescription()} method is all
+you need. Because touch exploration works like a virtual cursor, it allows screen readers to
+identify the descriptive the same way that screen readers can when navigating with a d-pad or
+trackball. So this is a reminder to provide descriptive text for the views in your application,
+especially for {@link android.widget.ImageButton}, {@link android.widget.EditText}, {@link
+android.widget.CheckBox} and other interactive widgets that might not contain text information by
+default.</p>
+
+<h4>Accessibility for Custom Views</h4>
+
+<p>Developers of custom Views, ViewGroups and widgets can make their components compatible with
+accessibility services like Touch Exploration. For custom views and widgets targeted for Android 4.0
+and later, developers should implement the following accessibility API methods in their classes:</p>
+<ul>
+<li>These two methods initiate the accessibility event generation process and must be implemented by
+your custom view class.
+ <ul>
+ <li>{@link android.view.View#sendAccessibilityEvent(int) sendAccessibilityEvent()} If
+accessibility
+ is
+ not enabled, this call has no effect.</li>
+ <li>{@link
+ android.view.View#sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent)
+ sendAccessibilityEventUnchecked()} - This method executes regardless of whether accessibility is
+ enabled or not.</li>
+ </ul>
+</li>
+
+<li>These methods are called in order by the sendAccessibilityEvent methods listed above to collect
+accessibility information about the view, and its child views.
+ <ul>
+ <li>{@link
+ android.view.View#onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent)
+ onInitializeAccessibilityEvent()} - This method collects information about the view. If your
+ application has specific requirements for accessibility, you should extend this method to add that
+ information to the {@link android.view.accessibility.AccessibilityEvent}.</li>
+
+ <li>{@link
+
+android.view.View#dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent)
+ dispatchPopulateAccessibilityEvent()} is called by the framework to request text information for
+ this view and its children. This method calls {@link
+ android.view.View#onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent)
+ onPopulateAccessibilityEvent()} first on the current view and then on its children.</li>
+ </ul>
+</li>
+
+<li>The {@link
+android.view.View#onInitializeAccessibilityNodeInfo onInitializeAccessibilityNodeInfo()} method
+provides additional context information for
+accessibility services. You should implement or override this method to provide improved information
+for accessibility services investigating your custom view.</li>
+
+<li>Custom {@link android.view.ViewGroup} classes should also implement {@link
+android.view.ViewGroup#onRequestSendAccessibilityEvent(android.view.View,
+android.view.accessibility.AccessibilityEvent) onRequestSendAccessibilityEvent()} </li>
+</ul>
+
+<p>Developers who want to maintain compatibility with Android versions prior to 4.0, while still
+providing support for new the accessibility APIs, can use the {@link
+android.view.View#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)
+setAccessibilityDelegate()} method to provide an {@link android.view.View.AccessibilityDelegate}
+containing implementations of the new accessibility API methods while maintaining compatibility with
+prior releases.</p>
+
+
+
+<h4>Accessibility Service APIs</h4>
+
+<p>Accessibility events have been significantly improved to provide better information for
+accessibility services. In particular, events are generated based on view composition, providing
+better context information and allowing accessibility service developers to traverse view
+hierarchies to get additional view information and deal with special cases.</p>
+
+<p>To access additional content information and traverse view hierarchies, accessibility service
+application developers should use the following procedure.</p>
+<ol>
+<li>Upon receiving an {@link android.view.accessibility.AccessibilityEvent} from an application,
+call
+the {@link android.view.accessibility.AccessibilityEvent#getRecord(int)
+AccessibilityEvent.getRecord()} to retrieve new accessibility information about the state of the
+view.</li>
+<li>From the {@link android.view.accessibility.AccessibilityRecord}, call {@link
+android.view.accessibility.AccessibilityRecord#getSource() getSource()} to retrieve a {@link
+android.view.accessibility.AccessibilityNodeInfo} object.</li>
+<li>With the {@link android.view.accessibility.AccessibilityNodeInfo}, call {@link
+android.view.accessibility.AccessibilityNodeInfo#getParent getParent()} or {@link
+android.view.accessibility.AccessibilityNodeInfo#getChild getChild()} to traverse the view
+hierarchy and get additional context information.</li>
+</ol>
+
+<p>In order to retrieve {@link android.view.accessibility.AccessibilityNodeInfo} information, your
+application must request permission to retrieve application window content through a manifest
+declaration that includes a new, separate xml configuration file, which supercedes {@link
+android.accessibilityservice.AccessibilityServiceInfo}. For more information, see {@link
+android.accessibilityservice.AccessibilityService} and {@link
+android.accessibilityservice.AccessibilityService#SERVICE_META_DATA
+AccessibilityService.SERVICE_META_DATA}.</p>
+
+
+
+
+
+
+<h3 id="Enterprise">Enterprise</h3>
+
+<p>Android 4.0 expands the capabilities for enterprise application with the following features.</p>
+
+<h4>VPN Services</h4>
+
+<p>The new {@link android.net.VpnService} allows applications to build their own VPN (Virtual
+Private
+Network), running as a {@link android.app.Service}. A VPN service creates an interface for a virtual
+network with its own address and routing rules and performs all reading and writing with a file
+descriptor.</p>
+
+<p>To create a VPN service, use {@link android.net.VpnService.Builder}, which allows you to specify
+the network address, DNS server, network route, and more. When complete, you can establish the
+interface by calling {@link android.net.VpnService.Builder#establish()}, which returns a {@link
+android.os.ParcelFileDescriptor}. </p>
+
+<p>Because a VPN service can intercept packets, there are security implications. As such, if you
+implement {@link android.net.VpnService}, then your service must require the {@link
+android.Manifest.permission#BIND_VPN_SERVICE} to ensure that only the system can bind to it (only
+the system is granted this permission—apps cannot request it). To then use your VPN service,
+users must manually enable it in the system settings.</p>
+
+
+<h4>Device Restrictions</h4>
+
+<p>Applications that manage the device restrictions can now disable the camera using {@link
+android.app.admin.DevicePolicyManager#setCameraDisabled setCameraDisabled()} and the {@link
+android.app.admin.DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA} property (applied with a {@code
+<disable-camera />} element in the policy configuration file).</p>
+
+
+<h4>Certificate Management</h4>
+
+<p>The new {@link android.security.KeyChain} class provides APIs that allow you to import and access
+certificates and key stores in credential storage. See the {@link android.security.KeyChain}
+documentation for more information.</p>
+
+
+
+
+<h3 id="Voicemail">Voicemail</h3>
+
+<p>A new voicemail APIs allows applications to add voicemails to the system. Because the APIs
+currently
+do not allow third party apps to read all the voicemails from the system, the only third-party apps
+that should use the voicemail APIs are those that have voicemail to deliver to the user. For
+instance, it’s possible that a users have multiple voicemail sources, such as one provided by their
+phone’s service provider and others from VoIP or other alternative services. These kinds of apps can
+use the APIs to add voicemail to the system. The built-in Phone application can then present all
+voicemails to the user with a single list. Although the system’s Phone application is the only
+application that can read all the voicemails, each application that provides voicemails can read
+those that it has added to the system.</p>
+
+<p>The {@link android.provider.VoicemailContract} class defines the content provider for the
+voicemail
+APIs. The subclasses {@link android.provider.VoicemailContract.Voicemails} and {@link
+android.provider.VoicemailContract.Status} provide tables in which the voicemail providers can
+insert voicemail data for storage on the device. For an example of a voicemail provider app, see the
+<a href=”{@docRoot}resources/samples/VoicemailProviderDemo/index.html”>Voicemail Provider
+Demo</a>.</p>
+
+
+
+
+<h3 id="SpellChecker">Spell Checker Services</h3>
+
+<p>The new spell checker framework allows apps to create spell checkers in a manner similar to the
+input method framework. To create a new spell checker, you must override the {@link
+android.service.textservice.SpellCheckerService.Session} class to provide spelling suggestions based
+on text provided by the interface callback methods, returning suggestions as a {@link
+android.view.textservice.SuggestionsInfo} object. </p>
+
+<p>Applications with a spell checker service must declare the {@link
+android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service, such that
+other services must have this permission in order for them to bind with the spell checker service.
+The service must also declare an intent filter with <action
+android:name="android.service.textservice.SpellCheckerService" /> as the intent’s action and should
+include a {@code <meta-data>} element that declares configuration information for the spell
+checker. </p>
+
+
+
+
+
+<h3 id="TTS">Text-to-speech Engines</h3>
+
+<p>Android’s text-to-speech (TTS) APIs have been greatly extended to allow applications to more
+easily
+implement custom TTS engines, while applications that want to use a TTS engine have a couple new
+APIs for selecting the engine.</p>
+
+
+<h4>Using text-to-speech engines</h4>
+
+<p>In previous versions of Android, you could use the {@link android.speech.tts.TextToSpeech} class
+to
+perform text-to-speech (TTS) operations using the TTS engine provided by the system or set a custom
+engine using {@link android.speech.tts.TextToSpeech#setEngineByPackageName
+setEngineByPackageName()}.
+In Android 4.0, the {@link android.speech.tts.TextToSpeech#setEngineByPackageName
+setEngineByPackageName()} method has been deprecated and you can now specify the engine to use with
+a new {@link android.speech.tts.TextToSpeech} that accepts the package name of a TTS engine.</p>
+
+<p>You can also query the available TTS engines with {@link
+android.speech.tts.TextToSpeech#getEngines()}. This method returns a list of {@link
+android.speech.tts.TextToSpeech.EngineInfo} objects, which include meta data such as the engine’s
+icon, label, and package name.</p>
+
+
+<h4>Building text-to-speech engines</h4>
+
+<p>Previously, custom engines required that the engine be built using native code, based on a TTS
+engine header file. In Android 4.0, there is a framework API for building TTS engines. </p>
+
+<p>The basic setup requires an implementation of {@link android.speech.tts.TextToSpeechService} that
+responds to the {@link android.speech.tts.TextToSpeech.Engine#INTENT_ACTION_TTS_SERVICE} intent. The
+primary work for a TTS engine happens during the {@link
+android.speech.tts.TextToSpeechService#onSynthesizeText onSynthesizeText()} callback in the {@link
+android.speech.tts.TextToSpeechService}. The system delivers this method two objects:</p>
+<ul>
+<li>{@link android.speech.tts.SynthesisRequest}: This contains various data including the text to
+synthesize, the locale, the speech rate, and voice pitch.</li>
+<li>{@link android.speech.tts.SynthesisCallback}: This is the interface by which your TTS engine
+delivers the resulting speech data as streaming audio, by calling {@link
+android.speech.tts.SynthesisCallback#start start()} to indicate that the engine is ready to deliver
+the
+audio, then call {@link android.speech.tts.SynthesisCallback#audioAvailable audioAvailable()},
+passing it the audio
+data in a byte buffer. Once your engine has passed all audio through the buffer, call {@link
+android.speech.tts.SynthesisCallback#done()}.</li>
+</ul>
+
+<p>Now that the framework supports a true API for creating TTS engines, support for the previous
+technique using native code has been removed. Watch for a blog post about the compatibility layer
+that you can use to convert TTS engines built using the previous technique to the new framework.</p>
+
+<p>For an example TTS engine using the new APIs, see the <a
+href=”{@docRoot}resources/samples/TtsEngine/index.html”>Text To Speech Engine</a> sample app.</p>
+
+
+
+
+
+
+
+
+
+
+
+<h3 id="ActionBar">Action Bar</h3>
+
+<p>The {@link android.app.ActionBar} has been updated to support several new behaviors. Most
+importantly, the system gracefully manages the action bar’s size and configuration when running on
+smaller screens in order to provide an optimal user experience. For example, when the screen is
+narrow (such as when a handset is in portrait orientation), the action bar’s navigation tabs appear
+in a “stacked bar,” which appears directly below the main action bar. You can also opt-in to a
+“split action bar,” which will place all action items in a separate bar at the bottom of the screen
+when the screen is narrow.</p>
+
+
+<h4>Split Action Bar</h4>
+
+<p>If your action bar includes several action items, not all of them will fit into the action bar
+when on a narrow screen, so the system will place them into the overflow menu. However, Android 4.0
+allows you to enable “split action bar” so that more action items can appear on the screen in a
+separate bar at the bottom of the screen. To enable split action bar, add {@link
+android.R.attr#uiOptions android:uiOptions} with {@code ”splitActionBarWhenNarrow”} to either your
+{@code <application>} tag or individual {@code <activity>} tags in your manifest file.
+When enabled, the system will enable the additional bar for action items when the screen is narrow
+and add all action items to the new bar (no action items will appear in the primary action bar).</p>
+
+<p>If you want to use the navigation tabs provided by the {@link android.app.ActionBar.Tab} APIs,
+but
+don’t want the stacked bar—you want only the tabs to appear, then enable the split action bar
+as described above and also call {@link android.app.ActionBar#setDisplayShowHomeEnabled
+setDisplayShowHomeEnabled(false)} to disable the application icon in the action bar. With nothing
+left in the main action bar, it disappears—all that’s left are the navigation tabs at the top
+and the action items at the bottom of the screen.</p>
+
+
+<h4>Action Bar Styles</h4>
+
+<p>If you want to apply custom styling to the action bar, you can use new style properties {@link
+android.R.attr#backgroundStacked} and {@link android.R.attr#backgroundSplit} to apply a background
+drawable or color to the stacked bar and split bar, respectively. You can also set these styles at
+runtime with {@link android.app.ActionBar#setStackedBackgroundDrawable
+setStackedBackgroundDrawable()} and {@link android.app.ActionBar#setSplitBackgroundDrawable
+setSplitBackgroundDrawable()}.</p>
+
+
+<h4>Action Provider</h4>
+
+<p>The new {@link android.view.ActionProvider} class facilitates user actions to which several
+different applications may respond. For example, a “share” action in your application might invoke
+several different apps that can handle the {@link android.content.Intent#ACTION_SEND} intent and the
+associated data. In this case, you can use the {@link android.widget.ShareActionProvider} (an
+extension of {@link android.view.ActionProvider}) in your action bar, instead of a traditional menu
+item that invokes the intent. The {@link android.widget.ShareActionProvider} populates a drop-down
+menu with all the available apps that can handle the intent.</p>
+
+<p>To declare an action provider for an action item, include the {@code android:actionProviderClass}
+attribute in the {@code <item>} element for your activity’s options menu, with the class name
+of the action provider as the attribute value. For example:</p>
+
+<pre>
+<item android:id="@+id/menu_share"
+ android:title="Share"
+ android:icon="@drawable/ic_share"
+ android:showAsAction="ifRoom"
+ android:actionProviderClass="android.widget.ShareActionProvider" />
+</pre>
+
+<p>In your activity’s {@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()}
+callback
+method, retrieve an instance of the action provider from the menu item and set the intent:</p>
+
+<pre>
+public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.options, menu);
+ ShareActionProvider shareActionProvider =
+ (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
+ // Set the share intent of the share action provider.
+ shareActionProvider.setShareIntent(createShareIntent());
+ ...
+ return super.onCreateOptionsMenu(menu);
+}
+</pre>
+
+<p>For an example using the {@link android.widget.ShareActionProvider}, see the <a
+href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.html”>ActionBarActionProviderActivity</a>
+class in ApiDemos.</p>
+
+
+<h4>Collapsible Action Views</h4>
+
+<p>Menu items that appear as action items can now toggle between their action view state and
+traditional action item state. Previously only the {@link android.widget.SearchView} supported
+collapsing when used as an action view, but now you can add an action view for any action item and
+switch between the expanded state (action view is visible) and collapsed state (action item is
+visible).</p>
+
+<p>To declare that an action item that contains an action view be collapsible, include the {@code
+“collapseActionView”} flag in the {@code android:showAsAction} attribute for the {@code
+<item>} element in the menu’s XML file.</p>
+
+<p>To receive callbacks when an action view switches between expanded and collapsed, register an
+instance of {@link android.view.MenuItem.OnActionExpandListener} with the respective {@link
+android.view.MenuItem} by calling {@link android.view.MenuItem#setOnActionExpandListener
+setOnActionExpandListener()}. Typically, you should do so during the {@link
+android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()} callback.</p>
+
+<p>To control a collapsible action view, you can call {@link
+android.view.MenuItem#collapseActionView()} and {@link android.view.MenuItem#expandActionView()} on
+the respective {@link android.view.MenuItem}.</p>
+
+<p>When creating a custom action view, you can also implement the new {@link
+android.view.CollapsibleActionView} interface to receive callbacks when the view is expanded and
+collapsed.</p>
+
+
+<h4>Other APIs for Action Bar</h4>
+<ul>
+<li>{@link android.app.ActionBar#setHomeButtonEnabled setHomeButtonEnabled()} allows you to disable
+the
+default behavior in which the application icon/logo behaves as a button (pass “false” to disable it
+as a button).</li>
+<li>{@link android.app.ActionBar#setIcon setIcon()} and {@link android.app.ActionBar#setLogo
+setLogo()}
+to define the action bar icon or logo at runtime.</li>
+<li>{@link android.app.Fragment#setMenuVisibility Fragment.setMenuVisibility()} allows you to enable
+or
+disable the visibility of the options menu items declared by the fragment. This is useful if the
+fragment has been added to the activity, but is not visible, so the menu items should be
+hidden.</li>
+<li>{@link android.app.FragmentManager#invalidateOptionsMenu
+FragmentManager.invalidateOptionsMenu()}
+allows you to invalidate the activity options menu during various states of the fragment lifecycle
+in which using the equivalent method from {@link android.app.Activity} might not be available.</li>
+</ul>
+
+
+
+
+
+
+
+
+<h3 id="UI">User Interface and Views</h3>
+
+<p>Android 4.0 introduces a variety of new views and other UI components.</p>
+
+<h4>System UI</h4>
+
+<p>Since the early days of Android, the system has managed a UI component known as the <em>status
+bar</em>, which resides at the top of handset devices to deliver information such as the carrier
+signal, time, notifications, and so on. Android 3.0 added the <em>system bar</em> for tablet
+devices, which resides at the bottom of the screen to provide system navigation controls (Home,
+Back, and so forth) and also an interface for elements traditionally provided by the status bar. In
+Android 4.0, the system provides a new type of system UI called the <em>navigation bar</em>. The
+navigation bar shares some qualities with the system bar, because it provides navigation controls
+for devices that don’t have hardware counterparts for navigating the system, but the navigation
+controls is all that it provides (a device with the navigation bar, thus, also includes the status
+bar at the top of the screen).</p>
+
+<p>To this day, you can hide the status bar on handsets using the {@link
+android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN} flag. In Android 4.0, the APIs that control
+the system bar’s visibility have been updated to better reflect the behavior of both the system bar
+and navigation bar:</p>
+<ul>
+<li>The {@link android.view.View#SYSTEM_UI_FLAG_LOW_PROFILE} flag replaces View.STATUS_BAR_HIDDEN
+flag
+(now deprecated). When set, this flag enables “low profile” mode for the system bar or navigation
+bar. Navigation buttons dim and other elements in the system bar also hide.</li>
+<li>The {@link android.view.View#SYSTEM_UI_FLAG_VISIBLE} flag replaces the {@code
+STATUS_BAR_VISIBLE}
+flag to request the system bar or navigation bar be visible.</li>
+<li>The {@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION} is a new flag that requests that
+the
+navigation bar hide completely. Take note that this works only for the <em>navigation bar</em> used
+by some handsets (it does <strong>not</strong> hide the system bar on tablets). The navigation bar
+returns as soon as the system receives user input. As such, this mode is generally used for video
+playback or other cases in which user input is not required.</li>
+</ul>
+
+<p>You can set each of these flags for the system bar by calling {@link
+android.view.View#setSystemUiVisibility setSystemUiVisibility()} on any view in your activity
+window. The window manager will combine (OR-together) all flags from all views in your window and
+apply them to the system UI as long as your window has input focus. When your window loses input
+focus (the user navigates away from your app, or a dialog appears), your flags cease to have effect.
+Similarly, if you remove those views from the view hierarchy their flags no longer apply.</p>
+
+<p>To synchronize other events in your activity with visibility changes to the system UI (for
+example,
+hide the action bar or other UI controls when the system UI hides), you can register a {@link
+android.view.View.OnSystemUiVisibilityChangeListener} to get a callback when the visibility
+changes.</p>
+
+<p>See the <a
+href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html”>
+OverscanActivity</a> class for a demonstration of different system UI options.</p>
+
+
+<h4>GridLayout</h4>
+
+<p>{@link android.widget.GridLayout} is a new view group that places child views in a rectangular
+grid.
+Unlike {@link android.widget.TableLayout}, {@link android.widget.GridLayout} relies on a flat
+hierarchy and does not make use of intermediate views such as table rows for providing structure.
+Instead, children specify which row(s) and column(s) they should occupy (cells can span multiple
+rows and/or columns), and by default are laid out sequentially across the grid’s rows and columns.
+The {@link android.widget.GridLayout} orientation determines whether sequential children are by
+default laid out horizontally or vertically. Space between children may be specified either by using
+instances of the new {@link android.widget.Space} view or by setting the relevant margin parameters
+on children.</p>
+
+<p>See <a
+href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/index.html”>ApiDemos</a>
+for samples using {@link android.widget.GridLayout}.</p>
+
+
+
+<h4>TextureView</h4>
+
+<p>{@link android.view.TextureView} is a new view that allows you to display a content stream, such
+as
+a video or an OpenGL scene. Although similar to {@link android.view.SurfaceView}, {@link
+android.view.TextureView} is unique in that it behaves like a regular view, rather than creating a
+separate window, so you can treat it like any other {@link android.view.View} object. For example,
+you can apply transforms, animate it using {@link android.view.ViewPropertyAnimator}, or easily
+adjust its opacity with {@link android.view.View#setAlpha setAlpha()}.</p>
+
+<p>Beware that {@link android.view.TextureView} works only within a hardware accelerated window.</p>
+
+<p>For more information, see the {@link android.view.TextureView} documentation.</p>
+
+
+<h4>Switch Widget</h4>
+
+<p>The new {@link android.widget.Switch} widget is a two-state toggle that users can drag to one
+side
+or the other (or simply tap) to toggle an option between two states.</p>
+
+<p>You can declare a switch in your layout with the {@code <Switch>} element. You can use the
+{@code android:textOn} and {@code android:textOff} attributes to specify the text to appear on the
+switch when in the on and off setting. The {@code android:text} attribute also allows you to place a
+label alongside the switch.</p>
+
+<p>For a sample using switches, see the <a
+href=”{@docRoot}resources/samples/ApiDemos/res/layout/switches.html”>switches.xml</a> layout file
+and respective <a
+href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html”>Switches
+</a> activity.</p>
+
+
+<h4>Popup Menus</h4>
+
+<p>Android 3.0 introduced {@link android.widget.PopupMenu} to create short contextual menus that pop
+up
+at an anchor point you specify (usually at the point of the item selected). Android 4.0 extends the
+{@link android.widget.PopupMenu} with a couple useful features:</p>
+<ul>
+<li>You can now easily inflate the contents of a popup menu from an XML <a
+href=”{@docRoot}guide/topics/resources/menu-resource.html”>menu resource</a> with {@link
+android.widget.PopupMenu#inflate inflate()}, passing it the menu resource ID.</li>
+<li>You can also now create a {@link android.widget.PopupMenu.OnDismissListener} that receives a
+callback when the menu is dismissed.</li>
+</ul>
+
+<h4>Preferences</h4>
+
+<p>A new {@link android.preference.TwoStatePreference} abstract class serves as the basis for
+preferences that provide a two-state selection option. The new {@link
+android.preference.SwitchPreference} is an extension of {@link
+android.preference.TwoStatePreference} that provides a {@link android.widget.Switch} widget in the
+preference view to allow users to toggle a setting on or off without the need to open an additional
+preference screen or dialog. For example, the Settings application uses a {@link
+android.preference.SwitchPreference} for the Wi-Fi and Bluetooth settings.</p>
+
+
+<h4>Hover Events</h4>
+
+<p>The {@link android.view.View} class now supports “hover” events to enable richer interactions
+through the use of pointer devices (such as a mouse or other device that drives an on-screen
+cursor).</p>
+
+<p>To receive hover events on a view, implement the {@link android.view.View.OnHoverListener} and
+register it with {@link android.view.View#setOnHoverListener setOnHoverListener()}. When a hover
+event occurs on the view, your listener receives a call to {@link
+android.view.View.OnHoverListener#onHover onHover()}, providing the {@link android.view.View} that
+received the event and a {@link android.view.MotionEvent} that describes the type of hover event
+that occurred. The hover event can be one of the following:</p>
+<ul>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_ENTER}</li>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_EXIT}</li>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_MOVE}</li>
+</ul>
+
+<p>Your {@link android.view.View.OnHoverListener} should return true from {@link
+android.view.View.OnHoverListener#onHover onHover()} if it handles the hover event. If your
+listener returns false, then the hover event will be dispatched to the parent view as usual.</p>
+
+<p>If your application uses buttons or other widgets that change their appearance based on the
+current
+state, you can now use the {@code android:state_hovered} attribute in a <a
+href=”{@docRoot}guide/topics/resources/drawable-resource.html#StateList”>state list drawable</a> to
+provide a different background drawable when a cursor hovers over the view.</p>
+
+<p>For a demonstration of the new hover events, see the <a
+href=”{@docRoot}samples/ApiDemos/src/com/example/android/apis/view/Hover.html”>Hover</a> class in
+ApiDemos.</p>
+
+
+<h4>Stylus and Mouse Button Input Events</h4>
+
+<p>Android now provides APIs for receiving input from a stylus input device such as a digitizer
+tablet
+peripheral or a stylus-enabled touch screen.</p>
+
+<p>Stylus input operates in a similar manner to touch or mouse input. When the stylus is in contact
+with the digitizer, applications receive touch events just like they would when a finger is used to
+touch the display. When the stylus is hovering above the digitizer, applications receive hover
+events just like they would when a mouse pointer was being moved across the display when no buttons
+are pressed.</p>
+
+<p>Your application can distinguish between finger, mouse, stylus and eraser input by querying the
+“tool type” associated with each pointer in a {@link android.view.MotionEvent} using {@link
+android.view.MotionEvent#getToolType getToolType()}. The currently defined tool types are: {@link
+android.view.MotionEvent#TOOL_TYPE_UNKNOWN}, {@link android.view.MotionEvent#TOOL_TYPE_FINGER},
+{@link android.view.MotionEvent#TOOL_TYPE_MOUSE}, {@link android.view.MotionEvent#TOOL_TYPE_STYLUS},
+and {@link android.view.MotionEvent#TOOL_TYPE_ERASER}. By querying the tool type, your application
+can choose to handle stylus input in different ways from finger or mouse input.</p>
+
+<p>Your application can also query which mouse or stylus buttons are pressed by querying the “button
+state” of a {@link android.view.MotionEvent} using {@link android.view.MotionEvent#getButtonState
+getButtonState()}. The currently defined button states are: {@link
+android.view.MotionEvent#BUTTON_PRIMARY}, {@link
+android.view.MotionEvent#BUTTON_SECONDARY}, {@link
+android.view.MotionEvent#BUTTON_TERTIARY}, {@link android.view.MotionEvent#BUTTON_BACK},
+and {@link android.view.MotionEvent#BUTTON_FORWARD}.
+For convenience, the back and forward mouse buttons are automatically mapped to the {@link
+android.view.KeyEvent#KEYCODE_BACK} and {@link android.view.KeyEvent#KEYCODE_FORWARD} keys. Your
+application can handle these keys to support mouse button based back and forward navigation.</p>
+
+<p>In addition to precisely measuring the position and pressure of a contact, some stylus input
+devices
+also report the distance between the stylus tip and the digitizer, the stylus tilt angle, and the
+stylus orientation angle. Your application can query this information using {@link
+android.view.MotionEvent#getAxisValue getAxisValue()} with the axis codes {@link
+android.view.MotionEvent#AXIS_DISTANCE}, {@link android.view.MotionEvent#AXIS_TILT}, and {@link
+android.view.MotionEvent#AXIS_ORIENTATION}.</p>
+
+<p>For a demonstration of tool types, button states and the new axis codes, see the <a
+href=”{@docRoot}samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html”>TouchPaint
+</a> class in ApiDemos.</p>
+
+
+
+
+
+
+<h3 id="Properties">Properties</h3>
+
+<p>The new {@link android.util.Property} class provides a fast, efficient, and easy way to specify a
+property on any object that allows callers to generically set/get values on target objects. It also
+allows the functionality of passing around field/method references and allows code to set/get values
+of the property without knowing the details of what the fields/methods are.</p>
+
+<p>For example, if you want to set the value of field {@code bar} on object {@code foo}, you would
+previously do this:</p>
+<pre>
+foo.bar = value;
+</pre>
+
+<p>If you want to call the setter for an underlying private field {@code bar}, you would previously
+do this:</p>
+<pre>
+foo.setBar(value);
+</pre>
+
+<p>However, if you want to pass around the {@code foo} instance and have some other code set the
+{@code bar} value, there is really no way to do it prior to Android 4.0.</p>
+
+<p>Using the {@link android.util.Property} class, you can declare a {@link android.util.Property}
+object {@code BAR} on class {@code Foo} so that you can set the field on instance {@code foo} of
+class {@code Foo} like this:</p>
+<pre>
+BAR.set(foo, value);
+</pre>
+
+<p>The {@link android.view.View} class now leverages the {@link android.util.Property} class to
+allow you to set various fields, such as transform properties that were added in Android 3.0 ({@link
+android.view.View#ROTATION}, {@link android.view.View#ROTATION_X}, {@link
+android.view.View#TRANSLATION_X}, etc.).</p>
+
+<p>The {@link android.animation.ObjectAnimator} class also uses the {@link android.util.Property}
+class, so you can create an {@link android.animation.ObjectAnimator} with a {@link
+android.util.Property}, which is faster, more efficient, and more type-safe than the string-based
+approach.</p>
+
+
+
+
+
+
+<h3 id="HwAccel">Hardware Acceleration</h3>
+
+<p>Beginning with Android 4.0, hardware acceleration for all windows is enabled by default if your
+application has set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
+{@code “14”} or higher. Hardware acceleration generally results in smoother animations, smoother
+scrolling, and overall better performance and response to user interaction.</p>
+
+<p>If necessary, you can manually disable hardware acceleration with the <a
+href=”{@docRoot}guide/topics/manifest/activity-element.html#hwaccel”>{@code hardwareAccelerated}</a>
+attribute for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+<activity>}</a> elements or the <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+element. You can alternatively disable hardware acceleration for individual views by calling {@link
+android.view.View#setLayerType setLayerType(LAYER_TYPE_SOFTWARE)}.</p>
+
+
+<h3 id="Jni">JNI Changes</h3>
+
+<p>In previous versions of Android, JNI local references weren’t indirect handles; we used direct
+pointers. This didn’t seem like a problem as long as we didn’t have a garbage collector that moves
+objects, but it was because it meant that it was possible to write buggy code that still seemed to
+work. In Android 4.0, we’ve moved to using indirect references so we can detect these bugs before we
+need third-party native code to be correct.</p>
+
+<p>The ins and outs of JNI local references are described in “Local and Global References” in
+<a href="{@docRoot}guide/practices/design/jni.html">JNI Tips</a>. In Android 4.0, <a
+href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">CheckJNI</a>
+has been
+enhanced to detect these errors. Watch the <a href=”http://android-developers.blogspot.com/”>Android
+Developers Blog</a> for an upcoming post about common errors with JNI references and how you can fix
+them.</p>
+
+<p>This change in the JNI implementation only affects apps that target Android 4.0 by setting either
+the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
+{@code “14”} or higher. If you’ve set these attributes to any lower
+value, then JNI local references will behave the same as in previous versions.</p>
+
+
+
+
+
+<h3 id="WebKit">WebKit</h3>
+<ul>
+<li>WebKit updated to version 534.30</li>
+<li>Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex character support
+needed for combining glyphs) in {@link android.webkit.WebView} and the built-in Browser</li>
+<li>Support for Ethiopic, Georgian, and Armenian fonts in {@link android.webkit.WebView} and the
+built-in Browser</li>
+<li>Support for <a
+href="http://google-opensource.blogspot.com/2009/05/introducing-webdriver.html">WebDriver</a> makes
+it easier for you to test apps that use {@link android.webkit.WebView}</li>
+</ul>
+
+
+<h4>Android Browser</h4>
+
+<p>The Browser application adds the following features to support web applications:</p>
+<ul>
+<li>Updated V8 JavaScript compiler for faster performance</li>
+<li>Plus other notable enhancements carried over from <a
+href=”{@docRoot}sdk/android-3.0.html”>Android
+3.0</a> are now available for handsets:
+<ul>
+<li>Support for fixed position elements on all pages</li>
+<li><a href="http://dev.w3.org/2009/dap/camera/">HTML media capture</a></li>
+<li><a href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device orientation
+events</a></li>
+<li><a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D transformations</a></li>
+</ul>
+</li>
+</ul>
+
+
+
+<h3 id="Permissions">Permissions</h3>
+
+<p>The following are new permissions:</p>
+<ul>
+<li>{@link android.Manifest.permission#ADD_VOICEMAIL}: Allows a voicemail service to add voicemail
+messages to the device.</li>
+<li>{@link android.Manifest.permission#BIND_TEXT_SERVICE}: A service that implements {@link
+android.service.textservice.SpellCheckerService} must require this permission for itself.</li>
+<li>{@link android.Manifest.permission#BIND_VPN_SERVICE}: A service that implements {@link
+android.net.VpnService} must require this permission for itself.</li>
+<li>{@link android.Manifest.permission#READ_PROFILE}: Provides read access to the {@link
+android.provider.ContactsContract.Profile} provider.</li>
+<li>{@link android.Manifest.permission#WRITE_PROFILE}: Provides write access to the {@link
+android.provider.ContactsContract.Profile} provider.</li>
+</ul>
+
+
+
+<h3 id="DeviceFeatures">Device Features</h3>
+
+<p>The following are new device features:</p>
+<ul>
+<li>{@link android.content.pm.PackageManager#FEATURE_WIFI_DIRECT}: Declares that the application
+uses
+Wi-Fi for peer-to-peer communications.</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="api-diff">API Differences Report</h2>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
+Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>.</p>
+
+
+
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework API. The
+Android {@sdkPlatformVersion} API is assigned an integer identifier —
+<strong>{@sdkPlatformApiLevel}</strong> — that is stored in the system itself. This
+identifier, called the "API Level", allows the system to correctly determine whether an application
+is compatible with the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
+application against the Android library that is provided in the Android {@sdkPlatformVersion} SDK
+platform. Depending on your needs, you might also need to add an
+<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
+<code><uses-sdk></code> element in the application's manifest.</p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
+
+
+<h2 id="apps">Built-in Applications</h2>
+
+<p>The system image included in the downloadable platform provides these
+built-in applications:</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>API Demos</li>
+<li>Browser</li>
+<li>Calculator</li>
+<li>Camera</li>
+<li>Clock</li>
+<li>Custom Locale</li>
+<li>Dev Tools</li>
+<li>Downloads</li>
+<li>Email</li>
+<li>Gallery</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<ul>
+<li>Gestures Builder</li>
+<li>Messaging</li>
+<li>Music</li>
+<li>People</li>
+<li>Phone</li>
+<li>Search</li>
+<li>Settings</li>
+<li>Spare Parts</li>
+<li>Speech Recorder</li>
+<li>Widget Preview</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="locs" style="margin-top:.75em;">Locales</h2>
+
+<p>The system image included in the downloadable SDK platform provides a variety
+of
+built-in locales. In some cases, region-specific strings are available for the
+locales. In other cases, a default version of the language is used. The
+languages that are available in the Android 3.0 system
+image are listed below (with <em>language</em>_<em>country/region</em> locale
+descriptor).</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>Arabic, Egypt (ar_EG)</li>
+<li>Arabic, Israel (ar_IL)</li>
+<li>Bulgarian, Bulgaria (bg_BG)</li>
+<li>Catalan, Spain (ca_ES)</li>
+<li>Czech, Czech Republic (cs_CZ)</li>
+<li>Danish, Denmark(da_DK)</li>
+<li>German, Austria (de_AT)</li>
+<li>German, Switzerland (de_CH)</li>
+<li>German, Germany (de_DE)</li>
+<li>German, Liechtenstein (de_LI)</li>
+<li>Greek, Greece (el_GR)</li>
+<li>English, Australia (en_AU)</li>
+<li>English, Canada (en_CA)</li>
+<li>English, Britain (en_GB)</li>
+<li>English, Ireland (en_IE)</li>
+<li>English, India (en_IN)</li>
+<li>English, New Zealand (en_NZ)</li>
+<li>English, Singapore(en_SG)</li>
+<li>English, US (en_US)</li>
+<li>English, Zimbabwe (en_ZA)</li>
+<li>Spanish (es_ES)</li>
+<li>Spanish, US (es_US)</li>
+<li>Finnish, Finland (fi_FI)</li>
+<li>French, Belgium (fr_BE)</li>
+<li>French, Canada (fr_CA)</li>
+<li>French, Switzerland (fr_CH)</li>
+<li>French, France (fr_FR)</li>
+<li>Hebrew, Israel (he_IL)</li>
+<li>Hindi, India (hi_IN)</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<li>Croatian, Croatia (hr_HR)</li>
+<li>Hungarian, Hungary (hu_HU)</li>
+<li>Indonesian, Indonesia (id_ID)</li>
+<li>Italian, Switzerland (it_CH)</li>
+<li>Italian, Italy (it_IT)</li>
+<li>Japanese (ja_JP)</li>
+<li>Korean (ko_KR)</li>
+<li>Lithuanian, Lithuania (lt_LT)</li>
+<li>Latvian, Latvia (lv_LV)</li>
+<li>Norwegian bokmål, Norway (nb_NO)</li>
+<li>Dutch, Belgium (nl_BE)</li>
+<li>Dutch, Netherlands (nl_NL)</li>
+<li>Polish (pl_PL)</li>
+<li>Portuguese, Brazil (pt_BR)</li>
+<li>Portuguese, Portugal (pt_PT)</li>
+<li>Romanian, Romania (ro_RO)</li>
+<li>Russian (ru_RU)</li></li>
+<li>Slovak, Slovakia (sk_SK)</li>
+<li>Slovenian, Slovenia (sl_SI)</li>
+<li>Serbian (sr_RS)</li>
+<li>Swedish, Sweden (sv_SE)</li>
+<li>Thai, Thailand (th_TH)</li>
+<li>Tagalog, Philippines (tl_PH)</li>
+<li>Turkish, Turkey (tr_TR)</li>
+<li>Ukrainian, Ukraine (uk_UA)</li>
+<li>Vietnamese, Vietnam (vi_VN)</li>
+<li>Chinese, PRC (zh_CN)</li>
+<li>Chinese, Taiwan (zh_TW)</li>
+</td>
+</tr>
+</table>
+
+<p class="note"><strong>Note:</strong> The Android platform may support more
+locales than are included in the SDK system image. All of the supported locales
+are available in the <a href="http://source.android.com/">Android Open Source
+Project</a>.</p>
+
+<h2 id="skins">Emulator Skins</h2>
+
+<p>The downloadable platform includes the following emulator skin:</p>
+
+<ul>
+ <li>
+ WVGA800 (1280x800, extra high density, normal screen)
+ </li>
+</ul>
+
+<p>For more information about how to develop an application that displays
+and functions properly on all Android-powered devices, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
diff --git a/docs/html/sdk/api_diff/14/changes.html b/docs/html/sdk/api_diff/14/changes.html
new file mode 100644
index 0000000..1ae5204
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<!-- on Thu Oct 06 23:19:50 PDT 2011 -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+API Differences between 13 and 14
+</TITLE>
+<link href="../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</head>
+<frameset cols="242,**" framespacing="1" frameborder="yes" border="1" bordercolor="#e9e9e9">
+<frameset rows="174,**" framespacing="1" frameborder="yes" border="1" bordercolor="#e9e9e9">
+ <frame src="changes/jdiff_topleftframe.html" scrolling="no" name="topleftframe" frameborder="1">
+ <frame src="changes/alldiffs_index_all.html" scrolling="auto" name="bottomleftframe" frameborder="1">
+ </frameset>
+ <frame src="changes/changes-summary.html" scrolling="auto" name="rightframe" frameborder="1">
+</frameset>
+<noframes>
+<h2>
+Frame Alert
+</h2>
+
+<p>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<br>
+Link to <a href="changes/changes-summary.html" target="_top">Non-frame version.</A>
+</noframes>
+</html>
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html
new file mode 100644
index 0000000..a1dff53
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html
@@ -0,0 +1,3111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<A HREF="alldiffs_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Field accessibilityEventTypes -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityEventTypes" class="hiddenlink" target="rightframe">accessibilityEventTypes</A>
+</nobr><br>
+<!-- Field accessibilityFeedbackType -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFeedbackType" class="hiddenlink" target="rightframe">accessibilityFeedbackType</A>
+</nobr><br>
+<!-- Field accessibilityFlags -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFlags" class="hiddenlink" target="rightframe">accessibilityFlags</A>
+</nobr><br>
+<!-- Class AccessibilityManager.AccessibilityStateChangeListener -->
+<A HREF="pkg_android.view.accessibility.html#AccessibilityManager.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManager.AccessibilityStateChangeListener</i></b></A><br>
+<!-- Class AccessibilityNodeInfo -->
+<A HREF="pkg_android.view.accessibility.html#AccessibilityNodeInfo" class="hiddenlink" target="rightframe"><b>AccessibilityNodeInfo</b></A><br>
+<!-- Class AccessibilityRecord -->
+<A HREF="pkg_android.view.accessibility.html#AccessibilityRecord" class="hiddenlink" target="rightframe"><b>AccessibilityRecord</b></A><br>
+<!-- Field ACTION_APP_ERROR -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_APP_ERROR" class="hiddenlink" target="rightframe">ACTION_APP_ERROR</A>
+</nobr><br>
+<!-- Field ACTION_HOVER_ENTER -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_ENTER" class="hiddenlink" target="rightframe">ACTION_HOVER_ENTER</A>
+</nobr><br>
+<!-- Field ACTION_HOVER_EXIT -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_EXIT" class="hiddenlink" target="rightframe">ACTION_HOVER_EXIT</A>
+</nobr><br>
+<!-- Field ACTION_INSTALL_PACKAGE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_INSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_INSTALL_PACKAGE</A>
+</nobr><br>
+<!-- Field ACTION_MANAGE_NETWORK_USAGE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_MANAGE_NETWORK_USAGE" class="hiddenlink" target="rightframe">ACTION_MANAGE_NETWORK_USAGE</A>
+</nobr><br>
+<!-- Field ACTION_NEW_PICTURE -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_PICTURE" class="hiddenlink" target="rightframe">ACTION_NEW_PICTURE</A>
+</nobr><br>
+<!-- Field ACTION_NEW_VIDEO -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_VIDEO" class="hiddenlink" target="rightframe">ACTION_NEW_VIDEO</A>
+</nobr><br>
+<!-- Field ACTION_NFCSHARING_SETTINGS -->
+<nobr><A HREF="android.provider.Settings.html#android.provider.Settings.ACTION_NFCSHARING_SETTINGS" class="hiddenlink" target="rightframe">ACTION_NFCSHARING_SETTINGS</A>
+</nobr><br>
+<!-- Field ACTION_PACKAGE_FULLY_REMOVED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_FULLY_REMOVED" class="hiddenlink" target="rightframe">ACTION_PACKAGE_FULLY_REMOVED</A>
+</nobr><br>
+<!-- Field ACTION_PACKAGE_NEEDS_VERIFICATION -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_NEEDS_VERIFICATION" class="hiddenlink" target="rightframe">ACTION_PACKAGE_NEEDS_VERIFICATION</A>
+</nobr><br>
+<!-- Field ACTION_SCO_AUDIO_STATE_UPDATED -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_UPDATED</A>
+</nobr><br>
+<!-- Field ACTION_UNINSTALL_PACKAGE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UNINSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_UNINSTALL_PACKAGE</A>
+</nobr><br>
+<!-- Field actionBarDivider -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarDivider" class="hiddenlink" target="rightframe">actionBarDivider</A>
+</nobr><br>
+<!-- Field actionBarItemBackground -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarItemBackground" class="hiddenlink" target="rightframe">actionBarItemBackground</A>
+</nobr><br>
+<!-- Field actionBarSplitStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarSplitStyle" class="hiddenlink" target="rightframe">actionBarSplitStyle</A>
+</nobr><br>
+<!-- Field actionBarWidgetTheme -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarWidgetTheme" class="hiddenlink" target="rightframe">actionBarWidgetTheme</A>
+</nobr><br>
+<!-- Field actionModeSelectAllDrawable -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSelectAllDrawable" class="hiddenlink" target="rightframe">actionModeSelectAllDrawable</A>
+</nobr><br>
+<!-- Field actionModeSplitBackground -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSplitBackground" class="hiddenlink" target="rightframe">actionModeSplitBackground</A>
+</nobr><br>
+<!-- Field actionModeStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeStyle" class="hiddenlink" target="rightframe">actionModeStyle</A>
+</nobr><br>
+<!-- Class ActionProvider -->
+<A HREF="pkg_android.view.html#ActionProvider" class="hiddenlink" target="rightframe"><b>ActionProvider</b></A><br>
+<!-- Field actionProviderClass -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionProviderClass" class="hiddenlink" target="rightframe">actionProviderClass</A>
+</nobr><br>
+<!-- Constructor AdapterViewAnimator -->
+<nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>AdapterViewAnimator</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<!-- Field ADD_VOICEMAIL -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.ADD_VOICEMAIL" class="hiddenlink" target="rightframe">ADD_VOICEMAIL</A>
+</nobr><br>
+<!-- Method addAccessibilityStateChangeListener -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.addAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>addAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Method addF64 -->
+<i>addF64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addF64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addF64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addI64 -->
+<i>addI64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addI64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addI64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addU64 -->
+<i>addU64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addU64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addU64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Field alignmentMode -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.alignmentMode" class="hiddenlink" target="rightframe">alignmentMode</A>
+</nobr><br>
+<!-- Field ALPHA -->
+<nobr><A HREF="android.view.View.html#android.view.View.ALPHA" class="hiddenlink" target="rightframe">ALPHA</A>
+</nobr><br>
+<!-- Package android.media.effect -->
+<A HREF="changes-summary.html#android.media.effect" class="hiddenlink" target="rightframe"><b>android.media.effect</b></A><br>
+<!-- Package android.net.wifi.p2p -->
+<A HREF="changes-summary.html#android.net.wifi.p2p" class="hiddenlink" target="rightframe"><b>android.net.wifi.p2p</b></A><br>
+<!-- Package android.security -->
+<A HREF="changes-summary.html#android.security" class="hiddenlink" target="rightframe"><b>android.security</b></A><br>
+<!-- Package android.service.textservice -->
+<A HREF="changes-summary.html#android.service.textservice" class="hiddenlink" target="rightframe"><b>android.service.textservice</b></A><br>
+<!-- Package android.view.textservice -->
+<A HREF="changes-summary.html#android.view.textservice" class="hiddenlink" target="rightframe"><b>android.view.textservice</b></A><br>
+<!-- Method appendRecord -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.appendRecord_added(android.view.accessibility.AccessibilityRecord)" class="hiddenlink" target="rightframe"><b>appendRecord</b>
+(<code>AccessibilityRecord</code>)</A></nobr><br>
+<!-- Class Application.ActivityLifecycleCallbacks -->
+<A HREF="pkg_android.app.html#Application.ActivityLifecycleCallbacks" class="hiddenlink" target="rightframe"><b><i>Application.ActivityLifecycleCallbacks</i></b></A><br>
+<!-- Class ApplicationErrorReport -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport</b></A><br>
+<!-- Class ApplicationErrorReport.AnrInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.AnrInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.AnrInfo</b></A><br>
+<!-- Class ApplicationErrorReport.BatteryInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.BatteryInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.BatteryInfo</b></A><br>
+<!-- Class ApplicationErrorReport.CrashInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.CrashInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.CrashInfo</b></A><br>
+<!-- Class ApplicationErrorReport.RunningServiceInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.RunningServiceInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.RunningServiceInfo</b></A><br>
+<!-- Field AXIS_DISTANCE -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_DISTANCE" class="hiddenlink" target="rightframe">AXIS_DISTANCE</A>
+</nobr><br>
+<!-- Field AXIS_TILT -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_TILT" class="hiddenlink" target="rightframe">AXIS_TILT</A>
+</nobr><br>
+<!-- Field backgroundSplit -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundSplit" class="hiddenlink" target="rightframe">backgroundSplit</A>
+</nobr><br>
+<!-- Field backgroundStacked -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundStacked" class="hiddenlink" target="rightframe">backgroundStacked</A>
+</nobr><br>
+<!-- Class BaseDexClassLoader -->
+<A HREF="pkg_dalvik.system.html#BaseDexClassLoader" class="hiddenlink" target="rightframe"><b>BaseDexClassLoader</b></A><br>
+<!-- Field BIND_ABOVE_CLIENT -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ABOVE_CLIENT" class="hiddenlink" target="rightframe">BIND_ABOVE_CLIENT</A>
+</nobr><br>
+<!-- Field BIND_ADJUST_WITH_ACTIVITY -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ADJUST_WITH_ACTIVITY" class="hiddenlink" target="rightframe">BIND_ADJUST_WITH_ACTIVITY</A>
+</nobr><br>
+<!-- Field BIND_ALLOW_OOM_MANAGEMENT -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ALLOW_OOM_MANAGEMENT" class="hiddenlink" target="rightframe">BIND_ALLOW_OOM_MANAGEMENT</A>
+</nobr><br>
+<!-- Field BIND_IMPORTANT -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_IMPORTANT" class="hiddenlink" target="rightframe">BIND_IMPORTANT</A>
+</nobr><br>
+<!-- Field BIND_TEXT_SERVICE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_TEXT_SERVICE" class="hiddenlink" target="rightframe">BIND_TEXT_SERVICE</A>
+</nobr><br>
+<!-- Field BIND_VPN_SERVICE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_VPN_SERVICE" class="hiddenlink" target="rightframe">BIND_VPN_SERVICE</A>
+</nobr><br>
+<!-- Field BIND_WAIVE_PRIORITY -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_WAIVE_PRIORITY" class="hiddenlink" target="rightframe">BIND_WAIVE_PRIORITY</A>
+</nobr><br>
+<!-- Class BluetoothHealth -->
+<A HREF="pkg_android.bluetooth.html#BluetoothHealth" class="hiddenlink" target="rightframe"><b>BluetoothHealth</b></A><br>
+<!-- Class BluetoothHealthAppConfiguration -->
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthAppConfiguration" class="hiddenlink" target="rightframe"><b>BluetoothHealthAppConfiguration</b></A><br>
+<!-- Class BluetoothHealthCallback -->
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthCallback" class="hiddenlink" target="rightframe"><b>BluetoothHealthCallback</b></A><br>
+<!-- Field BUTTON_BACK -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_BACK" class="hiddenlink" target="rightframe">BUTTON_BACK</A>
+</nobr><br>
+<!-- Field BUTTON_FORWARD -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_FORWARD" class="hiddenlink" target="rightframe">BUTTON_FORWARD</A>
+</nobr><br>
+<!-- Field BUTTON_PRIMARY -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_PRIMARY" class="hiddenlink" target="rightframe">BUTTON_PRIMARY</A>
+</nobr><br>
+<!-- Field BUTTON_SECONDARY -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_SECONDARY" class="hiddenlink" target="rightframe">BUTTON_SECONDARY</A>
+</nobr><br>
+<!-- Field BUTTON_TERTIARY -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_TERTIARY" class="hiddenlink" target="rightframe">BUTTON_TERTIARY</A>
+</nobr><br>
+<!-- Constructor Byte2 -->
+<nobr><A HREF="android.renderscript.Byte2.html#android.renderscript.Byte2.ctor_added(byte, byte)" class="hiddenlink" target="rightframe"><b>Byte2</b>
+(<code>byte, byte</code>)</A></nobr> constructor<br>
+<!-- Constructor Byte3 -->
+<nobr><A HREF="android.renderscript.Byte3.html#android.renderscript.Byte3.ctor_added(byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte3</b>
+(<code>byte, byte, byte</code>)</A></nobr> constructor<br>
+<!-- Constructor Byte4 -->
+<nobr><A HREF="android.renderscript.Byte4.html#android.renderscript.Byte4.ctor_added(byte, byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte4</b>
+(<code>byte, byte, byte, byte</code>)</A></nobr> constructor<br>
+<!-- Class CalendarContract -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.provider.html#CalendarContract" class="hiddenlink" target="rightframe"><b>CalendarContract</b></A><br>
+<!-- Class CalendarContract.Attendees -->
+<A HREF="pkg_android.provider.html#CalendarContract.Attendees" class="hiddenlink" target="rightframe"><b>CalendarContract.Attendees</b></A><br>
+<!-- Class CalendarContract.AttendeesColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.AttendeesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.AttendeesColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarAlerts -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlerts" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarAlerts</b></A><br>
+<!-- Class CalendarContract.CalendarAlertsColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlertsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarAlertsColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarCache -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCache" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarCache</b></A><br>
+<!-- Class CalendarContract.CalendarCacheColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCacheColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarCacheColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarEntity -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarEntity</b></A><br>
+<!-- Class CalendarContract.Calendars -->
+<A HREF="pkg_android.provider.html#CalendarContract.Calendars" class="hiddenlink" target="rightframe"><b>CalendarContract.Calendars</b></A><br>
+<!-- Class CalendarContract.CalendarSyncColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarSyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarSyncColumns</i></b></A><br>
+<!-- Class CalendarContract.EventDays -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventDays" class="hiddenlink" target="rightframe"><b>CalendarContract.EventDays</b></A><br>
+<!-- Class CalendarContract.EventDaysColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventDaysColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventDaysColumns</i></b></A><br>
+<!-- Class CalendarContract.Events -->
+<A HREF="pkg_android.provider.html#CalendarContract.Events" class="hiddenlink" target="rightframe"><b>CalendarContract.Events</b></A><br>
+<!-- Class CalendarContract.EventsColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventsColumns</i></b></A><br>
+<!-- Class CalendarContract.EventsEntity -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventsEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.EventsEntity</b></A><br>
+<!-- Class CalendarContract.ExtendedProperties -->
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedProperties" class="hiddenlink" target="rightframe"><b>CalendarContract.ExtendedProperties</b></A><br>
+<!-- Class CalendarContract.ExtendedPropertiesColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedPropertiesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.ExtendedPropertiesColumns</i></b></A><br>
+<!-- Class CalendarContract.Instances -->
+<A HREF="pkg_android.provider.html#CalendarContract.Instances" class="hiddenlink" target="rightframe"><b>CalendarContract.Instances</b></A><br>
+<!-- Class CalendarContract.Reminders -->
+<A HREF="pkg_android.provider.html#CalendarContract.Reminders" class="hiddenlink" target="rightframe"><b>CalendarContract.Reminders</b></A><br>
+<!-- Class CalendarContract.RemindersColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.RemindersColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.RemindersColumns</i></b></A><br>
+<!-- Class CalendarContract.SyncColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.SyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.SyncColumns</i></b></A><br>
+<!-- Class CalendarContract.SyncState -->
+<A HREF="pkg_android.provider.html#CalendarContract.SyncState" class="hiddenlink" target="rightframe"><b>CalendarContract.SyncState</b></A><br>
+<!-- Class Camera.Area -->
+<A HREF="pkg_android.hardware.html#Camera.Area" class="hiddenlink" target="rightframe"><b>Camera.Area</b></A><br>
+<!-- Class Camera.Face -->
+<A HREF="pkg_android.hardware.html#Camera.Face" class="hiddenlink" target="rightframe"><b>Camera.Face</b></A><br>
+<!-- Class Camera.FaceDetectionListener -->
+<A HREF="pkg_android.hardware.html#Camera.FaceDetectionListener" class="hiddenlink" target="rightframe"><b><i>Camera.FaceDetectionListener</i></b></A><br>
+<!-- Method cancel -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.cancel_added()" class="hiddenlink" target="rightframe"><b>cancel</b>
+()</A></nobr><br>
+<!-- Field canRetrieveWindowContent -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.canRetrieveWindowContent" class="hiddenlink" target="rightframe">canRetrieveWindowContent</A>
+</nobr><br>
+<!-- Method canScrollHorizontally -->
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollHorizontally_added(int)" class="hiddenlink" target="rightframe"><b>canScrollHorizontally</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method canScrollVertically -->
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollVertically_added(int)" class="hiddenlink" target="rightframe"><b>canScrollVertically</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method clearThreadStatsTag -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.clearThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>clearThreadStatsTag</b>
+()</A></nobr><br>
+<!-- Method collapseActionView -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.collapseActionView_added()" class="hiddenlink" target="rightframe"><b>collapseActionView</b>
+()</A></nobr><br>
+<!-- Class CollapsibleActionView -->
+<A HREF="pkg_android.view.html#CollapsibleActionView" class="hiddenlink" target="rightframe"><b><i>CollapsibleActionView</i></b></A><br>
+<!-- Field colorActivatedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorActivatedHighlight" class="hiddenlink" target="rightframe">colorActivatedHighlight</A>
+</nobr><br>
+<!-- Field colorFocusedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorFocusedHighlight" class="hiddenlink" target="rightframe">colorFocusedHighlight</A>
+</nobr><br>
+<!-- Field colorLongPressedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorLongPressedHighlight" class="hiddenlink" target="rightframe">colorLongPressedHighlight</A>
+</nobr><br>
+<!-- Field colorMultiSelectHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorMultiSelectHighlight" class="hiddenlink" target="rightframe">colorMultiSelectHighlight</A>
+</nobr><br>
+<!-- Field colorPressedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorPressedHighlight" class="hiddenlink" target="rightframe">colorPressedHighlight</A>
+</nobr><br>
+<!-- Field columnCount -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnCount" class="hiddenlink" target="rightframe">columnCount</A>
+</nobr><br>
+<!-- Field columnOrderPreserved -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnOrderPreserved" class="hiddenlink" target="rightframe">columnOrderPreserved</A>
+</nobr><br>
+<!-- Field COMPONENT_ENABLED_STATE_DISABLED_USER -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER" class="hiddenlink" target="rightframe">COMPONENT_ENABLED_STATE_DISABLED_USER</A>
+</nobr><br>
+<!-- Class ComponentCallbacks2 -->
+<A HREF="pkg_android.content.html#ComponentCallbacks2" class="hiddenlink" target="rightframe"><b><i>ComponentCallbacks2</i></b></A><br>
+<!-- Field CONFIDENCE_SCORES -->
+<nobr><A HREF="android.speech.SpeechRecognizer.html#android.speech.SpeechRecognizer.CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">CONFIDENCE_SCORES</A>
+</nobr><br>
+<!-- Class ContactsContract.CommonDataKinds.Identity -->
+<A HREF="pkg_android.provider.html#ContactsContract.CommonDataKinds.Identity" class="hiddenlink" target="rightframe"><b>ContactsContract.CommonDataKinds.Identity</b></A><br>
+<!-- Class ContactsContract.DataUsageFeedback -->
+<A HREF="pkg_android.provider.html#ContactsContract.DataUsageFeedback" class="hiddenlink" target="rightframe"><b>ContactsContract.DataUsageFeedback</b></A><br>
+<!-- Class ContactsContract.DisplayPhoto -->
+<A HREF="pkg_android.provider.html#ContactsContract.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.DisplayPhoto</b></A><br>
+<!-- Class ContactsContract.Profile -->
+<A HREF="pkg_android.provider.html#ContactsContract.Profile" class="hiddenlink" target="rightframe"><b>ContactsContract.Profile</b></A><br>
+<!-- Class ContactsContract.ProfileSyncState -->
+<A HREF="pkg_android.provider.html#ContactsContract.ProfileSyncState" class="hiddenlink" target="rightframe"><b>ContactsContract.ProfileSyncState</b></A><br>
+<!-- Class ContactsContract.RawContacts.DisplayPhoto -->
+<A HREF="pkg_android.provider.html#ContactsContract.RawContacts.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.RawContacts.DisplayPhoto</b></A><br>
+<!-- Method copy1DRangeFrom -->
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy1DRangeFrom_added(int, int, android.renderscript.Allocation, int)" class="hiddenlink" target="rightframe"><b>copy1DRangeFrom</b>
+(<code>int, int, Allocation, int</code>)</A></nobr><br>
+<!-- Method copy2DRangeFrom -->
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy2DRangeFrom_added(int, int, int, int, android.renderscript.Allocation, int, int)" class="hiddenlink" target="rightframe"><b>copy2DRangeFrom</b>
+(<code>int, int, int, int, Allocation, int, int</code>)</A></nobr><br>
+<!-- Method create1D -->
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.create1D_added(android.renderscript.RenderScript, android.renderscript.Allocation)" class="hiddenlink" target="rightframe"><b>create1D</b>
+(<code>RenderScript, Allocation</code>)</A></nobr><br>
+<!-- Method createAccessibilityNodeInfo -->
+<nobr><A HREF="android.view.View.html#android.view.View.createAccessibilityNodeInfo_added()" class="hiddenlink" target="rightframe"><b>createAccessibilityNodeInfo</b>
+()</A></nobr><br>
+<!-- Method createApplicationRecord -->
+<nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createApplicationRecord_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>createApplicationRecord</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method createUri -->
+<i>createUri</i><br>
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(android.net.Uri)" class="hiddenlink" target="rightframe">type <b>
+(<code>Uri</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+<!-- Method createUri -->
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+<!-- Field DATA_SET -->
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>DATA_SET</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.GroupsColumns.html#android.provider.ContactsContract.GroupsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.GroupsColumns</A>
+</nobr><br>
+<!-- Field DATA_SET -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsColumns</A>
+</nobr><br>
+<!-- Field DATA_SET -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.SettingsColumns.html#android.provider.ContactsContract.SettingsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.SettingsColumns</A>
+</nobr><br>
+<!-- Method deferNotifyDataSetChanged -->
+<i>deferNotifyDataSetChanged</i><br>
+ <nobr><A HREF="android.widget.AbsListView.html#android.widget.AbsListView.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AbsListView
+</A></nobr><br>
+<!-- Method deferNotifyDataSetChanged -->
+ <nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AdapterViewAnimator
+</A></nobr><br>
+<!-- Field DeviceDefault_ButtonBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar</A>
+</nobr><br>
+<!-- Field DeviceDefault_ButtonBar_AlertDialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar_AlertDialog</A>
+</nobr><br>
+<!-- Field DeviceDefault_Light_ButtonBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar</A>
+</nobr><br>
+<!-- Field DeviceDefault_Light_ButtonBar_AlertDialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar_AlertDialog</A>
+</nobr><br>
+<!-- Field DeviceDefault_Light_SegmentedButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_Light_SegmentedButton</A>
+</nobr><br>
+<!-- Field DeviceDefault_SegmentedButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_SegmentedButton</A>
+</nobr><br>
+<!-- Field directionDescriptions -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.directionDescriptions" class="hiddenlink" target="rightframe">directionDescriptions</A>
+</nobr><br>
+<!-- Method dispatchGenericFocusedEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericFocusedEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericFocusedEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method dispatchGenericPointerEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericPointerEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericPointerEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method dispatchHoverEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Field DISPLAY_PHOTO -->
+<nobr><A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.DISPLAY_PHOTO" class="hiddenlink" target="rightframe">DISPLAY_PHOTO</A>
+</nobr><br>
+<!-- Class Double2 -->
+<A HREF="pkg_android.renderscript.html#Double2" class="hiddenlink" target="rightframe"><b>Double2</b></A><br>
+<!-- Class Double3 -->
+<A HREF="pkg_android.renderscript.html#Double3" class="hiddenlink" target="rightframe"><b>Double3</b></A><br>
+<!-- Class Double4 -->
+<A HREF="pkg_android.renderscript.html#Double4" class="hiddenlink" target="rightframe"><b>Double4</b></A><br>
+<!-- Field drawableEnd -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableEnd" class="hiddenlink" target="rightframe">drawableEnd</A>
+</nobr><br>
+<!-- Field drawableStart -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableStart" class="hiddenlink" target="rightframe">drawableStart</A>
+</nobr><br>
+<!-- Method dump -->
+<nobr><A HREF="android.service.wallpaper.WallpaperService.Engine.html#android.service.wallpaper.WallpaperService.Engine.dump_added(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])" class="hiddenlink" target="rightframe"><b>dump</b>
+(<code>String, FileDescriptor, PrintWriter, String[]</code>)</A></nobr><br>
+<!-- Method dup -->
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.dup_added()" class="hiddenlink" target="rightframe"><b>dup</b>
+()</A></nobr><br>
+<!-- Class EasyEditSpan -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.text.style.html#EasyEditSpan" class="hiddenlink" target="rightframe"><b>EasyEditSpan</b></A><br>
+<!-- Class EdgeEffect -->
+<A HREF="pkg_android.widget.html#EdgeEffect" class="hiddenlink" target="rightframe"><b>EdgeEffect</b></A><br>
+<!-- Field END -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.END" class="hiddenlink" target="rightframe">END</A>
+</nobr><br>
+<!-- Method eventTypeToString -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.eventTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>eventTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method expandActionView -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.expandActionView_added()" class="hiddenlink" target="rightframe"><b>expandActionView</b>
+()</A></nobr><br>
+<!-- Method expandGroup -->
+<nobr><A HREF="android.widget.ExpandableListView.html#android.widget.ExpandableListView.expandGroup_added(int, boolean)" class="hiddenlink" target="rightframe"><b>expandGroup</b>
+(<code>int, boolean</code>)</A></nobr><br>
+<!-- Field externalCodeSize -->
+<nobr><A HREF="android.content.pm.PackageStats.html#android.content.pm.PackageStats.externalCodeSize" class="hiddenlink" target="rightframe">externalCodeSize</A>
+</nobr><br>
+<!-- Field EXTRA_ALLOW_REPLACE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_ALLOW_REPLACE" class="hiddenlink" target="rightframe">EXTRA_ALLOW_REPLACE</A>
+</nobr><br>
+<!-- Field EXTRA_BUG_REPORT -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_BUG_REPORT" class="hiddenlink" target="rightframe">EXTRA_BUG_REPORT</A>
+</nobr><br>
+<!-- Field EXTRA_CONFIDENCE_SCORES -->
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">EXTRA_CONFIDENCE_SCORES</A>
+</nobr><br>
+<!-- Field EXTRA_INSTALLER_PACKAGE_NAME -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_INSTALLER_PACKAGE_NAME" class="hiddenlink" target="rightframe">EXTRA_INSTALLER_PACKAGE_NAME</A>
+</nobr><br>
+<!-- Field EXTRA_NOT_UNKNOWN_SOURCE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_NOT_UNKNOWN_SOURCE" class="hiddenlink" target="rightframe">EXTRA_NOT_UNKNOWN_SOURCE</A>
+</nobr><br>
+<!-- Field EXTRA_ORIGIN -->
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_ORIGIN" class="hiddenlink" target="rightframe">EXTRA_ORIGIN</A>
+</nobr><br>
+<!-- Field EXTRA_RETURN_RESULT -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_RETURN_RESULT" class="hiddenlink" target="rightframe">EXTRA_RETURN_RESULT</A>
+</nobr><br>
+<!-- Field EXTRA_SCO_AUDIO_PREVIOUS_STATE -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE" class="hiddenlink" target="rightframe">EXTRA_SCO_AUDIO_PREVIOUS_STATE</A>
+</nobr><br>
+<!-- Field EXTRA_SHOW_FRAGMENT_SHORT_TITLE -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_SHORT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_SHORT_TITLE</A>
+</nobr><br>
+<!-- Field EXTRA_SHOW_FRAGMENT_TITLE -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_TITLE</A>
+</nobr><br>
+<!-- Field EXTRA_VERIFICATION_ID -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.EXTRA_VERIFICATION_ID" class="hiddenlink" target="rightframe">EXTRA_VERIFICATION_ID</A>
+</nobr><br>
+<!-- Field EXTRA_WEB_SEARCH_PENDINGINTENT -->
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.EXTRA_WEB_SEARCH_PENDINGINTENT" class="hiddenlink" target="rightframe">EXTRA_WEB_SEARCH_PENDINGINTENT</A>
+</nobr><br>
+<!-- Field EXTRA_WIFI_INFO -->
+<nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.EXTRA_WIFI_INFO" class="hiddenlink" target="rightframe">EXTRA_WIFI_INFO</A>
+</nobr><br>
+<!-- Method F64_2 -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method F64_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method F64_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Field FEATURE_WIFI_DIRECT -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_WIFI_DIRECT" class="hiddenlink" target="rightframe">FEATURE_WIFI_DIRECT</A>
+</nobr><br>
+<!-- Field FEEDBACK_ALL_MASK -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK" class="hiddenlink" target="rightframe">FEEDBACK_ALL_MASK</A>
+</nobr><br>
+<!-- Method feedbackTypeToString -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.feedbackTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>feedbackTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Field FIND_VIEWS_WITH_CONTENT_DESCRIPTION -->
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_CONTENT_DESCRIPTION</A>
+</nobr><br>
+<!-- Field FIND_VIEWS_WITH_TEXT -->
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_TEXT" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_TEXT</A>
+</nobr><br>
+<!-- Method findViewsWithText -->
+<nobr><A HREF="android.view.View.html#android.view.View.findViewsWithText_added(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int)" class="hiddenlink" target="rightframe"><b>findViewsWithText</b>
+(<code>ArrayList<View>, CharSequence, int</code>)</A></nobr><br>
+<!-- Method fitsSystemWindows -->
+<nobr><A HREF="android.view.View.html#android.view.View.fitsSystemWindows_added()" class="hiddenlink" target="rightframe"><b>fitsSystemWindows</b>
+()</A></nobr><br>
+<!-- Field FLAG_STOP_WITH_TASK -->
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.FLAG_STOP_WITH_TASK" class="hiddenlink" target="rightframe">FLAG_STOP_WITH_TASK</A>
+</nobr><br>
+<!-- Field flags -->
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.flags" class="hiddenlink" target="rightframe">flags</A>
+</nobr><br>
+<!-- Method flagToString -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.flagToString_added(int)" class="hiddenlink" target="rightframe"><b>flagToString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Field FOCUS_MODE_CONTINUOUS_PICTURE -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE" class="hiddenlink" target="rightframe">FOCUS_MODE_CONTINUOUS_PICTURE</A>
+</nobr><br>
+<!-- Method forEach -->
+<nobr><A HREF="android.renderscript.Script.html#android.renderscript.Script.forEach_added(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><b>forEach</b>
+(<code>int, Allocation, Allocation, FieldPacker</code>)</A></nobr><br>
+<!-- Method forgetLoadedWallpaper -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.forgetLoadedWallpaper_added()" class="hiddenlink" target="rightframe"><b>forgetLoadedWallpaper</b>
+()</A></nobr><br>
+<!-- Method fromDatagramSocket -->
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.fromDatagramSocket_added(java.net.DatagramSocket)" class="hiddenlink" target="rightframe"><b>fromDatagramSocket</b>
+(<code>DatagramSocket</code>)</A></nobr><br>
+<!-- Class FullBackupDataOutput -->
+<A HREF="pkg_android.app.backup.html#FullBackupDataOutput" class="hiddenlink" target="rightframe"><b>FullBackupDataOutput</b></A><br>
+<!-- Method fullBackupFile -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.fullBackupFile_added(java.io.File, android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>fullBackupFile</b>
+(<code>File, FullBackupDataOutput</code>)</A></nobr><br>
+<!-- Method getAbsoluteGravity -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.getAbsoluteGravity_added(int, int)" class="hiddenlink" target="rightframe"><b>getAbsoluteGravity</b>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method getActionProvider -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.getActionProvider_added()" class="hiddenlink" target="rightframe"><b>getActionProvider</b>
+()</A></nobr><br>
+<!-- Method getAnnotation -->
+<i>getAnnotation</i><br>
+ <nobr><A HREF="java.lang.reflect.Constructor.html#java.lang.reflect.Constructor.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Constructor
+</A></nobr><br>
+<!-- Method getAnnotation -->
+ <nobr><A HREF="java.lang.reflect.Field.html#java.lang.reflect.Field.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Field
+</A></nobr><br>
+<!-- Method getAnnotation -->
+ <nobr><A HREF="java.lang.reflect.Method.html#java.lang.reflect.Method.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Method
+</A></nobr><br>
+<!-- Method getAuthToken -->
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_added(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe"><b>getAuthToken</b>
+(<code>Account, String, Bundle, boolean, AccountManagerCallback<Bundle>, Handler</code>)</A></nobr><br>
+<!-- Method getAutoExposureLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoExposureLock_added()" class="hiddenlink" target="rightframe"><b>getAutoExposureLock</b>
+()</A></nobr><br>
+<!-- Method getAutoWhiteBalanceLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoWhiteBalanceLock_added()" class="hiddenlink" target="rightframe"><b>getAutoWhiteBalanceLock</b>
+()</A></nobr><br>
+<!-- Method getButtonState -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getButtonState_added()" class="hiddenlink" target="rightframe"><b>getButtonState</b>
+()</A></nobr><br>
+<!-- Method getCameraDisabled -->
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getCameraDisabled_added(android.content.ComponentName)" class="hiddenlink" target="rightframe"><b>getCameraDisabled</b>
+(<code>ComponentName</code>)</A></nobr><br>
+<!-- Method getCanRetrieveWindowContent -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getCanRetrieveWindowContent_added()" class="hiddenlink" target="rightframe"><b>getCanRetrieveWindowContent</b>
+()</A></nobr><br>
+<!-- Method getContentDescription -->
+<nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.getContentDescription_added()" class="hiddenlink" target="rightframe"><b>getContentDescription</b>
+()</A></nobr><br>
+<!-- Method getCurrVelocity -->
+<i>getCurrVelocity</i><br>
+ <nobr><A HREF="android.widget.OverScroller.html#android.widget.OverScroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.OverScroller
+</A></nobr><br>
+<!-- Method getCurrVelocity -->
+ <nobr><A HREF="android.widget.Scroller.html#android.widget.Scroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.Scroller
+</A></nobr><br>
+<!-- Method getDatabaseName -->
+<nobr><A HREF="android.database.sqlite.SQLiteOpenHelper.html#android.database.sqlite.SQLiteOpenHelper.getDatabaseName_added()" class="hiddenlink" target="rightframe"><b>getDatabaseName</b>
+()</A></nobr><br>
+<!-- Method getDescription -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getDescription_added()" class="hiddenlink" target="rightframe"><b>getDescription</b>
+()</A></nobr><br>
+<!-- Method getDisplayName -->
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.getDisplayName_added(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo)" class="hiddenlink" target="rightframe"><b>getDisplayName</b>
+(<code>Context, String, ApplicationInfo</code>)</A></nobr><br>
+<!-- Method getDividerPadding -->
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.getDividerPadding_added()" class="hiddenlink" target="rightframe"><b>getDividerPadding</b>
+()</A></nobr><br>
+<!-- Method getDuration -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getDuration_added()" class="hiddenlink" target="rightframe"><b>getDuration</b>
+()</A></nobr><br>
+<!-- Method getEGLErrorString -->
+<nobr><A HREF="android.opengl.GLUtils.html#android.opengl.GLUtils.getEGLErrorString_added(int)" class="hiddenlink" target="rightframe"><b>getEGLErrorString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getEnabledAccessibilityServiceList -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getEnabledAccessibilityServiceList_added(int)" class="hiddenlink" target="rightframe"><b>getEnabledAccessibilityServiceList</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getEngines -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.getEngines_added()" class="hiddenlink" target="rightframe"><b>getEngines</b>
+()</A></nobr><br>
+<!-- Method getFocusAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getFocusAreas</b>
+()</A></nobr><br>
+<!-- Method getHinting -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.getHinting_added()" class="hiddenlink" target="rightframe"><b>getHinting</b>
+()</A></nobr><br>
+<!-- Method getId -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getId_added()" class="hiddenlink" target="rightframe"><b>getId</b>
+()</A></nobr><br>
+<!-- Method getInstalledAccessibilityServiceList -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getInstalledAccessibilityServiceList_added()" class="hiddenlink" target="rightframe"><b>getInstalledAccessibilityServiceList</b>
+()</A></nobr><br>
+<!-- Method getLastInputMethodSubtype -->
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.getLastInputMethodSubtype_added()" class="hiddenlink" target="rightframe"><b>getLastInputMethodSubtype</b>
+()</A></nobr><br>
+<!-- Method getMaximumBitmapHeight -->
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapHeight_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapHeight</b>
+()</A></nobr><br>
+<!-- Method getMaximumBitmapWidth -->
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapWidth_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapWidth</b>
+()</A></nobr><br>
+<!-- Method getMaxNumDetectedFaces -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumDetectedFaces_added()" class="hiddenlink" target="rightframe"><b>getMaxNumDetectedFaces</b>
+()</A></nobr><br>
+<!-- Method getMaxNumFocusAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumFocusAreas</b>
+()</A></nobr><br>
+<!-- Method getMaxNumMeteringAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumMeteringAreas</b>
+()</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+<i>getMaxTransceiveLength</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcB.html#android.nfc.tech.NfcB.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcB
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcV.html#android.nfc.tech.NfcV.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcV
+</A></nobr><br>
+<!-- Method getMeasureAllChildren -->
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getMeasureAllChildren_added()" class="hiddenlink" target="rightframe"><b>getMeasureAllChildren</b>
+()</A></nobr><br>
+<!-- Method getMessageName -->
+<nobr><A HREF="android.os.Handler.html#android.os.Handler.getMessageName_added(android.os.Message)" class="hiddenlink" target="rightframe"><b>getMessageName</b>
+(<code>Message</code>)</A></nobr><br>
+<!-- Method getMeteringAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMeteringAreas</b>
+()</A></nobr><br>
+<!-- Method getName -->
+<i>getName</i><br>
+ <nobr><A HREF="android.app.FragmentManager.BackStackEntry.html#android.app.FragmentManager.BackStackEntry.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.app.FragmentManager.BackStackEntry
+</A></nobr><br>
+<!-- Method getName -->
+ <nobr><A HREF="android.renderscript.BaseObj.html#android.renderscript.BaseObj.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.renderscript.BaseObj
+</A></nobr><br>
+<!-- Method getOffsetForPosition -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.getOffsetForPosition_added(float, float)" class="hiddenlink" target="rightframe"><b>getOffsetForPosition</b>
+(<code>float, float</code>)</A></nobr><br>
+<!-- Method getOtherLabel -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherLabel_added(int)" class="hiddenlink" target="rightframe"><b>getOtherLabel</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getOtherPrivateDirty -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPrivateDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPrivateDirty</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getOtherPss -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPss_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPss</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getOtherSharedDirty -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherSharedDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherSharedDirty</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getPointerProperties -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getPointerProperties_added(int, android.view.MotionEvent.PointerProperties)" class="hiddenlink" target="rightframe"><b>getPointerProperties</b>
+(<code>int, PointerProperties</code>)</A></nobr><br>
+<!-- Method getProfileConnectionState -->
+<nobr><A HREF="android.bluetooth.BluetoothAdapter.html#android.bluetooth.BluetoothAdapter.getProfileConnectionState_added(int)" class="hiddenlink" target="rightframe"><b>getProfileConnectionState</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getPss -->
+<nobr><A HREF="android.os.Debug.html#android.os.Debug.getPss_added()" class="hiddenlink" target="rightframe"><b>getPss</b>
+()</A></nobr><br>
+<!-- Method getRadioVersion -->
+<nobr><A HREF="android.os.Build.html#android.os.Build.getRadioVersion_added()" class="hiddenlink" target="rightframe"><b>getRadioVersion</b>
+()</A></nobr><br>
+<!-- Method getRecord -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecord_added(int)" class="hiddenlink" target="rightframe"><b>getRecord</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getRecordCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecordCount_added()" class="hiddenlink" target="rightframe"><b>getRecordCount</b>
+()</A></nobr><br>
+<!-- Method getResolveInfo -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getResolveInfo_added()" class="hiddenlink" target="rightframe"><b>getResolveInfo</b>
+()</A></nobr><br>
+<!-- Method getSettingsActivity -->
+<nobr><A HREF="android.content.SyncAdapterType.html#android.content.SyncAdapterType.getSettingsActivity_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivity</b>
+()</A></nobr><br>
+<!-- Method getSettingsActivityName -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getSettingsActivityName_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivityName</b>
+()</A></nobr><br>
+<!-- Method getStartDelay -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getStartDelay_added()" class="hiddenlink" target="rightframe"><b>getStartDelay</b>
+()</A></nobr><br>
+<!-- Method getTag -->
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.getTag_added()" class="hiddenlink" target="rightframe"><b>getTag</b>
+()</A></nobr><br>
+<!-- Method getTextZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextZoom_added()" class="hiddenlink" target="rightframe"><b>getTextZoom</b>
+()</A></nobr><br>
+<!-- Method getThemedContext -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.getThemedContext_added()" class="hiddenlink" target="rightframe"><b>getThemedContext</b>
+()</A></nobr><br>
+<!-- Method getThreadStatsTag -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.getThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>getThreadStatsTag</b>
+()</A></nobr><br>
+<!-- Method getTimeout -->
+<i>getTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<!-- Method getTimestamp -->
+<nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.getTimestamp_added()" class="hiddenlink" target="rightframe"><b>getTimestamp</b>
+()</A></nobr><br>
+<!-- Method getTitleRes -->
+<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getTitleRes_added()" class="hiddenlink" target="rightframe"><b>getTitleRes</b>
+()</A></nobr><br>
+<!-- Method getToolType -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getToolType_added(int)" class="hiddenlink" target="rightframe"><b>getToolType</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getUrl -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.getUrl_added()" class="hiddenlink" target="rightframe"><b>getUrl</b>
+()</A></nobr><br>
+<!-- Class GridLayout -->
+<A HREF="pkg_android.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<!-- Class GridLayout.Alignment -->
+<A HREF="pkg_android.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<!-- Class GridLayout.LayoutParams -->
+<A HREF="pkg_android.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<!-- Class GridLayout.Spec -->
+<A HREF="pkg_android.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<!-- Method hasPermanentMenuKey -->
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.ViewConfiguration.html#android.view.ViewConfiguration.hasPermanentMenuKey_added()" class="hiddenlink" target="rightframe"><b>hasPermanentMenuKey</b>
+()</A></nobr><br>
+<!-- Field HEALTH -->
+<nobr><A HREF="android.bluetooth.BluetoothProfile.html#android.bluetooth.BluetoothProfile.HEALTH" class="hiddenlink" target="rightframe">HEALTH</A>
+</nobr><br>
+<!-- Field HINTING_OFF -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_OFF" class="hiddenlink" target="rightframe">HINTING_OFF</A>
+</nobr><br>
+<!-- Field HINTING_ON -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_ON" class="hiddenlink" target="rightframe">HINTING_ON</A>
+</nobr><br>
+<!-- Field holo_blue_bright -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_bright" class="hiddenlink" target="rightframe">holo_blue_bright</A>
+</nobr><br>
+<!-- Field holo_blue_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_dark" class="hiddenlink" target="rightframe">holo_blue_dark</A>
+</nobr><br>
+<!-- Field holo_blue_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_light" class="hiddenlink" target="rightframe">holo_blue_light</A>
+</nobr><br>
+<!-- Field holo_green_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_dark" class="hiddenlink" target="rightframe">holo_green_dark</A>
+</nobr><br>
+<!-- Field holo_green_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_light" class="hiddenlink" target="rightframe">holo_green_light</A>
+</nobr><br>
+<!-- Field holo_orange_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_dark" class="hiddenlink" target="rightframe">holo_orange_dark</A>
+</nobr><br>
+<!-- Field holo_orange_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_light" class="hiddenlink" target="rightframe">holo_orange_light</A>
+</nobr><br>
+<!-- Field holo_purple -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_purple" class="hiddenlink" target="rightframe">holo_purple</A>
+</nobr><br>
+<!-- Field holo_red_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_dark" class="hiddenlink" target="rightframe">holo_red_dark</A>
+</nobr><br>
+<!-- Field holo_red_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_light" class="hiddenlink" target="rightframe">holo_red_light</A>
+</nobr><br>
+<!-- Method I16_2 -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I16_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I16_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I32_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I32_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I32_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I64_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I64_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I64_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I8_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I8_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I8_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Field ICE_CREAM_SANDWICH -->
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH" class="hiddenlink" target="rightframe">ICE_CREAM_SANDWICH</A>
+</nobr><br>
+<!-- Method incrementOperationCount -->
+<i>incrementOperationCount</i><br>
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+<!-- Method incrementOperationCount -->
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+<!-- Method inflate -->
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.inflate_added(int)" class="hiddenlink" target="rightframe"><b>inflate</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Constructor InputMethodSubtype -->
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.ctor_added(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)" class="hiddenlink" target="rightframe"><b>InputMethodSubtype</b>
+(<code>int, int, String, String, String, boolean, boolean</code>)</A></nobr> constructor<br>
+<!-- Constructor Int2 -->
+<nobr><A HREF="android.renderscript.Int2.html#android.renderscript.Int2.ctor_added(int, int)" class="hiddenlink" target="rightframe"><b>Int2</b>
+(<code>int, int</code>)</A></nobr> constructor<br>
+<!-- Constructor Int3 -->
+<nobr><A HREF="android.renderscript.Int3.html#android.renderscript.Int3.ctor_added(int, int, int)" class="hiddenlink" target="rightframe"><b>Int3</b>
+(<code>int, int, int</code>)</A></nobr> constructor<br>
+<!-- Constructor Int4 -->
+<nobr><A HREF="android.renderscript.Int4.html#android.renderscript.Int4.ctor_added(int, int, int, int)" class="hiddenlink" target="rightframe"><b>Int4</b>
+(<code>int, int, int, int</code>)</A></nobr> constructor<br>
+<!-- Field INTENT_ACTION_TTS_SERVICE -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE" class="hiddenlink" target="rightframe">INTENT_ACTION_TTS_SERVICE</A>
+</nobr><br>
+<!-- Field INVALID_POINTER_ID -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.INVALID_POINTER_ID" class="hiddenlink" target="rightframe">INVALID_POINTER_ID</A>
+</nobr><br>
+<!-- Method invalidateOptionsMenu -->
+<nobr><A HREF="android.app.FragmentManager.html#android.app.FragmentManager.invalidateOptionsMenu_added()" class="hiddenlink" target="rightframe"><b>invalidateOptionsMenu</b>
+()</A></nobr><br>
+<!-- Field INVITE_CONTACT -->
+<nobr><A HREF="android.provider.ContactsContract.Intents.html#android.provider.ContactsContract.Intents.INVITE_CONTACT" class="hiddenlink" target="rightframe">INVITE_CONTACT</A>
+</nobr><br>
+<!-- Field IS_READ -->
+<nobr><A HREF="android.provider.CallLog.Calls.html#android.provider.CallLog.Calls.IS_READ" class="hiddenlink" target="rightframe">IS_READ</A>
+</nobr><br>
+<!-- Field IS_USER_PROFILE -->
+<nobr><A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.IS_USER_PROFILE" class="hiddenlink" target="rightframe">IS_USER_PROFILE</A>
+</nobr><br>
+<!-- Method isActionViewExpanded -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.isActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>isActionViewExpanded</b>
+()</A></nobr><br>
+<!-- Method isAutoExposureLockSupported -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoExposureLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoExposureLockSupported</b>
+()</A></nobr><br>
+<!-- Method isAutoWhiteBalanceLockSupported -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoWhiteBalanceLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoWhiteBalanceLockSupported</b>
+()</A></nobr><br>
+<!-- Method isAuxiliary -->
+<i>isAuxiliary</i><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.isAuxiliary_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.inputmethod.InputMethodSubtype
+</A></nobr><br>
+<!-- Field isAuxiliary -->
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.isAuxiliary" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Method isCompatible -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.isCompatible_added(android.renderscript.Element)" class="hiddenlink" target="rightframe"><b>isCompatible</b>
+(<code>Element</code>)</A></nobr><br>
+<!-- Method isConnected -->
+<nobr><A HREF="android.bluetooth.BluetoothSocket.html#android.bluetooth.BluetoothSocket.isConnected_added()" class="hiddenlink" target="rightframe"><b>isConnected</b>
+()</A></nobr><br>
+<!-- Method isHovered -->
+<nobr><A HREF="android.view.View.html#android.view.View.isHovered_added()" class="hiddenlink" target="rightframe"><b>isHovered</b>
+()</A></nobr><br>
+<!-- Method isProfileId -->
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.isProfileId_added(long)" class="hiddenlink" target="rightframe"><b>isProfileId</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Method isRtlCharAt -->
+<nobr><A HREF="android.text.Layout.html#android.text.Layout.isRtlCharAt_added(int)" class="hiddenlink" target="rightframe"><b>isRtlCharAt</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method isStarted -->
+<nobr><A HREF="android.animation.Animator.html#android.animation.Animator.isStarted_added()" class="hiddenlink" target="rightframe"><b>isStarted</b>
+()</A></nobr><br>
+<!-- Method isSuggestionsEnabled -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.isSuggestionsEnabled_added()" class="hiddenlink" target="rightframe"><b>isSuggestionsEnabled</b>
+()</A></nobr><br>
+<!-- Method isTouchExplorationEnabled -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.isTouchExplorationEnabled_added()" class="hiddenlink" target="rightframe"><b>isTouchExplorationEnabled</b>
+()</A></nobr><br>
+<!-- Method isVideoSnapshotSupported -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isVideoSnapshotSupported_added()" class="hiddenlink" target="rightframe"><b>isVideoSnapshotSupported</b>
+()</A></nobr><br>
+<!-- Field KEY_ANDROID_PACKAGE_NAME -->
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.KEY_ANDROID_PACKAGE_NAME" class="hiddenlink" target="rightframe">KEY_ANDROID_PACKAGE_NAME</A>
+</nobr><br>
+<!-- Field KEYCODE_3D_MODE -->
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_3D_MODE" class="hiddenlink" target="rightframe">KEYCODE_3D_MODE</A>
+</nobr><br>
+<!-- Field KEYCODE_LANGUAGE_SWITCH -->
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_LANGUAGE_SWITCH" class="hiddenlink" target="rightframe">KEYCODE_LANGUAGE_SWITCH</A>
+</nobr><br>
+<!-- Field KEYCODE_MANNER_MODE -->
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_MANNER_MODE" class="hiddenlink" target="rightframe">KEYCODE_MANNER_MODE</A>
+</nobr><br>
+<!-- Field layout_columnSpan -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_columnSpan" class="hiddenlink" target="rightframe">layout_columnSpan</A>
+</nobr><br>
+<!-- Field layout_row -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_row" class="hiddenlink" target="rightframe">layout_row</A>
+</nobr><br>
+<!-- Field layout_rowSpan -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_rowSpan" class="hiddenlink" target="rightframe">layout_rowSpan</A>
+</nobr><br>
+<!-- Field listPreferredItemHeightLarge -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightLarge" class="hiddenlink" target="rightframe">listPreferredItemHeightLarge</A>
+</nobr><br>
+<!-- Field listPreferredItemHeightSmall -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightSmall" class="hiddenlink" target="rightframe">listPreferredItemHeightSmall</A>
+</nobr><br>
+<!-- Field listPreferredItemPaddingLeft -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingLeft" class="hiddenlink" target="rightframe">listPreferredItemPaddingLeft</A>
+</nobr><br>
+<!-- Field listPreferredItemPaddingRight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingRight" class="hiddenlink" target="rightframe">listPreferredItemPaddingRight</A>
+</nobr><br>
+<!-- Constructor Long2 -->
+<nobr><A HREF="android.renderscript.Long2.html#android.renderscript.Long2.ctor_added(long, long)" class="hiddenlink" target="rightframe"><b>Long2</b>
+(<code>long, long</code>)</A></nobr> constructor<br>
+<!-- Constructor Long3 -->
+<nobr><A HREF="android.renderscript.Long3.html#android.renderscript.Long3.ctor_added(long, long, long)" class="hiddenlink" target="rightframe"><b>Long3</b>
+(<code>long, long, long</code>)</A></nobr> constructor<br>
+<!-- Constructor Long4 -->
+<nobr><A HREF="android.renderscript.Long4.html#android.renderscript.Long4.ctor_added(long, long, long, long)" class="hiddenlink" target="rightframe"><b>Long4</b>
+(<code>long, long, long, long</code>)</A></nobr> constructor<br>
+<!-- Class MenuItem.OnActionExpandListener -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.view.html#MenuItem.OnActionExpandListener" class="hiddenlink" target="rightframe"><b><i>MenuItem.OnActionExpandListener</i></b></A><br>
+<!-- Field METADATA_KEY_BITRATE -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_BITRATE" class="hiddenlink" target="rightframe">METADATA_KEY_BITRATE</A>
+</nobr><br>
+<!-- Field METADATA_KEY_HAS_AUDIO -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_AUDIO</A>
+</nobr><br>
+<!-- Field METADATA_KEY_HAS_VIDEO -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_VIDEO</A>
+</nobr><br>
+<!-- Field METADATA_KEY_VIDEO_HEIGHT -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_HEIGHT</A>
+</nobr><br>
+<!-- Field METADATA_KEY_VIDEO_WIDTH -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_WIDTH</A>
+</nobr><br>
+<!-- Field minResizeHeight -->
+<i>minResizeHeight</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeHeight" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field minResizeHeight -->
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeHeight" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<!-- Field minResizeWidth -->
+<i>minResizeWidth</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeWidth" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field minResizeWidth -->
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeWidth" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<!-- Class MotionEvent.PointerProperties -->
+<A HREF="pkg_android.view.html#MotionEvent.PointerProperties" class="hiddenlink" target="rightframe"><b>MotionEvent.PointerProperties</b></A><br>
+<!-- Method newChooseAccountIntent -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.newChooseAccountIntent_added(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle)" class="hiddenlink" target="rightframe"><b>newChooseAccountIntent</b>
+(<code>Account, ArrayList<Account>, String[], boolean, String, String, String[], Bundle</code>)</A></nobr><br>
+<!-- Class NfcAdapter.CreateNdefMessageCallback -->
+<A HREF="pkg_android.nfc.html#NfcAdapter.CreateNdefMessageCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.CreateNdefMessageCallback</i></b></A><br>
+<!-- Class NfcAdapter.OnNdefPushCompleteCallback -->
+<A HREF="pkg_android.nfc.html#NfcAdapter.OnNdefPushCompleteCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.OnNdefPushCompleteCallback</i></b></A><br>
+<!-- Class NfcEvent -->
+<A HREF="pkg_android.nfc.html#NfcEvent" class="hiddenlink" target="rightframe"><b>NfcEvent</b></A><br>
+<!-- Class NoSuchPropertyException -->
+<A HREF="pkg_android.util.html#NoSuchPropertyException" class="hiddenlink" target="rightframe"><b>NoSuchPropertyException</b></A><br>
+<!-- Field notificationTimeout -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.notificationTimeout" class="hiddenlink" target="rightframe">notificationTimeout</A>
+</nobr><br>
+<!-- Method obtain -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, PointerProperties[], PointerCoords[], int, int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.obtain_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>AccessibilityEvent</code>)</b> in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method ofFloat -->
+<i>ofFloat</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofFloat_added(T, android.util.Property<T, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Float>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method ofFloat -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofFloat_added(android.util.Property<?, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Float>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method ofInt -->
+<i>ofInt</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofInt_added(T, android.util.Property<T, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Integer>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method ofInt -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofInt_added(android.util.Property<?, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Integer>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method ofKeyframe -->
+<nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofKeyframe_added(android.util.Property, android.animation.Keyframe...)" class="hiddenlink" target="rightframe"><b>ofKeyframe</b>
+(<code>Property, </code>)</A></nobr><br>
+<!-- Method ofObject -->
+<i>ofObject</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofObject_added(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, V>, TypeEvaluator<V>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method ofObject -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofObject_added(android.util.Property, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property, TypeEvaluator<V>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method onActionViewCollapsed -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewCollapsed_added()" class="hiddenlink" target="rightframe"><b>onActionViewCollapsed</b>
+()</A></nobr><br>
+<!-- Method onActionViewExpanded -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>onActionViewExpanded</b>
+()</A></nobr><br>
+<!-- Method onBuildStartFragmentIntent -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.onBuildStartFragmentIntent_added(java.lang.String, android.os.Bundle, int, int)" class="hiddenlink" target="rightframe"><b>onBuildStartFragmentIntent</b>
+(<code>String, Bundle, int, int</code>)</A></nobr><br>
+<!-- Method onFullBackup -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onFullBackup_added(android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>onFullBackup</b>
+(<code>FullBackupDataOutput</code>)</A></nobr><br>
+<!-- Method onHoverChanged -->
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverChanged_added(boolean)" class="hiddenlink" target="rightframe"><b>onHoverChanged</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method onHoverEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method onInitializeAccessibilityEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method onInitializeAccessibilityNodeInfo -->
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityNodeInfo_added(android.view.accessibility.AccessibilityNodeInfo)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityNodeInfo</b>
+(<code>AccessibilityNodeInfo</code>)</A></nobr><br>
+<!-- Method onInterceptHoverEvent -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onInterceptHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onInterceptHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method onPopulateAccessibilityEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.onPopulateAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onPopulateAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method onRequestSendAccessibilityEvent -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onRequestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onRequestSendAccessibilityEvent</b>
+(<code>View, AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method onRestoreFile -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onRestoreFile_added(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long)" class="hiddenlink" target="rightframe"><b>onRestoreFile</b>
+(<code>ParcelFileDescriptor, long, File, int, long, long</code>)</A></nobr><br>
+<!-- Method onShowCustomView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, int, CustomViewCallback</code>)</A></nobr><br>
+<!-- Method onTaskRemoved -->
+<nobr><A HREF="android.app.Service.html#android.app.Service.onTaskRemoved_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>onTaskRemoved</b>
+(<code>Intent</code>)</A></nobr><br>
+<!-- Method onTrimMemory -->
+<i>onTrimMemory</i><br>
+ <nobr><A HREF="android.app.Activity.html#android.app.Activity.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Activity
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.app.Application.html#android.app.Application.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Application
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.app.Fragment.html#android.app.Fragment.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Fragment
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.app.Service.html#android.app.Service.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Service
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.content.ContentProvider.html#android.content.ContentProvider.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.content.ContentProvider
+</A></nobr><br>
+<!-- Method onViewClicked -->
+<nobr><A HREF="android.inputmethodservice.InputMethodService.html#android.inputmethodservice.InputMethodService.onViewClicked_added(boolean)" class="hiddenlink" target="rightframe"><b>onViewClicked</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method openContactPhotoInputStream -->
+<nobr><A HREF="android.provider.ContactsContract.Contacts.html#android.provider.ContactsContract.Contacts.openContactPhotoInputStream_added(android.content.ContentResolver, android.net.Uri, boolean)" class="hiddenlink" target="rightframe"><b>openContactPhotoInputStream</b>
+(<code>ContentResolver, Uri, boolean</code>)</A></nobr><br>
+<!-- Method overridesImplicitlyEnabledSubtype -->
+<i>overridesImplicitlyEnabledSubtype</i><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.overridesImplicitlyEnabledSubtype_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.inputmethod.InputMethodSubtype
+</A></nobr><br>
+<!-- Field overridesImplicitlyEnabledSubtype -->
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.overridesImplicitlyEnabledSubtype" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field packageNames -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.packageNames" class="hiddenlink" target="rightframe">packageNames</A>
+</nobr><br>
+<!-- Field PASSWORD_QUALITY_BIOMETRIC_WEAK -->
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK" class="hiddenlink" target="rightframe">PASSWORD_QUALITY_BIOMETRIC_WEAK</A>
+</nobr><br>
+<!-- Method perspectiveM -->
+<nobr><A HREF="android.opengl.Matrix.html#android.opengl.Matrix.perspectiveM_added(float[], int, float, float, float, float)" class="hiddenlink" target="rightframe"><b>perspectiveM</b>
+(<code>float[], int, float, float, float, float</code>)</A></nobr><br>
+<!-- Field PHOTO_FILE_ID -->
+<i>PHOTO_FILE_ID</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html#android.provider.ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.CommonDataKinds.Photo</A>
+</nobr><br>
+<!-- Field PHOTO_FILE_ID -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.Contacts.Photo</A>
+</nobr><br>
+<!-- Field PHOTO_FILE_ID -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.ContactsColumns</A>
+</nobr><br>
+<!-- Class PopupMenu.OnDismissListener -->
+<A HREF="pkg_android.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<!-- Field PRIMARY_ACCOUNT_NAME -->
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_NAME" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_NAME</A>
+</nobr><br>
+<!-- Field PRIMARY_ACCOUNT_TYPE -->
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_TYPE" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_TYPE</A>
+</nobr><br>
+<!-- Field PROFILE_CONTENT_URI -->
+<i>PROFILE_CONTENT_URI</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html#android.provider.ContactsContract.RawContactsEntity.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsEntity</A>
+</nobr><br>
+<!-- Field PROFILE_CONTENT_URI -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.StatusUpdates.html#android.provider.ContactsContract.StatusUpdates.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.StatusUpdates</A>
+</nobr><br>
+<!-- Class Property -->
+<A HREF="pkg_android.util.html#Property" class="hiddenlink" target="rightframe"><b>Property</b></A><br>
+<!-- Field publicKey -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.publicKey" class="hiddenlink" target="rightframe">publicKey</A>
+</nobr><br>
+<!-- Field RADIO_NFC -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.System.html#android.provider.Settings.System.RADIO_NFC" class="hiddenlink" target="rightframe">RADIO_NFC</A>
+</nobr><br>
+<!-- Field RAW_CONTACT_IS_USER_PROFILE -->
+<nobr><A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.RAW_CONTACT_IS_USER_PROFILE" class="hiddenlink" target="rightframe">RAW_CONTACT_IS_USER_PROFILE</A>
+</nobr><br>
+<!-- Field READ_PROFILE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.READ_PROFILE" class="hiddenlink" target="rightframe">READ_PROFILE</A>
+</nobr><br>
+<!-- Method rebootWipeCache -->
+<nobr><A HREF="android.os.RecoverySystem.html#android.os.RecoverySystem.rebootWipeCache_added(android.content.Context)" class="hiddenlink" target="rightframe"><b>rebootWipeCache</b>
+(<code>Context</code>)</A></nobr><br>
+<!-- Method registerActivityLifecycleCallbacks -->
+<nobr><A HREF="android.app.Application.html#android.app.Application.registerActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>registerActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<!-- Method registerComponentCallbacks -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.registerComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>registerComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<!-- Method registerRemoteControlClient -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.registerRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>registerRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<!-- Field RELATIVE_HORIZONTAL_GRAVITY_MASK -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK" class="hiddenlink" target="rightframe">RELATIVE_HORIZONTAL_GRAVITY_MASK</A>
+</nobr><br>
+<!-- Field RELATIVE_LAYOUT_DIRECTION -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_LAYOUT_DIRECTION" class="hiddenlink" target="rightframe">RELATIVE_LAYOUT_DIRECTION</A>
+</nobr><br>
+<!-- Method release -->
+<i>release</i><br>
+ <nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.graphics.SurfaceTexture
+</A></nobr><br>
+<!-- Method release -->
+ <nobr><A HREF="android.view.Surface.html#android.view.Surface.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.Surface
+</A></nobr><br>
+<!-- Class RemoteControlClient -->
+<A HREF="pkg_android.media.html#RemoteControlClient" class="hiddenlink" target="rightframe"><b>RemoteControlClient</b></A><br>
+<!-- Class RemoteControlClient.MetadataEditor -->
+<A HREF="pkg_android.media.html#RemoteControlClient.MetadataEditor" class="hiddenlink" target="rightframe"><b>RemoteControlClient.MetadataEditor</b></A><br>
+<!-- Method removeAccessibilityStateChangeListener -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.removeAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Method requestSendAccessibilityEvent -->
+<i>requestSendAccessibilityEvent</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewGroup
+</A></nobr><br>
+<!-- Method requestSendAccessibilityEvent -->
+ <nobr><A HREF="android.view.ViewParent.html#android.view.ViewParent.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewParent
+</A></nobr><br>
+<!-- Field requiresFadingEdge -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.requiresFadingEdge" class="hiddenlink" target="rightframe">requiresFadingEdge</A>
+</nobr><br>
+<!-- Method resetResolvedDrawables -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedDrawables_added()" class="hiddenlink" target="rightframe"><b>resetResolvedDrawables</b>
+()</A></nobr><br>
+<!-- Method resetResolvedLayoutDirection -->
+<i>resetResolvedLayoutDirection</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.ViewGroup
+</A></nobr><br>
+<!-- Method resetResolvedLayoutDirection -->
+ <nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.TextView
+</A></nobr><br>
+<!-- Method resetResolvedTextDirection -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedTextDirection_added()" class="hiddenlink" target="rightframe"><b>resetResolvedTextDirection</b>
+()</A></nobr><br>
+<!-- Method resolveDrawables -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveDrawables_added()" class="hiddenlink" target="rightframe"><b>resolveDrawables</b>
+()</A></nobr><br>
+<!-- Method resolveTextDirection -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveTextDirection_added()" class="hiddenlink" target="rightframe"><b>resolveTextDirection</b>
+()</A></nobr><br>
+<!-- Field ROTATION -->
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION" class="hiddenlink" target="rightframe">ROTATION</A>
+</nobr><br>
+<!-- Field ROTATION_X -->
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_X" class="hiddenlink" target="rightframe">ROTATION_X</A>
+</nobr><br>
+<!-- Field ROTATION_Y -->
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_Y" class="hiddenlink" target="rightframe">ROTATION_Y</A>
+</nobr><br>
+<!-- Field rowCount -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowCount" class="hiddenlink" target="rightframe">rowCount</A>
+</nobr><br>
+<!-- Field rowOrderPreserved -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowOrderPreserved" class="hiddenlink" target="rightframe">rowOrderPreserved</A>
+</nobr><br>
+<!-- Class RSTextureView -->
+<A HREF="pkg_android.renderscript.html#RSTextureView" class="hiddenlink" target="rightframe"><b>RSTextureView</b></A><br>
+<!-- Field SCALE_X -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_X" class="hiddenlink" target="rightframe">SCALE_X</A>
+</nobr><br>
+<!-- Field SCALE_Y -->
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_Y" class="hiddenlink" target="rightframe">SCALE_Y</A>
+</nobr><br>
+<!-- Field SCO_AUDIO_STATE_CONNECTING -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.SCO_AUDIO_STATE_CONNECTING" class="hiddenlink" target="rightframe">SCO_AUDIO_STATE_CONNECTING</A>
+</nobr><br>
+<!-- Method send -->
+<nobr><A HREF="android.app.PendingIntent.html#android.app.PendingIntent.send_added(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>send</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<!-- Method sendIntent -->
+<nobr><A HREF="android.content.IntentSender.html#android.content.IntentSender.sendIntent_added(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>sendIntent</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<!-- Field SERVICE_META_DATA -->
+<i>SERVICE_META_DATA</i><br>
+<nobr> in
+<A HREF="android.accessibilityservice.AccessibilityService.html#android.accessibilityservice.AccessibilityService.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.accessibilityservice.AccessibilityService</A>
+</nobr><br>
+<!-- Field SERVICE_META_DATA -->
+<nobr> in
+<A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.speech.tts.TextToSpeech.Engine</A>
+</nobr><br>
+<!-- Method setAccessibilityDelegate -->
+<nobr><A HREF="android.view.View.html#android.view.View.setAccessibilityDelegate_added(android.view.View.AccessibilityDelegate)" class="hiddenlink" target="rightframe"><b>setAccessibilityDelegate</b>
+(<code>AccessibilityDelegate</code>)</A></nobr><br>
+<!-- Method setActionProvider -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setActionProvider_added(android.view.ActionProvider)" class="hiddenlink" target="rightframe"><b>setActionProvider</b>
+(<code>ActionProvider</code>)</A></nobr><br>
+<!-- Method setAdditionalInputMethodSubtypes -->
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.setAdditionalInputMethodSubtypes_added(java.lang.String, android.view.inputmethod.InputMethodSubtype[])" class="hiddenlink" target="rightframe"><b>setAdditionalInputMethodSubtypes</b>
+(<code>String, InputMethodSubtype[]</code>)</A></nobr><br>
+<!-- Method setAllCaps -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.setAllCaps_added(boolean)" class="hiddenlink" target="rightframe"><b>setAllCaps</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAnimateParentHierarchy -->
+<nobr><A HREF="android.animation.LayoutTransition.html#android.animation.LayoutTransition.setAnimateParentHierarchy_added(boolean)" class="hiddenlink" target="rightframe"><b>setAnimateParentHierarchy</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAutoExposureLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoExposureLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoExposureLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAutoWhiteBalanceLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoWhiteBalanceLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoWhiteBalanceLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setCameraDisabled -->
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setCameraDisabled_added(android.content.ComponentName, boolean)" class="hiddenlink" target="rightframe"><b>setCameraDisabled</b>
+(<code>ComponentName, boolean</code>)</A></nobr><br>
+<!-- Method setContentDescription -->
+<i>setContentDescription</i><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+<!-- Method setContentDescription -->
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+<!-- Method setDataSource -->
+<i>setDataSource</i><br>
+ <nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.setDataSource_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>String, Map<String, String></code>)</b> in android.media.MediaMetadataRetriever
+</A></nobr><br>
+<!-- Method setDataSource -->
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, Uri, Map<String, String></code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+<!-- Method setDataSource -->
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+<!-- Method setDimAmount -->
+<nobr><A HREF="android.view.Window.html#android.view.Window.setDimAmount_added(float)" class="hiddenlink" target="rightframe"><b>setDimAmount</b>
+(<code>float</code>)</A></nobr><br>
+<!-- Method setDividerPadding -->
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.setDividerPadding_added(int)" class="hiddenlink" target="rightframe"><b>setDividerPadding</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setFaceDetectionListener -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.setFaceDetectionListener_added(android.hardware.Camera.FaceDetectionListener)" class="hiddenlink" target="rightframe"><b>setFaceDetectionListener</b>
+(<code>FaceDetectionListener</code>)</A></nobr><br>
+<!-- Method setFitsSystemWindows -->
+<nobr><A HREF="android.view.View.html#android.view.View.setFitsSystemWindows_added(boolean)" class="hiddenlink" target="rightframe"><b>setFitsSystemWindows</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setFocusAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setFocusAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setFocusAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<!-- Method setHinting -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.setHinting_added(int)" class="hiddenlink" target="rightframe"><b>setHinting</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setHomeButtonEnabled -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setHomeButtonEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setHomeButtonEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setHovered -->
+<nobr><A HREF="android.view.View.html#android.view.View.setHovered_added(boolean)" class="hiddenlink" target="rightframe"><b>setHovered</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setIcon -->
+<i>setIcon</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setIcon -->
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setImeOptions -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setImeOptions_added(int)" class="hiddenlink" target="rightframe"><b>setImeOptions</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setInputType -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setInputType_added(int)" class="hiddenlink" target="rightframe"><b>setInputType</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setKeyManagers -->
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setKeyManagers_added(javax.net.ssl.KeyManager[])" class="hiddenlink" target="rightframe"><b>setKeyManagers</b>
+(<code>KeyManager[]</code>)</A></nobr><br>
+<!-- Method setLocation -->
+<nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setLocation_added(float, float)" class="hiddenlink" target="rightframe"><b>setLocation</b>
+(<code>float, float</code>)</A></nobr><br>
+<!-- Method setLogo -->
+<i>setLogo</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setLogo -->
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setMenuVisibility -->
+<nobr><A HREF="android.app.Fragment.html#android.app.Fragment.setMenuVisibility_added(boolean)" class="hiddenlink" target="rightframe"><b>setMenuVisibility</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setMeteringAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setMeteringAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setMeteringAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<!-- Method setNdefPushMessage -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessage_added(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessage</b>
+(<code>NdefMessage, Activity, </code>)</A></nobr><br>
+<!-- Method setNdefPushMessageCallback -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessageCallback_added(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessageCallback</b>
+(<code>CreateNdefMessageCallback, Activity, </code>)</A></nobr><br>
+<!-- Method setOnActionExpandListener -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setOnActionExpandListener_added(android.view.MenuItem.OnActionExpandListener)" class="hiddenlink" target="rightframe"><b>setOnActionExpandListener</b>
+(<code>OnActionExpandListener</code>)</A></nobr><br>
+<!-- Method setOnDismissListener -->
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.setOnDismissListener_added(android.widget.PopupMenu.OnDismissListener)" class="hiddenlink" target="rightframe"><b>setOnDismissListener</b>
+(<code>OnDismissListener</code>)</A></nobr><br>
+<!-- Method setOnHoverListener -->
+<nobr><A HREF="android.view.View.html#android.view.View.setOnHoverListener_added(android.view.View.OnHoverListener)" class="hiddenlink" target="rightframe"><b>setOnHoverListener</b>
+(<code>OnHoverListener</code>)</A></nobr><br>
+<!-- Method setOnNdefPushCompleteCallback -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setOnNdefPushCompleteCallback_added(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setOnNdefPushCompleteCallback</b>
+(<code>OnNdefPushCompleteCallback, Activity, </code>)</A></nobr><br>
+<!-- Method setProgress -->
+<nobr><A HREF="android.app.Notification.Builder.html#android.app.Notification.Builder.setProgress_added(int, int, boolean)" class="hiddenlink" target="rightframe"><b>setProgress</b>
+(<code>int, int, boolean</code>)</A></nobr><br>
+<!-- Method setProperty -->
+<i>setProperty</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method setProperty -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method setRecordingHint -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setRecordingHint_added(boolean)" class="hiddenlink" target="rightframe"><b>setRecordingHint</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setRemoteAdapter -->
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_added(int, android.content.Intent)" class="hiddenlink" target="rightframe"><b>setRemoteAdapter</b>
+(<code>int, Intent</code>)</A></nobr><br>
+<!-- Method setScrollX -->
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollX_added(int)" class="hiddenlink" target="rightframe"><b>setScrollX</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setScrollY -->
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollY_added(int)" class="hiddenlink" target="rightframe"><b>setScrollY</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setShowAsActionFlags -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setShowAsActionFlags_added(int)" class="hiddenlink" target="rightframe"><b>setShowAsActionFlags</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setSplitBackgroundDrawable -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setSplitBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setSplitBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<!-- Method setStackedBackgroundDrawable -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setStackedBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setStackedBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<!-- Method setStartDelay -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.setStartDelay_added(long)" class="hiddenlink" target="rightframe"><b>setStartDelay</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Method setStrict -->
+<nobr><A HREF="android.database.sqlite.SQLiteQueryBuilder.html#android.database.sqlite.SQLiteQueryBuilder.setStrict_added(boolean)" class="hiddenlink" target="rightframe"><b>setStrict</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setSurface -->
+<nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setSurface_added(android.view.Surface)" class="hiddenlink" target="rightframe"><b>setSurface</b>
+(<code>Surface</code>)</A></nobr><br>
+<!-- Method setSurfaceTexture -->
+<nobr><A HREF="android.renderscript.RenderScriptGL.html#android.renderscript.RenderScriptGL.setSurfaceTexture_added(android.graphics.SurfaceTexture, int, int)" class="hiddenlink" target="rightframe"><b>setSurfaceTexture</b>
+(<code>SurfaceTexture, int, int</code>)</A></nobr><br>
+<!-- Method setTag -->
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.setTag_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>setTag</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method setTextZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextZoom_added(int)" class="hiddenlink" target="rightframe"><b>setTextZoom</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setThreadStatsTag -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.setThreadStatsTag_added(int)" class="hiddenlink" target="rightframe"><b>setThreadStatsTag</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setTimeout -->
+<i>setTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+<!-- Method setTimeout -->
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+<!-- Method setTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+<!-- Method setTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<!-- Method setTrustManagers -->
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setTrustManagers_added(javax.net.ssl.TrustManager[])" class="hiddenlink" target="rightframe"><b>setTrustManagers</b>
+(<code>TrustManager[]</code>)</A></nobr><br>
+<!-- Method setUiOptions -->
+<i>setUiOptions</i><br>
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.view.Window
+</A></nobr><br>
+<!-- Method setUiOptions -->
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.view.Window
+</A></nobr><br>
+<!-- Class ShareActionProvider -->
+<A HREF="pkg_android.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<!-- Class ShareActionProvider.OnShareTargetSelectedListener -->
+<A HREF="pkg_android.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<!-- Constructor Short2 -->
+<nobr><A HREF="android.renderscript.Short2.html#android.renderscript.Short2.ctor_added(short, short)" class="hiddenlink" target="rightframe"><b>Short2</b>
+(<code>short, short</code>)</A></nobr> constructor<br>
+<!-- Constructor Short3 -->
+<nobr><A HREF="android.renderscript.Short3.html#android.renderscript.Short3.ctor_added(short, short, short)" class="hiddenlink" target="rightframe"><b>Short3</b>
+(<code>short, short, short</code>)</A></nobr> constructor<br>
+<!-- Constructor Short4 -->
+<nobr><A HREF="android.renderscript.Short4.html#android.renderscript.Short4.ctor_added(short, short, short, short)" class="hiddenlink" target="rightframe"><b>Short4</b>
+(<code>short, short, short, short</code>)</A></nobr> constructor<br>
+<!-- Method shouldDelayChildPressedState -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.shouldDelayChildPressedState_added()" class="hiddenlink" target="rightframe"><b>shouldDelayChildPressedState</b>
+()</A></nobr><br>
+<!-- Field SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" class="hiddenlink" target="rightframe">SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW</A>
+</nobr><br>
+<!-- Field SOURCE_STYLUS -->
+<nobr><A HREF="android.view.InputDevice.html#android.view.InputDevice.SOURCE_STYLUS" class="hiddenlink" target="rightframe">SOURCE_STYLUS</A>
+</nobr><br>
+<!-- Class Space -->
+<A HREF="pkg_android.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<!-- Field SSL_DATE_INVALID -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_DATE_INVALID" class="hiddenlink" target="rightframe">SSL_DATE_INVALID</A>
+</nobr><br>
+<!-- Field SSL_INVALID -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_INVALID" class="hiddenlink" target="rightframe">SSL_INVALID</A>
+</nobr><br>
+<!-- Constructor SslError -->
+<i>SslError</i><br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, android.net.http.SslCertificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, SslCertificate, String</code>)</A></nobr> constructor<br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, java.security.cert.X509Certificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, X509Certificate, String</code>)</A></nobr> constructor<br>
+<!-- Constructor StackView -->
+<nobr><A HREF="android.widget.StackView.html#android.widget.StackView.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>StackView</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<!-- Method start -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.start_added()" class="hiddenlink" target="rightframe"><b>start</b>
+()</A></nobr><br>
+<!-- Field START -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.START" class="hiddenlink" target="rightframe">START</A>
+</nobr><br>
+<!-- Method startFaceDetection -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.startFaceDetection_added()" class="hiddenlink" target="rightframe"><b>startFaceDetection</b>
+()</A></nobr><br>
+<!-- Method startWithFragment -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.startWithFragment_added(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int)" class="hiddenlink" target="rightframe"><b>startWithFragment</b>
+(<code>String, Bundle, Fragment, int, int, int</code>)</A></nobr><br>
+<!-- Field state_drag_can_accept -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_can_accept" class="hiddenlink" target="rightframe">state_drag_can_accept</A>
+</nobr><br>
+<!-- Field state_drag_hovered -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_hovered" class="hiddenlink" target="rightframe">state_drag_hovered</A>
+</nobr><br>
+<!-- Field state_hovered -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_hovered" class="hiddenlink" target="rightframe">state_hovered</A>
+</nobr><br>
+<!-- Field status_bar_notification_info_maxnum -->
+<nobr><A HREF="android.R.integer.html#android.R.integer.status_bar_notification_info_maxnum" class="hiddenlink" target="rightframe">status_bar_notification_info_maxnum</A>
+</nobr><br>
+<!-- Field status_bar_notification_info_overflow -->
+<nobr><A HREF="android.R.string.html#android.R.string.status_bar_notification_info_overflow" class="hiddenlink" target="rightframe">status_bar_notification_info_overflow</A>
+</nobr><br>
+<!-- Method stopFaceDetection -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.stopFaceDetection_added()" class="hiddenlink" target="rightframe"><b>stopFaceDetection</b>
+()</A></nobr><br>
+<!-- Field stopWithTask -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.stopWithTask" class="hiddenlink" target="rightframe">stopWithTask</A>
+</nobr><br>
+<!-- Field subtypeExtraValue -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeExtraValue" class="hiddenlink" target="rightframe">subtypeExtraValue</A>
+</nobr><br>
+<!-- Field subtypeLocale -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeLocale" class="hiddenlink" target="rightframe">subtypeLocale</A>
+</nobr><br>
+<!-- Field SUGGEST_COLUMN_LAST_ACCESS_HINT -->
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT" class="hiddenlink" target="rightframe">SUGGEST_COLUMN_LAST_ACCESS_HINT</A>
+</nobr><br>
+<!-- Class SuggestionSpan -->
+<A HREF="pkg_android.text.style.html#SuggestionSpan" class="hiddenlink" target="rightframe"><b>SuggestionSpan</b></A><br>
+<!-- Constructor Surface -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.ctor_added(android.graphics.SurfaceTexture)" class="hiddenlink" target="rightframe"><b>Surface</b>
+(<code>SurfaceTexture</code>)</A></nobr> constructor<br>
+<!-- Class Switch -->
+<A HREF="pkg_android.widget.html#Switch" class="hiddenlink" target="rightframe"><b>Switch</b></A><br>
+<!-- Field switchMinWidth -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchMinWidth" class="hiddenlink" target="rightframe">switchMinWidth</A>
+</nobr><br>
+<!-- Field switchPadding -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPadding" class="hiddenlink" target="rightframe">switchPadding</A>
+</nobr><br>
+<!-- Class SwitchPreference -->
+<A HREF="pkg_android.preference.html#SwitchPreference" class="hiddenlink" target="rightframe"><b>SwitchPreference</b></A><br>
+<!-- Field switchPreferenceStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPreferenceStyle" class="hiddenlink" target="rightframe">switchPreferenceStyle</A>
+</nobr><br>
+<!-- Field switchTextAppearance -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextAppearance" class="hiddenlink" target="rightframe">switchTextAppearance</A>
+</nobr><br>
+<!-- Field switchTextOff -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOff" class="hiddenlink" target="rightframe">switchTextOff</A>
+</nobr><br>
+<!-- Field switchTextOn -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOn" class="hiddenlink" target="rightframe">switchTextOn</A>
+</nobr><br>
+<!-- Class SynthesisCallback -->
+<A HREF="pkg_android.speech.tts.html#SynthesisCallback" class="hiddenlink" target="rightframe"><b><i>SynthesisCallback</i></b></A><br>
+<!-- Class SynthesisRequest -->
+<A HREF="pkg_android.speech.tts.html#SynthesisRequest" class="hiddenlink" target="rightframe"><b>SynthesisRequest</b></A><br>
+<!-- Field SYSTEM_UI_FLAG_HIDE_NAVIGATION -->
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_HIDE_NAVIGATION</A>
+</nobr><br>
+<!-- Field SYSTEM_UI_FLAG_LOW_PROFILE -->
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_LOW_PROFILE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_LOW_PROFILE</A>
+</nobr><br>
+<!-- Field SYSTEM_UI_FLAG_VISIBLE -->
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_VISIBLE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_VISIBLE</A>
+</nobr><br>
+<!-- Method tagSocket -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.tagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>tagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<!-- Field targetDescriptions -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.targetDescriptions" class="hiddenlink" target="rightframe">targetDescriptions</A>
+</nobr><br>
+<!-- Field TEXT_SERVICES_MANAGER_SERVICE -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.TEXT_SERVICES_MANAGER_SERVICE" class="hiddenlink" target="rightframe">TEXT_SERVICES_MANAGER_SERVICE</A>
+</nobr><br>
+<!-- Field textAllCaps -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAllCaps" class="hiddenlink" target="rightframe">textAllCaps</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_DialogWindowTitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_DialogWindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_DialogWindowTitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Large_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Medium -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Medium_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_SearchResult_Subtitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Subtitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_SearchResult_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Title</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Small_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Menu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Menu</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_Button -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_Button" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_Button</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_DropDownHint -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownHint" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownHint</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_DropDownItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownItem</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_EditText -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_EditText" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_EditText</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_IconMenu_Item -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_IconMenu_Item" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_IconMenu_Item</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_PopupMenu_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Large</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_PopupMenu_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Small</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TabWidget -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TabWidget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TabWidget</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TextView_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_PopupMenu</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_WindowTitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_WindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_WindowTitle</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionBar_Menu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Menu</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionBar_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionMode_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_SuggestionHighlight -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_SuggestionHighlight" class="hiddenlink" target="rightframe">TextAppearance_SuggestionHighlight</A>
+</nobr><br>
+<!-- Field textAppearanceListItem -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItem" class="hiddenlink" target="rightframe">textAppearanceListItem</A>
+</nobr><br>
+<!-- Field textAppearanceListItemSmall -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItemSmall" class="hiddenlink" target="rightframe">textAppearanceListItemSmall</A>
+</nobr><br>
+<!-- Field textEditSuggestionItemLayout -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textEditSuggestionItemLayout" class="hiddenlink" target="rightframe">textEditSuggestionItemLayout</A>
+</nobr><br>
+<!-- Field textSuggestionsWindowStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textSuggestionsWindowStyle" class="hiddenlink" target="rightframe">textSuggestionsWindowStyle</A>
+</nobr><br>
+<!-- Constructor TextToSpeech -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" class="hiddenlink" target="rightframe"><b>TextToSpeech</b>
+(<code>Context, OnInitListener, String</code>)</A></nobr> constructor<br>
+<!-- Class TextToSpeech.EngineInfo -->
+<A HREF="pkg_android.speech.tts.html#TextToSpeech.EngineInfo" class="hiddenlink" target="rightframe"><b>TextToSpeech.EngineInfo</b></A><br>
+<!-- Class TextToSpeechService -->
+<A HREF="pkg_android.speech.tts.html#TextToSpeechService" class="hiddenlink" target="rightframe"><b>TextToSpeechService</b></A><br>
+<!-- Class TextureView -->
+<A HREF="pkg_android.view.html#TextureView" class="hiddenlink" target="rightframe"><b>TextureView</b></A><br>
+<!-- Class TextureView.SurfaceTextureListener -->
+<A HREF="pkg_android.view.html#TextureView.SurfaceTextureListener" class="hiddenlink" target="rightframe"><b><i>TextureView.SurfaceTextureListener</i></b></A><br>
+<!-- Field THEME_DEVICE_DEFAULT_DARK -->
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_DARK</A>
+</nobr><br>
+<!-- Field THEME_DEVICE_DEFAULT_LIGHT -->
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_LIGHT</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault" class="hiddenlink" target="rightframe">Theme_DeviceDefault</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog_NoActionBar_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_DialogWhenLarge -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_DialogWhenLarge_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_InputMethod -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_InputMethod" class="hiddenlink" target="rightframe">Theme_DeviceDefault_InputMethod</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_DarkActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DarkActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_DialogWhenLarge -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_NoActionBar_Fullscreen -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar_Fullscreen</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Panel -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Panel</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_NoActionBar_Fullscreen -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar_Fullscreen</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Panel -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Panel</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Wallpaper -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Wallpaper_NoTitleBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper_NoTitleBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper_NoTitleBar</A>
+</nobr><br>
+<!-- Field Theme_Holo_Light_DarkActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_Holo_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_Holo_Light_DarkActionBar</A>
+</nobr><br>
+<!-- Field thumbTextPadding -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.thumbTextPadding" class="hiddenlink" target="rightframe">thumbTextPadding</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_ERASER -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_ERASER" class="hiddenlink" target="rightframe">TOOL_TYPE_ERASER</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_FINGER -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_FINGER" class="hiddenlink" target="rightframe">TOOL_TYPE_FINGER</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_MOUSE -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_MOUSE" class="hiddenlink" target="rightframe">TOOL_TYPE_MOUSE</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_STYLUS -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_STYLUS" class="hiddenlink" target="rightframe">TOOL_TYPE_STYLUS</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_UNKNOWN -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_UNKNOWN" class="hiddenlink" target="rightframe">TOOL_TYPE_UNKNOWN</A>
+</nobr><br>
+<!-- Method toShortString -->
+<nobr><A HREF="android.graphics.RectF.html#android.graphics.RectF.toShortString_added()" class="hiddenlink" target="rightframe"><b>toShortString</b>
+()</A></nobr><br>
+<!-- Field TOUCH_EXPLORATION_ENABLED -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TOUCH_EXPLORATION_ENABLED" class="hiddenlink" target="rightframe">TOUCH_EXPLORATION_ENABLED</A>
+</nobr><br>
+<!-- Field track -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.track" class="hiddenlink" target="rightframe">track</A>
+</nobr><br>
+<!-- Field TRANSLATION_X -->
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_X" class="hiddenlink" target="rightframe">TRANSLATION_X</A>
+</nobr><br>
+<!-- Field TRANSLATION_Y -->
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_Y" class="hiddenlink" target="rightframe">TRANSLATION_Y</A>
+</nobr><br>
+<!-- Class TwoStatePreference -->
+<A HREF="pkg_android.preference.html#TwoStatePreference" class="hiddenlink" target="rightframe"><b>TwoStatePreference</b></A><br>
+<!-- Field TYPE_AMBIENT_TEMPERATURE -->
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_AMBIENT_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_AMBIENT_TEMPERATURE</A>
+</nobr><br>
+<!-- Field TYPE_DIRECTORY -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_DIRECTORY" class="hiddenlink" target="rightframe">TYPE_DIRECTORY</A>
+</nobr><br>
+<!-- Field TYPE_DUMMY -->
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.TYPE_DUMMY" class="hiddenlink" target="rightframe">TYPE_DUMMY</A>
+</nobr><br>
+<!-- Field TYPE_FILE -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_FILE" class="hiddenlink" target="rightframe">TYPE_FILE</A>
+</nobr><br>
+<!-- Field TYPE_RELATIVE_HUMIDITY -->
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_RELATIVE_HUMIDITY" class="hiddenlink" target="rightframe">TYPE_RELATIVE_HUMIDITY</A>
+</nobr><br>
+<!-- Field TYPE_TOUCH_EXPLORATION_GESTURE_END -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_END</A>
+</nobr><br>
+<!-- Field TYPE_TOUCH_EXPLORATION_GESTURE_START -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_START</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_HOVER_ENTER -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_ENTER</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_HOVER_EXIT -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_EXIT</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_SCROLLED -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED" class="hiddenlink" target="rightframe">TYPE_VIEW_SCROLLED</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_TEXT_SELECTION_CHANGED -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED" class="hiddenlink" target="rightframe">TYPE_VIEW_TEXT_SELECTION_CHANGED</A>
+</nobr><br>
+<!-- Field TYPE_WINDOW_CONTENT_CHANGED -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOW_CONTENT_CHANGED</A>
+</nobr><br>
+<!-- Method U16_2 -->
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U16_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U16_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U32_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U32_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U32_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U64_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U64_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U64_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U8_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U8_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Field UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW -->
+<nobr><A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" class="hiddenlink" target="rightframe">UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW</A>
+</nobr><br>
+<!-- Field uiOptions -->
+<i>uiOptions</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.uiOptions" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field uiOptions -->
+<nobr> in
+<A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ActivityInfo</A>
+</nobr><br>
+<!-- Field uiOptions -->
+<nobr> in
+<A HREF="android.content.pm.ApplicationInfo.html#android.content.pm.ApplicationInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ApplicationInfo</A>
+</nobr><br>
+<!-- Method unregisterActivityLifecycleCallbacks -->
+<nobr><A HREF="android.app.Application.html#android.app.Application.unregisterActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<!-- Method unregisterComponentCallbacks -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.unregisterComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<!-- Method unregisterRemoteControlClient -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.unregisterRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>unregisterRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<!-- Method untagSocket -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.untagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>untagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<!-- Field USAGE_GRAPHICS_RENDER_TARGET -->
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.USAGE_GRAPHICS_RENDER_TARGET" class="hiddenlink" target="rightframe">USAGE_GRAPHICS_RENDER_TARGET</A>
+</nobr><br>
+<!-- Field useDefaultMargins -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.useDefaultMargins" class="hiddenlink" target="rightframe">useDefaultMargins</A>
+</nobr><br>
+<!-- Field USES_POLICY_DISABLE_CAMERA -->
+<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_DISABLE_CAMERA" class="hiddenlink" target="rightframe">USES_POLICY_DISABLE_CAMERA</A>
+</nobr><br>
+<!-- Field VERIFICATION_ALLOW -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_ALLOW" class="hiddenlink" target="rightframe">VERIFICATION_ALLOW</A>
+</nobr><br>
+<!-- Field VERIFICATION_REJECT -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_REJECT" class="hiddenlink" target="rightframe">VERIFICATION_REJECT</A>
+</nobr><br>
+<!-- Method verifyPendingInstall -->
+<i>verifyPendingInstall</i><br>
+ <nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.content.pm.PackageManager
+</A></nobr><br>
+<!-- Method verifyPendingInstall -->
+ <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.test.mock.MockPackageManager
+</A></nobr><br>
+<!-- Class View.AccessibilityDelegate -->
+<A HREF="pkg_android.view.html#View.AccessibilityDelegate" class="hiddenlink" target="rightframe"><b>View.AccessibilityDelegate</b></A><br>
+<!-- Class View.OnHoverListener -->
+<A HREF="pkg_android.view.html#View.OnHoverListener" class="hiddenlink" target="rightframe"><b><i>View.OnHoverListener</i></b></A><br>
+<!-- Method viewClicked -->
+<i>viewClicked</i><br>
+ <nobr><A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html#android.inputmethodservice.InputMethodService.InputMethodSessionImpl.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.inputmethodservice.InputMethodService.InputMethodSessionImpl
+</A></nobr><br>
+<!-- Method viewClicked -->
+ <nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.viewClicked_added(android.view.View)" class="hiddenlink" target="rightframe">type <b>
+(<code>View</code>)</b> in android.view.inputmethod.InputMethodManager
+</A></nobr><br>
+<!-- Method viewClicked -->
+ <nobr><A HREF="android.view.inputmethod.InputMethodSession.html#android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.view.inputmethod.InputMethodSession
+</A></nobr><br>
+<!-- Class VoicemailContract -->
+<A HREF="pkg_android.provider.html#VoicemailContract" class="hiddenlink" target="rightframe"><b>VoicemailContract</b></A><br>
+<!-- Class VoicemailContract.Status -->
+<A HREF="pkg_android.provider.html#VoicemailContract.Status" class="hiddenlink" target="rightframe"><b>VoicemailContract.Status</b></A><br>
+<!-- Class VoicemailContract.Voicemails -->
+<A HREF="pkg_android.provider.html#VoicemailContract.Voicemails" class="hiddenlink" target="rightframe"><b>VoicemailContract.Voicemails</b></A><br>
+<!-- Class VpnService -->
+<A HREF="pkg_android.net.html#VpnService" class="hiddenlink" target="rightframe"><b>VpnService</b></A><br>
+<!-- Class VpnService.Builder -->
+<A HREF="pkg_android.net.html#VpnService.Builder" class="hiddenlink" target="rightframe"><b>VpnService.Builder</b></A><br>
+<!-- Field Widget_DeviceDefault -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault" class="hiddenlink" target="rightframe">Widget_DeviceDefault</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_TabBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_TabText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_TabView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton_CloseMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_CloseMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton_Overflow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_Overflow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton_TextButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_TextButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_TextButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_AutoCompleteTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_AutoCompleteTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Borderless -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Inset -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Inset</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Toggle -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Toggle</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CalendarView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CalendarView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CompoundButton_CheckBox -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_CheckBox</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CompoundButton_RadioButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_RadioButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CompoundButton_Star -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_Star</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_DatePicker -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DatePicker" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DatePicker</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_DropDownItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_DropDownItem_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_EditText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_EditText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ExpandableListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ExpandableListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_GridView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_GridView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_HorizontalScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_HorizontalScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ImageButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ImageButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_Solid_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabText_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabView_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionButton_CloseMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_CloseMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionButton_Overflow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_Overflow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionMode_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_AutoCompleteTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_AutoCompleteTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Inset -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Inset</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Toggle -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Toggle</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CalendarView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CalendarView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CompoundButton_CheckBox -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_CheckBox</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CompoundButton_RadioButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_RadioButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CompoundButton_Star -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_Star</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_DropDownItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_DropDownItem_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_EditText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_EditText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ExpandableListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ExpandableListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_GridView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_GridView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_HorizontalScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_HorizontalScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ImageButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ImageButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ListPopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListPopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ListView_DropDown -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView_DropDown</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupMenu</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_PopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Horizontal -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Horizontal</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Large_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Small_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Small_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Title</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_RatingBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_RatingBar_Indicator -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Indicator</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_RatingBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_SeekBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_SeekBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Tab -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Tab</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_TabWidget -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TabWidget</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_TextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_TextView_SpinnerItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView_SpinnerItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_WebTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_WebView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ListPopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListPopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ListView_DropDown -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView_DropDown</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupMenu</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_PopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Horizontal -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Horizontal</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Large</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Small_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small_Title</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_RatingBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_RatingBar_Indicator -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Indicator</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_RatingBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_SeekBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_SeekBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Tab -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Tab</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_TabWidget -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TabWidget</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_TextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_TextView_SpinnerItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView_SpinnerItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_WebTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_WebView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebView</A>
+</nobr><br>
+<!-- Field Widget_Holo_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_Holo_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_Solid_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_TabBar_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_TabText_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_TabView_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionMode_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionMode_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Light_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field WIFI_P2P_SERVICE -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.WIFI_P2P_SERVICE" class="hiddenlink" target="rightframe">WIFI_P2P_SERVICE</A>
+</nobr><br>
+<!-- Class WpsInfo -->
+<A HREF="pkg_android.net.wifi.html#WpsInfo" class="hiddenlink" target="rightframe"><b>WpsInfo</b></A><br>
+<!-- Field WRITE_PROFILE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_PROFILE" class="hiddenlink" target="rightframe">WRITE_PROFILE</A>
+</nobr><br>
+<!-- Field X -->
+<A NAME="X"></A>
+<br><font size="+2">X</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.X" class="hiddenlink" target="rightframe">X</A>
+</nobr><br>
+<!-- Field Y -->
+<A NAME="Y"></A>
+<br><font size="+2">Y</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html
new file mode 100644
index 0000000..7958b99
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html
@@ -0,0 +1,4197 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>All Differences</b>
+ <br>
+<A HREF="alldiffs_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Class AbsListView -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.widget.AbsListView.html" class="hiddenlink" target="rightframe">AbsListView</A><br>
+<!-- Class AccessibilityEvent -->
+<A HREF="android.view.accessibility.AccessibilityEvent.html" class="hiddenlink" target="rightframe">AccessibilityEvent</A><br>
+<!-- Field accessibilityEventTypes -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityEventTypes" class="hiddenlink" target="rightframe">accessibilityEventTypes</A>
+</nobr><br>
+<!-- Field accessibilityFeedbackType -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFeedbackType" class="hiddenlink" target="rightframe">accessibilityFeedbackType</A>
+</nobr><br>
+<!-- Field accessibilityFlags -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFlags" class="hiddenlink" target="rightframe">accessibilityFlags</A>
+</nobr><br>
+<!-- Class AccessibilityManager -->
+<A HREF="android.view.accessibility.AccessibilityManager.html" class="hiddenlink" target="rightframe">AccessibilityManager</A><br>
+<!-- Class AccessibilityManager.AccessibilityStateChangeListener -->
+<A HREF="pkg_android.view.accessibility.html#AccessibilityManager.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManager.AccessibilityStateChangeListener</i></b></A><br>
+<!-- Class AccessibilityNodeInfo -->
+<A HREF="pkg_android.view.accessibility.html#AccessibilityNodeInfo" class="hiddenlink" target="rightframe"><b>AccessibilityNodeInfo</b></A><br>
+<!-- Class AccessibilityRecord -->
+<A HREF="pkg_android.view.accessibility.html#AccessibilityRecord" class="hiddenlink" target="rightframe"><b>AccessibilityRecord</b></A><br>
+<!-- Class AccessibilityService -->
+<A HREF="android.accessibilityservice.AccessibilityService.html" class="hiddenlink" target="rightframe">AccessibilityService</A><br>
+<!-- Class AccessibilityServiceInfo -->
+<A HREF="android.accessibilityservice.AccessibilityServiceInfo.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfo</A><br>
+<!-- Class AccessibleObject -->
+<A HREF="java.lang.reflect.AccessibleObject.html" class="hiddenlink" target="rightframe">AccessibleObject</A><br>
+<!-- Class AccountManager -->
+<A HREF="android.accounts.AccountManager.html" class="hiddenlink" target="rightframe">AccountManager</A><br>
+<!-- Field ACTION_APP_ERROR -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_APP_ERROR" class="hiddenlink" target="rightframe">ACTION_APP_ERROR</A>
+</nobr><br>
+<!-- Field ACTION_HOVER_ENTER -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_ENTER" class="hiddenlink" target="rightframe">ACTION_HOVER_ENTER</A>
+</nobr><br>
+<!-- Field ACTION_HOVER_EXIT -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_EXIT" class="hiddenlink" target="rightframe">ACTION_HOVER_EXIT</A>
+</nobr><br>
+<!-- Field ACTION_INSTALL_PACKAGE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_INSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_INSTALL_PACKAGE</A>
+</nobr><br>
+<!-- Field ACTION_MANAGE_NETWORK_USAGE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_MANAGE_NETWORK_USAGE" class="hiddenlink" target="rightframe">ACTION_MANAGE_NETWORK_USAGE</A>
+</nobr><br>
+<!-- Field ACTION_NEW_PICTURE -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_PICTURE" class="hiddenlink" target="rightframe">ACTION_NEW_PICTURE</A>
+</nobr><br>
+<!-- Field ACTION_NEW_VIDEO -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_VIDEO" class="hiddenlink" target="rightframe">ACTION_NEW_VIDEO</A>
+</nobr><br>
+<!-- Field ACTION_NFCSHARING_SETTINGS -->
+<nobr><A HREF="android.provider.Settings.html#android.provider.Settings.ACTION_NFCSHARING_SETTINGS" class="hiddenlink" target="rightframe">ACTION_NFCSHARING_SETTINGS</A>
+</nobr><br>
+<!-- Field ACTION_PACKAGE_FULLY_REMOVED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_FULLY_REMOVED" class="hiddenlink" target="rightframe">ACTION_PACKAGE_FULLY_REMOVED</A>
+</nobr><br>
+<!-- Field ACTION_PACKAGE_INSTALL -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_INSTALL" class="hiddenlink" target="rightframe">ACTION_PACKAGE_INSTALL</A>
+</nobr><br>
+<!-- Field ACTION_PACKAGE_NEEDS_VERIFICATION -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_NEEDS_VERIFICATION" class="hiddenlink" target="rightframe">ACTION_PACKAGE_NEEDS_VERIFICATION</A>
+</nobr><br>
+<!-- Field ACTION_SCO_AUDIO_STATE_CHANGED -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_CHANGED</A>
+</nobr><br>
+<!-- Field ACTION_SCO_AUDIO_STATE_UPDATED -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_UPDATED</A>
+</nobr><br>
+<!-- Field ACTION_UMS_CONNECTED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_CONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_CONNECTED</A>
+</nobr><br>
+<!-- Field ACTION_UMS_DISCONNECTED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_DISCONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_DISCONNECTED</A>
+</nobr><br>
+<!-- Field ACTION_UNINSTALL_PACKAGE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UNINSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_UNINSTALL_PACKAGE</A>
+</nobr><br>
+<!-- Class ActionBar -->
+<A HREF="android.app.ActionBar.html" class="hiddenlink" target="rightframe">ActionBar</A><br>
+<!-- Class ActionBar.Tab -->
+<A HREF="android.app.ActionBar.Tab.html" class="hiddenlink" target="rightframe">ActionBar.Tab</A><br>
+<!-- Field actionBarDivider -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarDivider" class="hiddenlink" target="rightframe">actionBarDivider</A>
+</nobr><br>
+<!-- Field actionBarItemBackground -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarItemBackground" class="hiddenlink" target="rightframe">actionBarItemBackground</A>
+</nobr><br>
+<!-- Field actionBarSplitStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarSplitStyle" class="hiddenlink" target="rightframe">actionBarSplitStyle</A>
+</nobr><br>
+<!-- Field actionBarWidgetTheme -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarWidgetTheme" class="hiddenlink" target="rightframe">actionBarWidgetTheme</A>
+</nobr><br>
+<!-- Class ActionMode -->
+<A HREF="android.view.ActionMode.html" class="hiddenlink" target="rightframe">ActionMode</A><br>
+<!-- Field actionModeSelectAllDrawable -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSelectAllDrawable" class="hiddenlink" target="rightframe">actionModeSelectAllDrawable</A>
+</nobr><br>
+<!-- Field actionModeSplitBackground -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSplitBackground" class="hiddenlink" target="rightframe">actionModeSplitBackground</A>
+</nobr><br>
+<!-- Field actionModeStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeStyle" class="hiddenlink" target="rightframe">actionModeStyle</A>
+</nobr><br>
+<!-- Class ActionProvider -->
+<A HREF="pkg_android.view.html#ActionProvider" class="hiddenlink" target="rightframe"><b>ActionProvider</b></A><br>
+<!-- Field actionProviderClass -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionProviderClass" class="hiddenlink" target="rightframe">actionProviderClass</A>
+</nobr><br>
+<!-- Class Activity -->
+<A HREF="android.app.Activity.html" class="hiddenlink" target="rightframe">Activity</A><br>
+<!-- Class ActivityInfo -->
+<A HREF="android.content.pm.ActivityInfo.html" class="hiddenlink" target="rightframe">ActivityInfo</A><br>
+<!-- Class AdapterViewAnimator -->
+<i>AdapterViewAnimator</i><br>
+ <A HREF="android.widget.AdapterViewAnimator.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<!-- Constructor AdapterViewAnimator -->
+ <nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>AdapterViewAnimator</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<!-- Field ADD_VOICEMAIL -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.ADD_VOICEMAIL" class="hiddenlink" target="rightframe">ADD_VOICEMAIL</A>
+</nobr><br>
+<!-- Method addAccessibilityStateChangeListener -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.addAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>addAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Method addF64 -->
+<i>addF64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addF64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addF64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addI64 -->
+<i>addI64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addI64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addI64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addU64 -->
+<i>addU64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addU64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Method addU64 -->
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<!-- Field ALBUM_ART -->
+<nobr><A HREF="android.provider.MediaStore.Audio.AudioColumns.html#android.provider.MediaStore.Audio.AudioColumns.ALBUM_ART" class="hiddenlink" target="rightframe"><strike>ALBUM_ART</strike></A>
+</nobr><br>
+<!-- Class AlertDialog -->
+<A HREF="android.app.AlertDialog.html" class="hiddenlink" target="rightframe">AlertDialog</A><br>
+<!-- Field alignmentMode -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.alignmentMode" class="hiddenlink" target="rightframe">alignmentMode</A>
+</nobr><br>
+<!-- Class Allocation -->
+<A HREF="android.renderscript.Allocation.html" class="hiddenlink" target="rightframe">Allocation</A><br>
+<!-- Class AllocationAdapter -->
+<A HREF="android.renderscript.AllocationAdapter.html" class="hiddenlink" target="rightframe">AllocationAdapter</A><br>
+<!-- Class AllPermission -->
+<A HREF="java.security.AllPermission.html" class="hiddenlink" target="rightframe">AllPermission</A><br>
+<!-- Field ALPHA -->
+<nobr><A HREF="android.view.View.html#android.view.View.ALPHA" class="hiddenlink" target="rightframe">ALPHA</A>
+</nobr><br>
+<!-- Field ANCHOR_TYPE -->
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.ANCHOR_TYPE" class="hiddenlink" target="rightframe">ANCHOR_TYPE</A>
+</nobr><br>
+<!-- Package android -->
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<!-- Package android.accessibilityservice -->
+<A HREF="pkg_android.accessibilityservice.html" class="hiddenlink" target="rightframe">android.accessibilityservice</A><br>
+<!-- Package android.accounts -->
+<A HREF="pkg_android.accounts.html" class="hiddenlink" target="rightframe">android.accounts</A><br>
+<!-- Package android.animation -->
+<A HREF="pkg_android.animation.html" class="hiddenlink" target="rightframe">android.animation</A><br>
+<!-- Package android.app -->
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<!-- Package android.app.admin -->
+<A HREF="pkg_android.app.admin.html" class="hiddenlink" target="rightframe">android.app.admin</A><br>
+<!-- Package android.app.backup -->
+<A HREF="pkg_android.app.backup.html" class="hiddenlink" target="rightframe">android.app.backup</A><br>
+<!-- Package android.appwidget -->
+<A HREF="pkg_android.appwidget.html" class="hiddenlink" target="rightframe">android.appwidget</A><br>
+<!-- Package android.bluetooth -->
+<A HREF="pkg_android.bluetooth.html" class="hiddenlink" target="rightframe">android.bluetooth</A><br>
+<!-- Package android.content -->
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<!-- Package android.content.pm -->
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<!-- Package android.database.sqlite -->
+<A HREF="pkg_android.database.sqlite.html" class="hiddenlink" target="rightframe">android.database.sqlite</A><br>
+<!-- Package android.graphics -->
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<!-- Package android.hardware -->
+<A HREF="pkg_android.hardware.html" class="hiddenlink" target="rightframe">android.hardware</A><br>
+<!-- Package android.inputmethodservice -->
+<A HREF="pkg_android.inputmethodservice.html" class="hiddenlink" target="rightframe">android.inputmethodservice</A><br>
+<!-- Package android.media -->
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<!-- Package android.media.effect -->
+<A HREF="changes-summary.html#android.media.effect" class="hiddenlink" target="rightframe"><b>android.media.effect</b></A><br>
+<!-- Package android.net -->
+<A HREF="pkg_android.net.html" class="hiddenlink" target="rightframe">android.net</A><br>
+<!-- Package android.net.http -->
+<A HREF="pkg_android.net.http.html" class="hiddenlink" target="rightframe">android.net.http</A><br>
+<!-- Package android.net.wifi -->
+<A HREF="pkg_android.net.wifi.html" class="hiddenlink" target="rightframe">android.net.wifi</A><br>
+<!-- Package android.net.wifi.p2p -->
+<A HREF="changes-summary.html#android.net.wifi.p2p" class="hiddenlink" target="rightframe"><b>android.net.wifi.p2p</b></A><br>
+<!-- Package android.nfc -->
+<A HREF="pkg_android.nfc.html" class="hiddenlink" target="rightframe">android.nfc</A><br>
+<!-- Package android.nfc.tech -->
+<A HREF="pkg_android.nfc.tech.html" class="hiddenlink" target="rightframe">android.nfc.tech</A><br>
+<!-- Package android.opengl -->
+<A HREF="pkg_android.opengl.html" class="hiddenlink" target="rightframe">android.opengl</A><br>
+<!-- Package android.os -->
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<!-- Package android.preference -->
+<A HREF="pkg_android.preference.html" class="hiddenlink" target="rightframe">android.preference</A><br>
+<!-- Package android.provider -->
+<A HREF="pkg_android.provider.html" class="hiddenlink" target="rightframe">android.provider</A><br>
+<!-- Package android.renderscript -->
+<A HREF="pkg_android.renderscript.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Package android.security -->
+<A HREF="changes-summary.html#android.security" class="hiddenlink" target="rightframe"><b>android.security</b></A><br>
+<!-- Package android.service.textservice -->
+<A HREF="changes-summary.html#android.service.textservice" class="hiddenlink" target="rightframe"><b>android.service.textservice</b></A><br>
+<!-- Package android.service.wallpaper -->
+<A HREF="pkg_android.service.wallpaper.html" class="hiddenlink" target="rightframe">android.service.wallpaper</A><br>
+<!-- Package android.speech -->
+<A HREF="pkg_android.speech.html" class="hiddenlink" target="rightframe">android.speech</A><br>
+<!-- Package android.speech.tts -->
+<A HREF="pkg_android.speech.tts.html" class="hiddenlink" target="rightframe">android.speech.tts</A><br>
+<!-- Package android.test.mock -->
+<A HREF="pkg_android.test.mock.html" class="hiddenlink" target="rightframe">android.test.mock</A><br>
+<!-- Package android.text -->
+<A HREF="pkg_android.text.html" class="hiddenlink" target="rightframe">android.text</A><br>
+<!-- Package android.text.style -->
+<A HREF="pkg_android.text.style.html" class="hiddenlink" target="rightframe">android.text.style</A><br>
+<!-- Package android.util -->
+<A HREF="pkg_android.util.html" class="hiddenlink" target="rightframe">android.util</A><br>
+<!-- Package android.view -->
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<!-- Package android.view.accessibility -->
+<A HREF="pkg_android.view.accessibility.html" class="hiddenlink" target="rightframe">android.view.accessibility</A><br>
+<!-- Package android.view.inputmethod -->
+<A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
+<!-- Package android.view.textservice -->
+<A HREF="changes-summary.html#android.view.textservice" class="hiddenlink" target="rightframe"><b>android.view.textservice</b></A><br>
+<!-- Package android.webkit -->
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<!-- Package android.widget -->
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<!-- Class Animator -->
+<A HREF="android.animation.Animator.html" class="hiddenlink" target="rightframe">Animator</A><br>
+<!-- Method appendRecord -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.appendRecord_added(android.view.accessibility.AccessibilityRecord)" class="hiddenlink" target="rightframe"><b>appendRecord</b>
+(<code>AccessibilityRecord</code>)</A></nobr><br>
+<!-- Class Application -->
+<A HREF="android.app.Application.html" class="hiddenlink" target="rightframe">Application</A><br>
+<!-- Class Application.ActivityLifecycleCallbacks -->
+<A HREF="pkg_android.app.html#Application.ActivityLifecycleCallbacks" class="hiddenlink" target="rightframe"><b><i>Application.ActivityLifecycleCallbacks</i></b></A><br>
+<!-- Class ApplicationErrorReport -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport</b></A><br>
+<!-- Class ApplicationErrorReport.AnrInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.AnrInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.AnrInfo</b></A><br>
+<!-- Class ApplicationErrorReport.BatteryInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.BatteryInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.BatteryInfo</b></A><br>
+<!-- Class ApplicationErrorReport.CrashInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.CrashInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.CrashInfo</b></A><br>
+<!-- Class ApplicationErrorReport.RunningServiceInfo -->
+<A HREF="pkg_android.app.html#ApplicationErrorReport.RunningServiceInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.RunningServiceInfo</b></A><br>
+<!-- Class ApplicationInfo -->
+<A HREF="android.content.pm.ApplicationInfo.html" class="hiddenlink" target="rightframe">ApplicationInfo</A><br>
+<!-- Class AppWidgetProviderInfo -->
+<A HREF="android.appwidget.AppWidgetProviderInfo.html" class="hiddenlink" target="rightframe">AppWidgetProviderInfo</A><br>
+<!-- Class AudioManager -->
+<A HREF="android.media.AudioManager.html" class="hiddenlink" target="rightframe">AudioManager</A><br>
+<!-- Field AXIS_DISTANCE -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_DISTANCE" class="hiddenlink" target="rightframe">AXIS_DISTANCE</A>
+</nobr><br>
+<!-- Field AXIS_TILT -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_TILT" class="hiddenlink" target="rightframe">AXIS_TILT</A>
+</nobr><br>
+<!-- Field BACKGROUND_DATA -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.BACKGROUND_DATA" class="hiddenlink" target="rightframe">BACKGROUND_DATA</A>
+</nobr><br>
+<!-- Field backgroundSplit -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundSplit" class="hiddenlink" target="rightframe">backgroundSplit</A>
+</nobr><br>
+<!-- Field backgroundStacked -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundStacked" class="hiddenlink" target="rightframe">backgroundStacked</A>
+</nobr><br>
+<!-- Class BackupAgent -->
+<A HREF="android.app.backup.BackupAgent.html" class="hiddenlink" target="rightframe">BackupAgent</A><br>
+<!-- Class BaseDexClassLoader -->
+<A HREF="pkg_dalvik.system.html#BaseDexClassLoader" class="hiddenlink" target="rightframe"><b>BaseDexClassLoader</b></A><br>
+<!-- Class BaseObj -->
+<A HREF="android.renderscript.BaseObj.html" class="hiddenlink" target="rightframe">BaseObj</A><br>
+<!-- Class BasicPermission -->
+<A HREF="java.security.BasicPermission.html" class="hiddenlink" target="rightframe">BasicPermission</A><br>
+<!-- Field BIND_ABOVE_CLIENT -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ABOVE_CLIENT" class="hiddenlink" target="rightframe">BIND_ABOVE_CLIENT</A>
+</nobr><br>
+<!-- Field BIND_ADJUST_WITH_ACTIVITY -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ADJUST_WITH_ACTIVITY" class="hiddenlink" target="rightframe">BIND_ADJUST_WITH_ACTIVITY</A>
+</nobr><br>
+<!-- Field BIND_ALLOW_OOM_MANAGEMENT -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ALLOW_OOM_MANAGEMENT" class="hiddenlink" target="rightframe">BIND_ALLOW_OOM_MANAGEMENT</A>
+</nobr><br>
+<!-- Field BIND_IMPORTANT -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_IMPORTANT" class="hiddenlink" target="rightframe">BIND_IMPORTANT</A>
+</nobr><br>
+<!-- Field BIND_TEXT_SERVICE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_TEXT_SERVICE" class="hiddenlink" target="rightframe">BIND_TEXT_SERVICE</A>
+</nobr><br>
+<!-- Field BIND_VPN_SERVICE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_VPN_SERVICE" class="hiddenlink" target="rightframe">BIND_VPN_SERVICE</A>
+</nobr><br>
+<!-- Field BIND_WAIVE_PRIORITY -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_WAIVE_PRIORITY" class="hiddenlink" target="rightframe">BIND_WAIVE_PRIORITY</A>
+</nobr><br>
+<!-- Class BluetoothAdapter -->
+<A HREF="android.bluetooth.BluetoothAdapter.html" class="hiddenlink" target="rightframe">BluetoothAdapter</A><br>
+<!-- Class BluetoothHealth -->
+<A HREF="pkg_android.bluetooth.html#BluetoothHealth" class="hiddenlink" target="rightframe"><b>BluetoothHealth</b></A><br>
+<!-- Class BluetoothHealthAppConfiguration -->
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthAppConfiguration" class="hiddenlink" target="rightframe"><b>BluetoothHealthAppConfiguration</b></A><br>
+<!-- Class BluetoothHealthCallback -->
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthCallback" class="hiddenlink" target="rightframe"><b>BluetoothHealthCallback</b></A><br>
+<!-- Class BluetoothProfile -->
+<A HREF="android.bluetooth.BluetoothProfile.html" class="hiddenlink" target="rightframe"><i>BluetoothProfile</i></A><br>
+<!-- Class BluetoothSocket -->
+<A HREF="android.bluetooth.BluetoothSocket.html" class="hiddenlink" target="rightframe">BluetoothSocket</A><br>
+<!-- Class Build -->
+<A HREF="android.os.Build.html" class="hiddenlink" target="rightframe">Build</A><br>
+<!-- Class Build.VERSION_CODES -->
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<!-- Field BUTTON_BACK -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_BACK" class="hiddenlink" target="rightframe">BUTTON_BACK</A>
+</nobr><br>
+<!-- Field BUTTON_FORWARD -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_FORWARD" class="hiddenlink" target="rightframe">BUTTON_FORWARD</A>
+</nobr><br>
+<!-- Field BUTTON_PRIMARY -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_PRIMARY" class="hiddenlink" target="rightframe">BUTTON_PRIMARY</A>
+</nobr><br>
+<!-- Field BUTTON_SECONDARY -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_SECONDARY" class="hiddenlink" target="rightframe">BUTTON_SECONDARY</A>
+</nobr><br>
+<!-- Field BUTTON_TERTIARY -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_TERTIARY" class="hiddenlink" target="rightframe">BUTTON_TERTIARY</A>
+</nobr><br>
+<!-- Class Byte2 -->
+<i>Byte2</i><br>
+ <A HREF="android.renderscript.Byte2.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Byte2 -->
+ <nobr><A HREF="android.renderscript.Byte2.html#android.renderscript.Byte2.ctor_added(byte, byte)" class="hiddenlink" target="rightframe"><b>Byte2</b>
+(<code>byte, byte</code>)</A></nobr> constructor<br>
+<!-- Class Byte3 -->
+<i>Byte3</i><br>
+ <A HREF="android.renderscript.Byte3.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Byte3 -->
+ <nobr><A HREF="android.renderscript.Byte3.html#android.renderscript.Byte3.ctor_added(byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte3</b>
+(<code>byte, byte, byte</code>)</A></nobr> constructor<br>
+<!-- Class Byte4 -->
+<i>Byte4</i><br>
+ <A HREF="android.renderscript.Byte4.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Byte4 -->
+ <nobr><A HREF="android.renderscript.Byte4.html#android.renderscript.Byte4.ctor_added(byte, byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte4</b>
+(<code>byte, byte, byte, byte</code>)</A></nobr> constructor<br>
+<!-- Class CalendarContract -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.provider.html#CalendarContract" class="hiddenlink" target="rightframe"><b>CalendarContract</b></A><br>
+<!-- Class CalendarContract.Attendees -->
+<A HREF="pkg_android.provider.html#CalendarContract.Attendees" class="hiddenlink" target="rightframe"><b>CalendarContract.Attendees</b></A><br>
+<!-- Class CalendarContract.AttendeesColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.AttendeesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.AttendeesColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarAlerts -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlerts" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarAlerts</b></A><br>
+<!-- Class CalendarContract.CalendarAlertsColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlertsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarAlertsColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarCache -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCache" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarCache</b></A><br>
+<!-- Class CalendarContract.CalendarCacheColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCacheColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarCacheColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarColumns</i></b></A><br>
+<!-- Class CalendarContract.CalendarEntity -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarEntity</b></A><br>
+<!-- Class CalendarContract.Calendars -->
+<A HREF="pkg_android.provider.html#CalendarContract.Calendars" class="hiddenlink" target="rightframe"><b>CalendarContract.Calendars</b></A><br>
+<!-- Class CalendarContract.CalendarSyncColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarSyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarSyncColumns</i></b></A><br>
+<!-- Class CalendarContract.EventDays -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventDays" class="hiddenlink" target="rightframe"><b>CalendarContract.EventDays</b></A><br>
+<!-- Class CalendarContract.EventDaysColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventDaysColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventDaysColumns</i></b></A><br>
+<!-- Class CalendarContract.Events -->
+<A HREF="pkg_android.provider.html#CalendarContract.Events" class="hiddenlink" target="rightframe"><b>CalendarContract.Events</b></A><br>
+<!-- Class CalendarContract.EventsColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventsColumns</i></b></A><br>
+<!-- Class CalendarContract.EventsEntity -->
+<A HREF="pkg_android.provider.html#CalendarContract.EventsEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.EventsEntity</b></A><br>
+<!-- Class CalendarContract.ExtendedProperties -->
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedProperties" class="hiddenlink" target="rightframe"><b>CalendarContract.ExtendedProperties</b></A><br>
+<!-- Class CalendarContract.ExtendedPropertiesColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedPropertiesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.ExtendedPropertiesColumns</i></b></A><br>
+<!-- Class CalendarContract.Instances -->
+<A HREF="pkg_android.provider.html#CalendarContract.Instances" class="hiddenlink" target="rightframe"><b>CalendarContract.Instances</b></A><br>
+<!-- Class CalendarContract.Reminders -->
+<A HREF="pkg_android.provider.html#CalendarContract.Reminders" class="hiddenlink" target="rightframe"><b>CalendarContract.Reminders</b></A><br>
+<!-- Class CalendarContract.RemindersColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.RemindersColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.RemindersColumns</i></b></A><br>
+<!-- Class CalendarContract.SyncColumns -->
+<A HREF="pkg_android.provider.html#CalendarContract.SyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.SyncColumns</i></b></A><br>
+<!-- Class CalendarContract.SyncState -->
+<A HREF="pkg_android.provider.html#CalendarContract.SyncState" class="hiddenlink" target="rightframe"><b>CalendarContract.SyncState</b></A><br>
+<!-- Class CallLog.Calls -->
+<A HREF="android.provider.CallLog.Calls.html" class="hiddenlink" target="rightframe">CallLog.Calls</A><br>
+<!-- Class Camera -->
+<A HREF="android.hardware.Camera.html" class="hiddenlink" target="rightframe">Camera</A><br>
+<!-- Class Camera.Area -->
+<A HREF="pkg_android.hardware.html#Camera.Area" class="hiddenlink" target="rightframe"><b>Camera.Area</b></A><br>
+<!-- Class Camera.Face -->
+<A HREF="pkg_android.hardware.html#Camera.Face" class="hiddenlink" target="rightframe"><b>Camera.Face</b></A><br>
+<!-- Class Camera.FaceDetectionListener -->
+<A HREF="pkg_android.hardware.html#Camera.FaceDetectionListener" class="hiddenlink" target="rightframe"><b><i>Camera.FaceDetectionListener</i></b></A><br>
+<!-- Class Camera.Parameters -->
+<A HREF="android.hardware.Camera.Parameters.html" class="hiddenlink" target="rightframe">Camera.Parameters</A><br>
+<!-- Method cancel -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.cancel_added()" class="hiddenlink" target="rightframe"><b>cancel</b>
+()</A></nobr><br>
+<!-- Field canRetrieveWindowContent -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.canRetrieveWindowContent" class="hiddenlink" target="rightframe">canRetrieveWindowContent</A>
+</nobr><br>
+<!-- Method canScrollHorizontally -->
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollHorizontally_added(int)" class="hiddenlink" target="rightframe"><b>canScrollHorizontally</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method canScrollVertically -->
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollVertically_added(int)" class="hiddenlink" target="rightframe"><b>canScrollVertically</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class Canvas -->
+<A HREF="android.graphics.Canvas.html" class="hiddenlink" target="rightframe">Canvas</A><br>
+<!-- Class CheckBoxPreference -->
+<A HREF="android.preference.CheckBoxPreference.html" class="hiddenlink" target="rightframe">CheckBoxPreference</A><br>
+<!-- Class Class -->
+<A HREF="java.lang.Class.html" class="hiddenlink" target="rightframe">Class</A><br>
+<!-- Method clearThreadStatsTag -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.clearThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>clearThreadStatsTag</b>
+()</A></nobr><br>
+<!-- Method clone -->
+<i>clone</i><br>
+ <nobr><A HREF="android.util.SparseArray.html#android.util.SparseArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseArray
+</A></nobr><br>
+<!-- Method clone -->
+ <nobr><A HREF="android.util.SparseBooleanArray.html#android.util.SparseBooleanArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseBooleanArray
+</A></nobr><br>
+<!-- Method clone -->
+ <nobr><A HREF="android.util.SparseIntArray.html#android.util.SparseIntArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseIntArray
+</A></nobr><br>
+<!-- Method collapseActionView -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.collapseActionView_added()" class="hiddenlink" target="rightframe"><b>collapseActionView</b>
+()</A></nobr><br>
+<!-- Class CollapsibleActionView -->
+<A HREF="pkg_android.view.html#CollapsibleActionView" class="hiddenlink" target="rightframe"><b><i>CollapsibleActionView</i></b></A><br>
+<!-- Field colorActivatedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorActivatedHighlight" class="hiddenlink" target="rightframe">colorActivatedHighlight</A>
+</nobr><br>
+<!-- Field colorFocusedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorFocusedHighlight" class="hiddenlink" target="rightframe">colorFocusedHighlight</A>
+</nobr><br>
+<!-- Field colorLongPressedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorLongPressedHighlight" class="hiddenlink" target="rightframe">colorLongPressedHighlight</A>
+</nobr><br>
+<!-- Field colorMultiSelectHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorMultiSelectHighlight" class="hiddenlink" target="rightframe">colorMultiSelectHighlight</A>
+</nobr><br>
+<!-- Field colorPressedHighlight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorPressedHighlight" class="hiddenlink" target="rightframe">colorPressedHighlight</A>
+</nobr><br>
+<!-- Field columnCount -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnCount" class="hiddenlink" target="rightframe">columnCount</A>
+</nobr><br>
+<!-- Field columnOrderPreserved -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnOrderPreserved" class="hiddenlink" target="rightframe">columnOrderPreserved</A>
+</nobr><br>
+<!-- Field COMPONENT_ENABLED_STATE_DISABLED_USER -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER" class="hiddenlink" target="rightframe">COMPONENT_ENABLED_STATE_DISABLED_USER</A>
+</nobr><br>
+<!-- Class ComponentCallbacks2 -->
+<A HREF="pkg_android.content.html#ComponentCallbacks2" class="hiddenlink" target="rightframe"><b><i>ComponentCallbacks2</i></b></A><br>
+<!-- Field CONFIDENCE_SCORES -->
+<nobr><A HREF="android.speech.SpeechRecognizer.html#android.speech.SpeechRecognizer.CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">CONFIDENCE_SCORES</A>
+</nobr><br>
+<!-- Class Config -->
+<A HREF="android.util.Config.html" class="hiddenlink" target="rightframe">Config</A><br>
+<!-- Class ConnectivityManager -->
+<A HREF="android.net.ConnectivityManager.html" class="hiddenlink" target="rightframe">ConnectivityManager</A><br>
+<!-- Class Constructor -->
+<A HREF="java.lang.reflect.Constructor.html" class="hiddenlink" target="rightframe">Constructor</A><br>
+<!-- Class ContactsContract -->
+<A HREF="android.provider.ContactsContract.html" class="hiddenlink" target="rightframe">ContactsContract</A><br>
+<!-- Class ContactsContract.CommonDataKinds.Identity -->
+<A HREF="pkg_android.provider.html#ContactsContract.CommonDataKinds.Identity" class="hiddenlink" target="rightframe"><b>ContactsContract.CommonDataKinds.Identity</b></A><br>
+<!-- Class ContactsContract.CommonDataKinds.Photo -->
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.CommonDataKinds.Photo</A><br>
+<!-- Class ContactsContract.Contacts -->
+<A HREF="android.provider.ContactsContract.Contacts.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts</A><br>
+<!-- Class ContactsContract.Contacts.Photo -->
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts.Photo</A><br>
+<!-- Class ContactsContract.ContactsColumns -->
+<A HREF="android.provider.ContactsContract.ContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.ContactsColumns</i></A><br>
+<!-- Class ContactsContract.DataUsageFeedback -->
+<A HREF="pkg_android.provider.html#ContactsContract.DataUsageFeedback" class="hiddenlink" target="rightframe"><b>ContactsContract.DataUsageFeedback</b></A><br>
+<!-- Class ContactsContract.DisplayPhoto -->
+<A HREF="pkg_android.provider.html#ContactsContract.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.DisplayPhoto</b></A><br>
+<!-- Class ContactsContract.GroupsColumns -->
+<A HREF="android.provider.ContactsContract.GroupsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.GroupsColumns</i></A><br>
+<!-- Class ContactsContract.Intents -->
+<A HREF="android.provider.ContactsContract.Intents.html" class="hiddenlink" target="rightframe">ContactsContract.Intents</A><br>
+<!-- Class ContactsContract.Profile -->
+<A HREF="pkg_android.provider.html#ContactsContract.Profile" class="hiddenlink" target="rightframe"><b>ContactsContract.Profile</b></A><br>
+<!-- Class ContactsContract.ProfileSyncState -->
+<A HREF="pkg_android.provider.html#ContactsContract.ProfileSyncState" class="hiddenlink" target="rightframe"><b>ContactsContract.ProfileSyncState</b></A><br>
+<!-- Class ContactsContract.RawContacts.DisplayPhoto -->
+<A HREF="pkg_android.provider.html#ContactsContract.RawContacts.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.RawContacts.DisplayPhoto</b></A><br>
+<!-- Class ContactsContract.RawContactsColumns -->
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.RawContactsColumns</i></A><br>
+<!-- Class ContactsContract.RawContactsEntity -->
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html" class="hiddenlink" target="rightframe">ContactsContract.RawContactsEntity</A><br>
+<!-- Class ContactsContract.SettingsColumns -->
+<A HREF="android.provider.ContactsContract.SettingsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.SettingsColumns</i></A><br>
+<!-- Class ContactsContract.StatusUpdates -->
+<A HREF="android.provider.ContactsContract.StatusUpdates.html" class="hiddenlink" target="rightframe">ContactsContract.StatusUpdates</A><br>
+<!-- Class ContentProvider -->
+<A HREF="android.content.ContentProvider.html" class="hiddenlink" target="rightframe">ContentProvider</A><br>
+<!-- Class Context -->
+<A HREF="android.content.Context.html" class="hiddenlink" target="rightframe">Context</A><br>
+<!-- Method copy1DRangeFrom -->
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy1DRangeFrom_added(int, int, android.renderscript.Allocation, int)" class="hiddenlink" target="rightframe"><b>copy1DRangeFrom</b>
+(<code>int, int, Allocation, int</code>)</A></nobr><br>
+<!-- Method copy2DRangeFrom -->
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy2DRangeFrom_added(int, int, int, int, android.renderscript.Allocation, int, int)" class="hiddenlink" target="rightframe"><b>copy2DRangeFrom</b>
+(<code>int, int, int, int, Allocation, int, int</code>)</A></nobr><br>
+<!-- Method create1D -->
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.create1D_added(android.renderscript.RenderScript, android.renderscript.Allocation)" class="hiddenlink" target="rightframe"><b>create1D</b>
+(<code>RenderScript, Allocation</code>)</A></nobr><br>
+<!-- Method createAccessibilityNodeInfo -->
+<nobr><A HREF="android.view.View.html#android.view.View.createAccessibilityNodeInfo_added()" class="hiddenlink" target="rightframe"><b>createAccessibilityNodeInfo</b>
+()</A></nobr><br>
+<!-- Method createApplicationRecord -->
+<nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createApplicationRecord_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>createApplicationRecord</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method createUri -->
+<i>createUri</i><br>
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(android.net.Uri)" class="hiddenlink" target="rightframe">type <b>
+(<code>Uri</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+<!-- Method createUri -->
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+<!-- Package dalvik.annotation -->
+<A NAME="D"></A>
+<A HREF="pkg_dalvik.annotation.html" class="hiddenlink" target="rightframe">dalvik.annotation</A><br>
+<!-- Package dalvik.system -->
+<A HREF="pkg_dalvik.system.html" class="hiddenlink" target="rightframe">dalvik.system</A><br>
+<!-- Field DATA_SET -->
+<i>DATA_SET</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.GroupsColumns.html#android.provider.ContactsContract.GroupsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.GroupsColumns</A>
+</nobr><br>
+<!-- Field DATA_SET -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsColumns</A>
+</nobr><br>
+<!-- Field DATA_SET -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.SettingsColumns.html#android.provider.ContactsContract.SettingsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.SettingsColumns</A>
+</nobr><br>
+<!-- Class Debug -->
+<A HREF="android.os.Debug.html" class="hiddenlink" target="rightframe">Debug</A><br>
+<!-- Field DEBUG -->
+<nobr><A HREF="android.util.Config.html#android.util.Config.DEBUG" class="hiddenlink" target="rightframe">DEBUG</A>
+</nobr><br>
+<!-- Class Debug.MemoryInfo -->
+<A HREF="android.os.Debug.MemoryInfo.html" class="hiddenlink" target="rightframe">Debug.MemoryInfo</A><br>
+<!-- Method deferNotifyDataSetChanged -->
+<i>deferNotifyDataSetChanged</i><br>
+ <nobr><A HREF="android.widget.AbsListView.html#android.widget.AbsListView.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AbsListView
+</A></nobr><br>
+<!-- Method deferNotifyDataSetChanged -->
+ <nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AdapterViewAnimator
+</A></nobr><br>
+<!-- Class DeviceAdminInfo -->
+<A HREF="android.app.admin.DeviceAdminInfo.html" class="hiddenlink" target="rightframe">DeviceAdminInfo</A><br>
+<!-- Field DeviceDefault_ButtonBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar</A>
+</nobr><br>
+<!-- Field DeviceDefault_ButtonBar_AlertDialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar_AlertDialog</A>
+</nobr><br>
+<!-- Field DeviceDefault_Light_ButtonBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar</A>
+</nobr><br>
+<!-- Field DeviceDefault_Light_ButtonBar_AlertDialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar_AlertDialog</A>
+</nobr><br>
+<!-- Field DeviceDefault_Light_SegmentedButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_Light_SegmentedButton</A>
+</nobr><br>
+<!-- Field DeviceDefault_SegmentedButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_SegmentedButton</A>
+</nobr><br>
+<!-- Class DevicePolicyManager -->
+<A HREF="android.app.admin.DevicePolicyManager.html" class="hiddenlink" target="rightframe">DevicePolicyManager</A><br>
+<!-- Class DexClassLoader -->
+<A HREF="dalvik.system.DexClassLoader.html" class="hiddenlink" target="rightframe">DexClassLoader</A><br>
+<!-- Field directionDescriptions -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.directionDescriptions" class="hiddenlink" target="rightframe">directionDescriptions</A>
+</nobr><br>
+<!-- Method disableForegroundNdefPush -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.disableForegroundNdefPush_changed(android.app.Activity)" class="hiddenlink" target="rightframe">disableForegroundNdefPush
+(<code>Activity</code>)</A></nobr><br>
+<!-- Method dispatchGenericFocusedEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericFocusedEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericFocusedEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method dispatchGenericPointerEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericPointerEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericPointerEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method dispatchHoverEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Field DISPLAY_PHOTO -->
+<nobr><A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.DISPLAY_PHOTO" class="hiddenlink" target="rightframe">DISPLAY_PHOTO</A>
+</nobr><br>
+<!-- Class Double2 -->
+<A HREF="pkg_android.renderscript.html#Double2" class="hiddenlink" target="rightframe"><b>Double2</b></A><br>
+<!-- Class Double3 -->
+<A HREF="pkg_android.renderscript.html#Double3" class="hiddenlink" target="rightframe"><b>Double3</b></A><br>
+<!-- Class Double4 -->
+<A HREF="pkg_android.renderscript.html#Double4" class="hiddenlink" target="rightframe"><b>Double4</b></A><br>
+<!-- Field drawableEnd -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableEnd" class="hiddenlink" target="rightframe">drawableEnd</A>
+</nobr><br>
+<!-- Field drawableStart -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableStart" class="hiddenlink" target="rightframe">drawableStart</A>
+</nobr><br>
+<!-- Method dump -->
+<nobr><A HREF="android.service.wallpaper.WallpaperService.Engine.html#android.service.wallpaper.WallpaperService.Engine.dump_added(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])" class="hiddenlink" target="rightframe"><b>dump</b>
+(<code>String, FileDescriptor, PrintWriter, String[]</code>)</A></nobr><br>
+<!-- Method dup -->
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.dup_added()" class="hiddenlink" target="rightframe"><b>dup</b>
+()</A></nobr><br>
+<!-- Class EasyEditSpan -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.text.style.html#EasyEditSpan" class="hiddenlink" target="rightframe"><b>EasyEditSpan</b></A><br>
+<!-- Class EdgeEffect -->
+<A HREF="pkg_android.widget.html#EdgeEffect" class="hiddenlink" target="rightframe"><b>EdgeEffect</b></A><br>
+<!-- Class Element -->
+<A HREF="android.renderscript.Element.html" class="hiddenlink" target="rightframe">Element</A><br>
+<!-- Method enableForegroundNdefPush -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.enableForegroundNdefPush_changed(android.app.Activity, android.nfc.NdefMessage)" class="hiddenlink" target="rightframe">enableForegroundNdefPush
+(<code>Activity, NdefMessage</code>)</A></nobr><br>
+<!-- Method enableReplaceObject -->
+<nobr><A HREF="java.io.ObjectOutputStream.html#java.io.ObjectOutputStream.enableReplaceObject_changed(boolean)" class="hiddenlink" target="rightframe">enableReplaceObject
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method enableResolveObject -->
+<nobr><A HREF="java.io.ObjectInputStream.html#java.io.ObjectInputStream.enableResolveObject_changed(boolean)" class="hiddenlink" target="rightframe">enableResolveObject
+(<code>boolean</code>)</A></nobr><br>
+<!-- Field END -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.END" class="hiddenlink" target="rightframe">END</A>
+</nobr><br>
+<!-- Method equals -->
+<i>equals</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.io.FilePermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.net.SocketPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.AllPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.BasicPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.Permission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.UnresolvedPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<!-- Method evaluate -->
+<i>evaluate</i><br>
+ <nobr><A HREF="android.animation.FloatEvaluator.html#android.animation.FloatEvaluator.evaluate_changed(float, java.lang.Number, java.lang.Number)" class="hiddenlink" target="rightframe">type
+(<code>float, Number, Number</code>) in android.animation.FloatEvaluator
+</A></nobr><br>
+<!-- Method evaluate -->
+ <nobr><A HREF="android.animation.IntEvaluator.html#android.animation.IntEvaluator.evaluate_changed(float, java.lang.Integer, java.lang.Integer)" class="hiddenlink" target="rightframe">type
+(<code>float, Integer, Integer</code>) in android.animation.IntEvaluator
+</A></nobr><br>
+<!-- Method evaluate -->
+ <nobr><A HREF="android.animation.TypeEvaluator.html#android.animation.TypeEvaluator.evaluate_changed(float, T, T)" class="hiddenlink" target="rightframe">type
+(<code>float, T, T</code>) in android.animation.TypeEvaluator
+</A></nobr><br>
+<!-- Method eventTypeToString -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.eventTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>eventTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class ExpandableListView -->
+<A HREF="android.widget.ExpandableListView.html" class="hiddenlink" target="rightframe">ExpandableListView</A><br>
+<!-- Method expandActionView -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.expandActionView_added()" class="hiddenlink" target="rightframe"><b>expandActionView</b>
+()</A></nobr><br>
+<!-- Method expandGroup -->
+<nobr><A HREF="android.widget.ExpandableListView.html#android.widget.ExpandableListView.expandGroup_added(int, boolean)" class="hiddenlink" target="rightframe"><b>expandGroup</b>
+(<code>int, boolean</code>)</A></nobr><br>
+<!-- Field externalCodeSize -->
+<nobr><A HREF="android.content.pm.PackageStats.html#android.content.pm.PackageStats.externalCodeSize" class="hiddenlink" target="rightframe">externalCodeSize</A>
+</nobr><br>
+<!-- Field EXTRA_ALLOW_REPLACE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_ALLOW_REPLACE" class="hiddenlink" target="rightframe">EXTRA_ALLOW_REPLACE</A>
+</nobr><br>
+<!-- Field EXTRA_BUG_REPORT -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_BUG_REPORT" class="hiddenlink" target="rightframe">EXTRA_BUG_REPORT</A>
+</nobr><br>
+<!-- Field EXTRA_CONFIDENCE_SCORES -->
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">EXTRA_CONFIDENCE_SCORES</A>
+</nobr><br>
+<!-- Field EXTRA_INSTALLER_PACKAGE_NAME -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_INSTALLER_PACKAGE_NAME" class="hiddenlink" target="rightframe">EXTRA_INSTALLER_PACKAGE_NAME</A>
+</nobr><br>
+<!-- Field EXTRA_NETWORK_INFO -->
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.EXTRA_NETWORK_INFO" class="hiddenlink" target="rightframe">EXTRA_NETWORK_INFO</A>
+</nobr><br>
+<!-- Field EXTRA_NOT_UNKNOWN_SOURCE -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_NOT_UNKNOWN_SOURCE" class="hiddenlink" target="rightframe">EXTRA_NOT_UNKNOWN_SOURCE</A>
+</nobr><br>
+<!-- Field EXTRA_ORIGIN -->
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_ORIGIN" class="hiddenlink" target="rightframe">EXTRA_ORIGIN</A>
+</nobr><br>
+<!-- Field EXTRA_RETURN_RESULT -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_RETURN_RESULT" class="hiddenlink" target="rightframe">EXTRA_RETURN_RESULT</A>
+</nobr><br>
+<!-- Field EXTRA_SCO_AUDIO_PREVIOUS_STATE -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE" class="hiddenlink" target="rightframe">EXTRA_SCO_AUDIO_PREVIOUS_STATE</A>
+</nobr><br>
+<!-- Field EXTRA_SHOW_FRAGMENT_SHORT_TITLE -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_SHORT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_SHORT_TITLE</A>
+</nobr><br>
+<!-- Field EXTRA_SHOW_FRAGMENT_TITLE -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_TITLE</A>
+</nobr><br>
+<!-- Field EXTRA_VERIFICATION_ID -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.EXTRA_VERIFICATION_ID" class="hiddenlink" target="rightframe">EXTRA_VERIFICATION_ID</A>
+</nobr><br>
+<!-- Field EXTRA_WEB_SEARCH_PENDINGINTENT -->
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.EXTRA_WEB_SEARCH_PENDINGINTENT" class="hiddenlink" target="rightframe">EXTRA_WEB_SEARCH_PENDINGINTENT</A>
+</nobr><br>
+<!-- Field EXTRA_WIFI_INFO -->
+<nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.EXTRA_WIFI_INFO" class="hiddenlink" target="rightframe">EXTRA_WIFI_INFO</A>
+</nobr><br>
+<!-- Method F64_2 -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method F64_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method F64_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Field fadingEdge -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.fadingEdge" class="hiddenlink" target="rightframe">fadingEdge</A>
+</nobr><br>
+<!-- Field FEATURE_WIFI_DIRECT -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_WIFI_DIRECT" class="hiddenlink" target="rightframe">FEATURE_WIFI_DIRECT</A>
+</nobr><br>
+<!-- Field FEEDBACK_ALL_MASK -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK" class="hiddenlink" target="rightframe">FEEDBACK_ALL_MASK</A>
+</nobr><br>
+<!-- Method feedbackTypeToString -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.feedbackTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>feedbackTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class Field -->
+<A HREF="java.lang.reflect.Field.html" class="hiddenlink" target="rightframe">Field</A><br>
+<!-- Class FieldPacker -->
+<A HREF="android.renderscript.FieldPacker.html" class="hiddenlink" target="rightframe">FieldPacker</A><br>
+<!-- Class FilePermission -->
+<A HREF="java.io.FilePermission.html" class="hiddenlink" target="rightframe">FilePermission</A><br>
+<!-- Field FIND_VIEWS_WITH_CONTENT_DESCRIPTION -->
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_CONTENT_DESCRIPTION</A>
+</nobr><br>
+<!-- Field FIND_VIEWS_WITH_TEXT -->
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_TEXT" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_TEXT</A>
+</nobr><br>
+<!-- Method findLibrary -->
+<nobr><A HREF="dalvik.system.PathClassLoader.html#dalvik.system.PathClassLoader.findLibrary_changed(java.lang.String)" class="hiddenlink" target="rightframe">findLibrary
+(<code>String</code>)</A></nobr><br>
+<!-- Method findViewsWithText -->
+<nobr><A HREF="android.view.View.html#android.view.View.findViewsWithText_added(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int)" class="hiddenlink" target="rightframe"><b>findViewsWithText</b>
+(<code>ArrayList<View>, CharSequence, int</code>)</A></nobr><br>
+<!-- Method fitsSystemWindows -->
+<nobr><A HREF="android.view.View.html#android.view.View.fitsSystemWindows_added()" class="hiddenlink" target="rightframe"><b>fitsSystemWindows</b>
+()</A></nobr><br>
+<!-- Field FLAG_BLUR_BEHIND -->
+<nobr><A HREF="android.view.WindowManager.LayoutParams.html#android.view.WindowManager.LayoutParams.FLAG_BLUR_BEHIND" class="hiddenlink" target="rightframe">FLAG_BLUR_BEHIND</A>
+</nobr><br>
+<!-- Field FLAG_STOP_WITH_TASK -->
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.FLAG_STOP_WITH_TASK" class="hiddenlink" target="rightframe">FLAG_STOP_WITH_TASK</A>
+</nobr><br>
+<!-- Field flags -->
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.flags" class="hiddenlink" target="rightframe">flags</A>
+</nobr><br>
+<!-- Method flagToString -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.flagToString_added(int)" class="hiddenlink" target="rightframe"><b>flagToString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class FloatEvaluator -->
+<A HREF="android.animation.FloatEvaluator.html" class="hiddenlink" target="rightframe">FloatEvaluator</A><br>
+<!-- Field FOCUS_MODE_CONTINUOUS_PICTURE -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE" class="hiddenlink" target="rightframe">FOCUS_MODE_CONTINUOUS_PICTURE</A>
+</nobr><br>
+<!-- Method forEach -->
+<nobr><A HREF="android.renderscript.Script.html#android.renderscript.Script.forEach_added(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><b>forEach</b>
+(<code>int, Allocation, Allocation, FieldPacker</code>)</A></nobr><br>
+<!-- Method forgetLoadedWallpaper -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.forgetLoadedWallpaper_added()" class="hiddenlink" target="rightframe"><b>forgetLoadedWallpaper</b>
+()</A></nobr><br>
+<!-- Class Fragment -->
+<A HREF="android.app.Fragment.html" class="hiddenlink" target="rightframe">Fragment</A><br>
+<!-- Class FragmentManager -->
+<A HREF="android.app.FragmentManager.html" class="hiddenlink" target="rightframe">FragmentManager</A><br>
+<!-- Class FragmentManager.BackStackEntry -->
+<A HREF="android.app.FragmentManager.BackStackEntry.html" class="hiddenlink" target="rightframe"><i>FragmentManager.BackStackEntry</i></A><br>
+<!-- Class FrameLayout -->
+<A HREF="android.widget.FrameLayout.html" class="hiddenlink" target="rightframe">FrameLayout</A><br>
+<!-- Method freeze -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.freeze_removed()" class="hiddenlink" target="rightframe"><strike>freeze</strike>
+()</A></nobr><br>
+<!-- Method fromDatagramSocket -->
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.fromDatagramSocket_added(java.net.DatagramSocket)" class="hiddenlink" target="rightframe"><b>fromDatagramSocket</b>
+(<code>DatagramSocket</code>)</A></nobr><br>
+<!-- Class FullBackupDataOutput -->
+<A HREF="pkg_android.app.backup.html#FullBackupDataOutput" class="hiddenlink" target="rightframe"><b>FullBackupDataOutput</b></A><br>
+<!-- Method fullBackupFile -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.fullBackupFile_added(java.io.File, android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>fullBackupFile</b>
+(<code>File, FullBackupDataOutput</code>)</A></nobr><br>
+<!-- Field FX_SURFACE_BLUR -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_BLUR" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_BLUR</strike></A>
+</nobr><br>
+<!-- Field FX_SURFACE_DIM -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_DIM" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_DIM</strike></A>
+</nobr><br>
+<!-- Field FX_SURFACE_MASK -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_MASK" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_MASK</strike></A>
+</nobr><br>
+<!-- Field FX_SURFACE_NORMAL -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_NORMAL" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_NORMAL</strike></A>
+</nobr><br>
+<!-- Method getAbsoluteGravity -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.getAbsoluteGravity_added(int, int)" class="hiddenlink" target="rightframe"><b>getAbsoluteGravity</b>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method getAccessibilityServiceList -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getAccessibilityServiceList_changed()" class="hiddenlink" target="rightframe">getAccessibilityServiceList
+()</A></nobr><br>
+<!-- Method getActionProvider -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.getActionProvider_added()" class="hiddenlink" target="rightframe"><b>getActionProvider</b>
+()</A></nobr><br>
+<!-- Method getAddedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getAddedCount_changed()" class="hiddenlink" target="rightframe">getAddedCount
+()</A></nobr><br>
+<!-- Method getAnnotation -->
+<i>getAnnotation</i><br>
+ <nobr><A HREF="java.lang.reflect.Constructor.html#java.lang.reflect.Constructor.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Constructor
+</A></nobr><br>
+<!-- Method getAnnotation -->
+ <nobr><A HREF="java.lang.reflect.Field.html#java.lang.reflect.Field.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Field
+</A></nobr><br>
+<!-- Method getAnnotation -->
+ <nobr><A HREF="java.lang.reflect.Method.html#java.lang.reflect.Method.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Method
+</A></nobr><br>
+<!-- Method getAuthToken -->
+<i>getAuthToken</i><br>
+ <nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_added(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe">type <b>
+(<code>Account, String, Bundle, boolean, AccountManagerCallback<Bundle>, Handler</code>)</b> in android.accounts.AccountManager
+</A></nobr><br>
+<!-- Method getAuthToken -->
+ <nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_changed(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe">type
+(<code>Account, String, boolean, AccountManagerCallback<Bundle>, Handler</code>) in android.accounts.AccountManager
+</A></nobr><br>
+<!-- Method getAutoExposureLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoExposureLock_added()" class="hiddenlink" target="rightframe"><b>getAutoExposureLock</b>
+()</A></nobr><br>
+<!-- Method getAutoWhiteBalanceLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoWhiteBalanceLock_added()" class="hiddenlink" target="rightframe"><b>getAutoWhiteBalanceLock</b>
+()</A></nobr><br>
+<!-- Method getBackgroundDataSetting -->
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.getBackgroundDataSetting_changed()" class="hiddenlink" target="rightframe">getBackgroundDataSetting
+()</A></nobr><br>
+<!-- Method getBeforeText -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getBeforeText_changed()" class="hiddenlink" target="rightframe">getBeforeText
+()</A></nobr><br>
+<!-- Method getButtonState -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getButtonState_added()" class="hiddenlink" target="rightframe"><b>getButtonState</b>
+()</A></nobr><br>
+<!-- Method getCameraDisabled -->
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getCameraDisabled_added(android.content.ComponentName)" class="hiddenlink" target="rightframe"><b>getCameraDisabled</b>
+(<code>ComponentName</code>)</A></nobr><br>
+<!-- Method getCanRetrieveWindowContent -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getCanRetrieveWindowContent_added()" class="hiddenlink" target="rightframe"><b>getCanRetrieveWindowContent</b>
+()</A></nobr><br>
+<!-- Method getClassName -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getClassName_changed()" class="hiddenlink" target="rightframe">getClassName
+()</A></nobr><br>
+<!-- Method getConsiderGoneChildrenWhenMeasuring -->
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getConsiderGoneChildrenWhenMeasuring_changed()" class="hiddenlink" target="rightframe">getConsiderGoneChildrenWhenMeasuring
+()</A></nobr><br>
+<!-- Method getConstructor -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<!-- Method getConstructors -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructors_changed()" class="hiddenlink" target="rightframe">getConstructors
+()</A></nobr><br>
+<!-- Method getContentDescription -->
+<i>getContentDescription</i><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.getContentDescription_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+<!-- Method getContentDescription -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getContentDescription_changed()" class="hiddenlink" target="rightframe">type
+() in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method getCurrentItemIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getCurrentItemIndex_changed()" class="hiddenlink" target="rightframe">getCurrentItemIndex
+()</A></nobr><br>
+<!-- Method getCurrVelocity -->
+<i>getCurrVelocity</i><br>
+ <nobr><A HREF="android.widget.OverScroller.html#android.widget.OverScroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.OverScroller
+</A></nobr><br>
+<!-- Method getCurrVelocity -->
+ <nobr><A HREF="android.widget.Scroller.html#android.widget.Scroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.Scroller
+</A></nobr><br>
+<!-- Method getDatabaseName -->
+<nobr><A HREF="android.database.sqlite.SQLiteOpenHelper.html#android.database.sqlite.SQLiteOpenHelper.getDatabaseName_added()" class="hiddenlink" target="rightframe"><b>getDatabaseName</b>
+()</A></nobr><br>
+<!-- Method getDeclaredClasses -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredClasses_changed()" class="hiddenlink" target="rightframe">getDeclaredClasses
+()</A></nobr><br>
+<!-- Method getDeclaredConstructor -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<!-- Method getDeclaredConstructors -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructors_changed()" class="hiddenlink" target="rightframe">getDeclaredConstructors
+()</A></nobr><br>
+<!-- Method getDeclaredField -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getDeclaredField
+(<code>String</code>)</A></nobr><br>
+<!-- Method getDeclaredFields -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredFields_changed()" class="hiddenlink" target="rightframe">getDeclaredFields
+()</A></nobr><br>
+<!-- Method getDeclaredMethod -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<!-- Method getDeclaredMethods -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethods_changed()" class="hiddenlink" target="rightframe">getDeclaredMethods
+()</A></nobr><br>
+<!-- Method getDescription -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getDescription_added()" class="hiddenlink" target="rightframe"><b>getDescription</b>
+()</A></nobr><br>
+<!-- Method getDisableDependentsState -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getDisableDependentsState_changed()" class="hiddenlink" target="rightframe">getDisableDependentsState
+()</A></nobr><br>
+<!-- Method getDisplayName -->
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.getDisplayName_added(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo)" class="hiddenlink" target="rightframe"><b>getDisplayName</b>
+(<code>Context, String, ApplicationInfo</code>)</A></nobr><br>
+<!-- Method getDividerPadding -->
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.getDividerPadding_added()" class="hiddenlink" target="rightframe"><b>getDividerPadding</b>
+()</A></nobr><br>
+<!-- Method getDuration -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getDuration_added()" class="hiddenlink" target="rightframe"><b>getDuration</b>
+()</A></nobr><br>
+<!-- Method getEGLErrorString -->
+<nobr><A HREF="android.opengl.GLUtils.html#android.opengl.GLUtils.getEGLErrorString_added(int)" class="hiddenlink" target="rightframe"><b>getEGLErrorString</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getEnabledAccessibilityServiceList -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getEnabledAccessibilityServiceList_added(int)" class="hiddenlink" target="rightframe"><b>getEnabledAccessibilityServiceList</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getEngines -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.getEngines_added()" class="hiddenlink" target="rightframe"><b>getEngines</b>
+()</A></nobr><br>
+<!-- Method getField -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getField
+(<code>String</code>)</A></nobr><br>
+<!-- Method getFields -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getFields_changed()" class="hiddenlink" target="rightframe">getFields
+()</A></nobr><br>
+<!-- Method getFocusAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getFocusAreas</b>
+()</A></nobr><br>
+<!-- Method getFromIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getFromIndex_changed()" class="hiddenlink" target="rightframe">getFromIndex
+()</A></nobr><br>
+<!-- Method getHinting -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.getHinting_added()" class="hiddenlink" target="rightframe"><b>getHinting</b>
+()</A></nobr><br>
+<!-- Method getId -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getId_added()" class="hiddenlink" target="rightframe"><b>getId</b>
+()</A></nobr><br>
+<!-- Method getInstalledAccessibilityServiceList -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getInstalledAccessibilityServiceList_added()" class="hiddenlink" target="rightframe"><b>getInstalledAccessibilityServiceList</b>
+()</A></nobr><br>
+<!-- Method getItemCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getItemCount_changed()" class="hiddenlink" target="rightframe">getItemCount
+()</A></nobr><br>
+<!-- Method getLastInputMethodSubtype -->
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.getLastInputMethodSubtype_added()" class="hiddenlink" target="rightframe"><b>getLastInputMethodSubtype</b>
+()</A></nobr><br>
+<!-- Method getMainLooper -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.getMainLooper_changed()" class="hiddenlink" target="rightframe">getMainLooper
+()</A></nobr><br>
+<!-- Method getMaximumBitmapHeight -->
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapHeight_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapHeight</b>
+()</A></nobr><br>
+<!-- Method getMaximumBitmapWidth -->
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapWidth_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapWidth</b>
+()</A></nobr><br>
+<!-- Method getMaxNumDetectedFaces -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumDetectedFaces_added()" class="hiddenlink" target="rightframe"><b>getMaxNumDetectedFaces</b>
+()</A></nobr><br>
+<!-- Method getMaxNumFocusAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumFocusAreas</b>
+()</A></nobr><br>
+<!-- Method getMaxNumMeteringAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumMeteringAreas</b>
+()</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+<i>getMaxTransceiveLength</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcB.html#android.nfc.tech.NfcB.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcB
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<!-- Method getMaxTransceiveLength -->
+ <nobr><A HREF="android.nfc.tech.NfcV.html#android.nfc.tech.NfcV.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcV
+</A></nobr><br>
+<!-- Method getMeasureAllChildren -->
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getMeasureAllChildren_added()" class="hiddenlink" target="rightframe"><b>getMeasureAllChildren</b>
+()</A></nobr><br>
+<!-- Method getMessageName -->
+<nobr><A HREF="android.os.Handler.html#android.os.Handler.getMessageName_added(android.os.Message)" class="hiddenlink" target="rightframe"><b>getMessageName</b>
+(<code>Message</code>)</A></nobr><br>
+<!-- Method getMeteringAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMeteringAreas</b>
+()</A></nobr><br>
+<!-- Method getMethod -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<!-- Method getMethods -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethods_changed()" class="hiddenlink" target="rightframe">getMethods
+()</A></nobr><br>
+<!-- Method getName -->
+<i>getName</i><br>
+ <nobr><A HREF="android.app.FragmentManager.BackStackEntry.html#android.app.FragmentManager.BackStackEntry.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.app.FragmentManager.BackStackEntry
+</A></nobr><br>
+<!-- Method getName -->
+ <nobr><A HREF="android.renderscript.BaseObj.html#android.renderscript.BaseObj.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.renderscript.BaseObj
+</A></nobr><br>
+<!-- Method getOffsetForPosition -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.getOffsetForPosition_added(float, float)" class="hiddenlink" target="rightframe"><b>getOffsetForPosition</b>
+(<code>float, float</code>)</A></nobr><br>
+<!-- Method getOtherLabel -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherLabel_added(int)" class="hiddenlink" target="rightframe"><b>getOtherLabel</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getOtherPrivateDirty -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPrivateDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPrivateDirty</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getOtherPss -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPss_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPss</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getOtherSharedDirty -->
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherSharedDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherSharedDirty</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getParcelableData -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getParcelableData_changed()" class="hiddenlink" target="rightframe">getParcelableData
+()</A></nobr><br>
+<!-- Method getPointerProperties -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getPointerProperties_added(int, android.view.MotionEvent.PointerProperties)" class="hiddenlink" target="rightframe"><b>getPointerProperties</b>
+(<code>int, PointerProperties</code>)</A></nobr><br>
+<!-- Method getProfileConnectionState -->
+<nobr><A HREF="android.bluetooth.BluetoothAdapter.html#android.bluetooth.BluetoothAdapter.getProfileConnectionState_added(int)" class="hiddenlink" target="rightframe"><b>getProfileConnectionState</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getPss -->
+<nobr><A HREF="android.os.Debug.html#android.os.Debug.getPss_added()" class="hiddenlink" target="rightframe"><b>getPss</b>
+()</A></nobr><br>
+<!-- Method getRadioVersion -->
+<nobr><A HREF="android.os.Build.html#android.os.Build.getRadioVersion_added()" class="hiddenlink" target="rightframe"><b>getRadioVersion</b>
+()</A></nobr><br>
+<!-- Method getRecord -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecord_added(int)" class="hiddenlink" target="rightframe"><b>getRecord</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getRecordCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecordCount_added()" class="hiddenlink" target="rightframe"><b>getRecordCount</b>
+()</A></nobr><br>
+<!-- Method getRemovedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRemovedCount_changed()" class="hiddenlink" target="rightframe">getRemovedCount
+()</A></nobr><br>
+<!-- Method getResolveInfo -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getResolveInfo_added()" class="hiddenlink" target="rightframe"><b>getResolveInfo</b>
+()</A></nobr><br>
+<!-- Method getSettingsActivity -->
+<nobr><A HREF="android.content.SyncAdapterType.html#android.content.SyncAdapterType.getSettingsActivity_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivity</b>
+()</A></nobr><br>
+<!-- Method getSettingsActivityName -->
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getSettingsActivityName_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivityName</b>
+()</A></nobr><br>
+<!-- Method getStartDelay -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getStartDelay_added()" class="hiddenlink" target="rightframe"><b>getStartDelay</b>
+()</A></nobr><br>
+<!-- Method getSummaryOff -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOff_changed()" class="hiddenlink" target="rightframe">getSummaryOff
+()</A></nobr><br>
+<!-- Method getSummaryOn -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOn_changed()" class="hiddenlink" target="rightframe">getSummaryOn
+()</A></nobr><br>
+<!-- Method getTag -->
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.getTag_added()" class="hiddenlink" target="rightframe"><b>getTag</b>
+()</A></nobr><br>
+<!-- Method getText -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getText_changed()" class="hiddenlink" target="rightframe">getText
+()</A></nobr><br>
+<!-- Method getTextSize -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextSize_changed()" class="hiddenlink" target="rightframe">getTextSize
+()</A></nobr><br>
+<!-- Method getTextZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextZoom_added()" class="hiddenlink" target="rightframe"><b>getTextZoom</b>
+()</A></nobr><br>
+<!-- Method getThemedContext -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.getThemedContext_added()" class="hiddenlink" target="rightframe"><b>getThemedContext</b>
+()</A></nobr><br>
+<!-- Method getThreadStatsTag -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.getThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>getThreadStatsTag</b>
+()</A></nobr><br>
+<!-- Method getTimeout -->
+<i>getTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+<!-- Method getTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<!-- Method getTimestamp -->
+<nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.getTimestamp_added()" class="hiddenlink" target="rightframe"><b>getTimestamp</b>
+()</A></nobr><br>
+<!-- Method getTitleRes -->
+<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getTitleRes_added()" class="hiddenlink" target="rightframe"><b>getTitleRes</b>
+()</A></nobr><br>
+<!-- Method getToolType -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getToolType_added(int)" class="hiddenlink" target="rightframe"><b>getToolType</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getUrl -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.getUrl_added()" class="hiddenlink" target="rightframe"><b>getUrl</b>
+()</A></nobr><br>
+<!-- Class GLUtils -->
+<A HREF="android.opengl.GLUtils.html" class="hiddenlink" target="rightframe">GLUtils</A><br>
+<!-- Field GPU -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.GPU" class="hiddenlink" target="rightframe"><strike>GPU</strike></A>
+</nobr><br>
+<!-- Class Gravity -->
+<A HREF="android.view.Gravity.html" class="hiddenlink" target="rightframe">Gravity</A><br>
+<!-- Class GridLayout -->
+<A HREF="pkg_android.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<!-- Class GridLayout.Alignment -->
+<A HREF="pkg_android.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<!-- Class GridLayout.LayoutParams -->
+<A HREF="pkg_android.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<!-- Class GridLayout.Spec -->
+<A HREF="pkg_android.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<!-- Class Handler -->
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>Handler</i><br>
+ <A HREF="android.os.Handler.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<!-- Class Handler -->
+ <A HREF="java.util.logging.Handler.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<!-- Field HARDWARE -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HARDWARE" class="hiddenlink" target="rightframe"><strike>HARDWARE</strike></A>
+</nobr><br>
+<!-- Method hashCode -->
+<i>hashCode</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.io.FilePermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.net.SocketPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.AllPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.BasicPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.Permission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.UnresolvedPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<!-- Method hasPermanentMenuKey -->
+<nobr><A HREF="android.view.ViewConfiguration.html#android.view.ViewConfiguration.hasPermanentMenuKey_added()" class="hiddenlink" target="rightframe"><b>hasPermanentMenuKey</b>
+()</A></nobr><br>
+<!-- Field HEALTH -->
+<nobr><A HREF="android.bluetooth.BluetoothProfile.html#android.bluetooth.BluetoothProfile.HEALTH" class="hiddenlink" target="rightframe">HEALTH</A>
+</nobr><br>
+<!-- Field HIDDEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HIDDEN" class="hiddenlink" target="rightframe"><strike>HIDDEN</strike></A>
+</nobr><br>
+<!-- Method hide -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.hide_removed()" class="hiddenlink" target="rightframe"><strike>hide</strike>
+()</A></nobr><br>
+<!-- Field HINTING_OFF -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_OFF" class="hiddenlink" target="rightframe">HINTING_OFF</A>
+</nobr><br>
+<!-- Field HINTING_ON -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_ON" class="hiddenlink" target="rightframe">HINTING_ON</A>
+</nobr><br>
+<!-- Field holo_blue_bright -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_bright" class="hiddenlink" target="rightframe">holo_blue_bright</A>
+</nobr><br>
+<!-- Field holo_blue_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_dark" class="hiddenlink" target="rightframe">holo_blue_dark</A>
+</nobr><br>
+<!-- Field holo_blue_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_light" class="hiddenlink" target="rightframe">holo_blue_light</A>
+</nobr><br>
+<!-- Field holo_green_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_dark" class="hiddenlink" target="rightframe">holo_green_dark</A>
+</nobr><br>
+<!-- Field holo_green_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_light" class="hiddenlink" target="rightframe">holo_green_light</A>
+</nobr><br>
+<!-- Field holo_orange_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_dark" class="hiddenlink" target="rightframe">holo_orange_dark</A>
+</nobr><br>
+<!-- Field holo_orange_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_light" class="hiddenlink" target="rightframe">holo_orange_light</A>
+</nobr><br>
+<!-- Field holo_purple -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_purple" class="hiddenlink" target="rightframe">holo_purple</A>
+</nobr><br>
+<!-- Field holo_red_dark -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_dark" class="hiddenlink" target="rightframe">holo_red_dark</A>
+</nobr><br>
+<!-- Field holo_red_light -->
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_light" class="hiddenlink" target="rightframe">holo_red_light</A>
+</nobr><br>
+<!-- Method I16_2 -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I16_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I16_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I32_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I32_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I32_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I64_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I64_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I64_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I8_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I8_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method I8_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Field ICE_CREAM_SANDWICH -->
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH" class="hiddenlink" target="rightframe">ICE_CREAM_SANDWICH</A>
+</nobr><br>
+<!-- Field IMAGE_ANCHOR_TYPE -->
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.IMAGE_ANCHOR_TYPE" class="hiddenlink" target="rightframe">IMAGE_ANCHOR_TYPE</A>
+</nobr><br>
+<!-- Method incrementOperationCount -->
+<i>incrementOperationCount</i><br>
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+<!-- Method incrementOperationCount -->
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+<!-- Method inflate -->
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.inflate_added(int)" class="hiddenlink" target="rightframe"><b>inflate</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class InputDevice -->
+<A HREF="android.view.InputDevice.html" class="hiddenlink" target="rightframe">InputDevice</A><br>
+<!-- Class InputMethodManager -->
+<A HREF="android.view.inputmethod.InputMethodManager.html" class="hiddenlink" target="rightframe">InputMethodManager</A><br>
+<!-- Class InputMethodService -->
+<A HREF="android.inputmethodservice.InputMethodService.html" class="hiddenlink" target="rightframe">InputMethodService</A><br>
+<!-- Class InputMethodService.InputMethodSessionImpl -->
+<A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html" class="hiddenlink" target="rightframe">InputMethodService.InputMethodSessionImpl</A><br>
+<!-- Class InputMethodSession -->
+<A HREF="android.view.inputmethod.InputMethodSession.html" class="hiddenlink" target="rightframe"><i>InputMethodSession</i></A><br>
+<!-- Class InputMethodSubtype -->
+<i>InputMethodSubtype</i><br>
+ <A HREF="android.view.inputmethod.InputMethodSubtype.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
+<!-- Constructor InputMethodSubtype -->
+ <nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.ctor_added(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)" class="hiddenlink" target="rightframe"><b>InputMethodSubtype</b>
+(<code>int, int, String, String, String, boolean, boolean</code>)</A></nobr> constructor<br>
+<!-- Class Int2 -->
+<i>Int2</i><br>
+ <A HREF="android.renderscript.Int2.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Int2 -->
+ <nobr><A HREF="android.renderscript.Int2.html#android.renderscript.Int2.ctor_added(int, int)" class="hiddenlink" target="rightframe"><b>Int2</b>
+(<code>int, int</code>)</A></nobr> constructor<br>
+<!-- Class Int3 -->
+<i>Int3</i><br>
+ <A HREF="android.renderscript.Int3.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Int3 -->
+ <nobr><A HREF="android.renderscript.Int3.html#android.renderscript.Int3.ctor_added(int, int, int)" class="hiddenlink" target="rightframe"><b>Int3</b>
+(<code>int, int, int</code>)</A></nobr> constructor<br>
+<!-- Class Int4 -->
+<i>Int4</i><br>
+ <A HREF="android.renderscript.Int4.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Int4 -->
+ <nobr><A HREF="android.renderscript.Int4.html#android.renderscript.Int4.ctor_added(int, int, int, int)" class="hiddenlink" target="rightframe"><b>Int4</b>
+(<code>int, int, int, int</code>)</A></nobr> constructor<br>
+<!-- Class Intent -->
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<!-- Field INTENT_ACTION_TTS_SERVICE -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE" class="hiddenlink" target="rightframe">INTENT_ACTION_TTS_SERVICE</A>
+</nobr><br>
+<!-- Class IntentSender -->
+<A HREF="android.content.IntentSender.html" class="hiddenlink" target="rightframe">IntentSender</A><br>
+<!-- Class IntEvaluator -->
+<A HREF="android.animation.IntEvaluator.html" class="hiddenlink" target="rightframe">IntEvaluator</A><br>
+<!-- Field INVALID_POINTER_ID -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.INVALID_POINTER_ID" class="hiddenlink" target="rightframe">INVALID_POINTER_ID</A>
+</nobr><br>
+<!-- Method invalidateOptionsMenu -->
+<nobr><A HREF="android.app.FragmentManager.html#android.app.FragmentManager.invalidateOptionsMenu_added()" class="hiddenlink" target="rightframe"><b>invalidateOptionsMenu</b>
+()</A></nobr><br>
+<!-- Field INVITE_CONTACT -->
+<nobr><A HREF="android.provider.ContactsContract.Intents.html#android.provider.ContactsContract.Intents.INVITE_CONTACT" class="hiddenlink" target="rightframe">INVITE_CONTACT</A>
+</nobr><br>
+<!-- Field IS_READ -->
+<nobr><A HREF="android.provider.CallLog.Calls.html#android.provider.CallLog.Calls.IS_READ" class="hiddenlink" target="rightframe">IS_READ</A>
+</nobr><br>
+<!-- Field IS_USER_PROFILE -->
+<nobr><A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.IS_USER_PROFILE" class="hiddenlink" target="rightframe">IS_USER_PROFILE</A>
+</nobr><br>
+<!-- Method isActionViewExpanded -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.isActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>isActionViewExpanded</b>
+()</A></nobr><br>
+<!-- Method isAutoExposureLockSupported -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoExposureLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoExposureLockSupported</b>
+()</A></nobr><br>
+<!-- Method isAutoWhiteBalanceLockSupported -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoWhiteBalanceLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoWhiteBalanceLockSupported</b>
+()</A></nobr><br>
+<!-- Method isAuxiliary -->
+<i>isAuxiliary</i><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.isAuxiliary_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.inputmethod.InputMethodSubtype
+</A></nobr><br>
+<!-- Field isAuxiliary -->
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.isAuxiliary" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Method isChecked -->
+<i>isChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method isChecked -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method isCompatible -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.isCompatible_added(android.renderscript.Element)" class="hiddenlink" target="rightframe"><b>isCompatible</b>
+(<code>Element</code>)</A></nobr><br>
+<!-- Method isConnected -->
+<nobr><A HREF="android.bluetooth.BluetoothSocket.html#android.bluetooth.BluetoothSocket.isConnected_added()" class="hiddenlink" target="rightframe"><b>isConnected</b>
+()</A></nobr><br>
+<!-- Method isEnabled -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isEnabled_changed()" class="hiddenlink" target="rightframe">isEnabled
+()</A></nobr><br>
+<!-- Method isFullScreen -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isFullScreen_changed()" class="hiddenlink" target="rightframe">isFullScreen
+()</A></nobr><br>
+<!-- Method isHovered -->
+<nobr><A HREF="android.view.View.html#android.view.View.isHovered_added()" class="hiddenlink" target="rightframe"><b>isHovered</b>
+()</A></nobr><br>
+<!-- Class IsoDep -->
+<A HREF="android.nfc.tech.IsoDep.html" class="hiddenlink" target="rightframe">IsoDep</A><br>
+<!-- Method isPassword -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isPassword_changed()" class="hiddenlink" target="rightframe">isPassword
+()</A></nobr><br>
+<!-- Method isProfileId -->
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.isProfileId_added(long)" class="hiddenlink" target="rightframe"><b>isProfileId</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Method isRtlCharAt -->
+<nobr><A HREF="android.text.Layout.html#android.text.Layout.isRtlCharAt_added(int)" class="hiddenlink" target="rightframe"><b>isRtlCharAt</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method isStarted -->
+<nobr><A HREF="android.animation.Animator.html#android.animation.Animator.isStarted_added()" class="hiddenlink" target="rightframe"><b>isStarted</b>
+()</A></nobr><br>
+<!-- Method isSuggestionsEnabled -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.isSuggestionsEnabled_added()" class="hiddenlink" target="rightframe"><b>isSuggestionsEnabled</b>
+()</A></nobr><br>
+<!-- Method isTouchExplorationEnabled -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.isTouchExplorationEnabled_added()" class="hiddenlink" target="rightframe"><b>isTouchExplorationEnabled</b>
+()</A></nobr><br>
+<!-- Method isVideoSnapshotSupported -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isVideoSnapshotSupported_added()" class="hiddenlink" target="rightframe"><b>isVideoSnapshotSupported</b>
+()</A></nobr><br>
+<!-- Method isWiredHeadsetOn -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.isWiredHeadsetOn_changed()" class="hiddenlink" target="rightframe">isWiredHeadsetOn
+()</A></nobr><br>
+<!-- Package java.io -->
+<A NAME="J"></A>
+<A HREF="pkg_java.io.html" class="hiddenlink" target="rightframe">java.io</A><br>
+<!-- Package java.lang -->
+<A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
+<!-- Package java.lang.ref -->
+<A HREF="pkg_java.lang.ref.html" class="hiddenlink" target="rightframe">java.lang.ref</A><br>
+<!-- Package java.lang.reflect -->
+<A HREF="pkg_java.lang.reflect.html" class="hiddenlink" target="rightframe">java.lang.reflect</A><br>
+<!-- Package java.net -->
+<A HREF="pkg_java.net.html" class="hiddenlink" target="rightframe">java.net</A><br>
+<!-- Package java.security -->
+<A HREF="pkg_java.security.html" class="hiddenlink" target="rightframe">java.security</A><br>
+<!-- Package java.util.logging -->
+<A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<!-- Package javax.security.auth -->
+<A HREF="pkg_javax.security.auth.html" class="hiddenlink" target="rightframe">javax.security.auth</A><br>
+<!-- Field KEY_ANDROID_PACKAGE_NAME -->
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.KEY_ANDROID_PACKAGE_NAME" class="hiddenlink" target="rightframe">KEY_ANDROID_PACKAGE_NAME</A>
+</nobr><br>
+<!-- Field KEYCODE_3D_MODE -->
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_3D_MODE" class="hiddenlink" target="rightframe">KEYCODE_3D_MODE</A>
+</nobr><br>
+<!-- Field KEYCODE_LANGUAGE_SWITCH -->
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_LANGUAGE_SWITCH" class="hiddenlink" target="rightframe">KEYCODE_LANGUAGE_SWITCH</A>
+</nobr><br>
+<!-- Field KEYCODE_MANNER_MODE -->
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_MANNER_MODE" class="hiddenlink" target="rightframe">KEYCODE_MANNER_MODE</A>
+</nobr><br>
+<!-- Class KeyEvent -->
+<A HREF="android.view.KeyEvent.html" class="hiddenlink" target="rightframe">KeyEvent</A><br>
+<!-- Class Layout -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.text.Layout.html" class="hiddenlink" target="rightframe">Layout</A><br>
+<!-- Field layout_columnSpan -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_columnSpan" class="hiddenlink" target="rightframe">layout_columnSpan</A>
+</nobr><br>
+<!-- Field layout_row -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_row" class="hiddenlink" target="rightframe">layout_row</A>
+</nobr><br>
+<!-- Field layout_rowSpan -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_rowSpan" class="hiddenlink" target="rightframe">layout_rowSpan</A>
+</nobr><br>
+<!-- Class LayoutTransition -->
+<A HREF="android.animation.LayoutTransition.html" class="hiddenlink" target="rightframe">LayoutTransition</A><br>
+<!-- Class LinearLayout -->
+<A HREF="android.widget.LinearLayout.html" class="hiddenlink" target="rightframe">LinearLayout</A><br>
+<!-- Field listPreferredItemHeightLarge -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightLarge" class="hiddenlink" target="rightframe">listPreferredItemHeightLarge</A>
+</nobr><br>
+<!-- Field listPreferredItemHeightSmall -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightSmall" class="hiddenlink" target="rightframe">listPreferredItemHeightSmall</A>
+</nobr><br>
+<!-- Field listPreferredItemPaddingLeft -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingLeft" class="hiddenlink" target="rightframe">listPreferredItemPaddingLeft</A>
+</nobr><br>
+<!-- Field listPreferredItemPaddingRight -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingRight" class="hiddenlink" target="rightframe">listPreferredItemPaddingRight</A>
+</nobr><br>
+<!-- Class LiveFolders -->
+<A HREF="android.provider.LiveFolders.html" class="hiddenlink" target="rightframe">LiveFolders</A><br>
+<!-- Class Long2 -->
+<i>Long2</i><br>
+ <A HREF="android.renderscript.Long2.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Long2 -->
+ <nobr><A HREF="android.renderscript.Long2.html#android.renderscript.Long2.ctor_added(long, long)" class="hiddenlink" target="rightframe"><b>Long2</b>
+(<code>long, long</code>)</A></nobr> constructor<br>
+<!-- Class Long3 -->
+<i>Long3</i><br>
+ <A HREF="android.renderscript.Long3.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Long3 -->
+ <nobr><A HREF="android.renderscript.Long3.html#android.renderscript.Long3.ctor_added(long, long, long)" class="hiddenlink" target="rightframe"><b>Long3</b>
+(<code>long, long, long</code>)</A></nobr> constructor<br>
+<!-- Class Long4 -->
+<i>Long4</i><br>
+ <A HREF="android.renderscript.Long4.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Long4 -->
+ <nobr><A HREF="android.renderscript.Long4.html#android.renderscript.Long4.ctor_added(long, long, long, long)" class="hiddenlink" target="rightframe"><b>Long4</b>
+(<code>long, long, long, long</code>)</A></nobr> constructor<br>
+<!-- Method loop -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.loop_changed()" class="hiddenlink" target="rightframe">loop
+()</A></nobr><br>
+<!-- Class Looper -->
+<A HREF="android.os.Looper.html" class="hiddenlink" target="rightframe">Looper</A><br>
+<!-- Class Manifest.permission -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<!-- Class Matrix -->
+<A HREF="android.opengl.Matrix.html" class="hiddenlink" target="rightframe">Matrix</A><br>
+<!-- Field MAX_TEXT_LENGTH -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH" class="hiddenlink" target="rightframe">MAX_TEXT_LENGTH</A>
+</nobr><br>
+<!-- Class MediaMetadataRetriever -->
+<A HREF="android.media.MediaMetadataRetriever.html" class="hiddenlink" target="rightframe">MediaMetadataRetriever</A><br>
+<!-- Class MediaPlayer -->
+<A HREF="android.media.MediaPlayer.html" class="hiddenlink" target="rightframe">MediaPlayer</A><br>
+<!-- Class MediaRecorder -->
+<A HREF="android.media.MediaRecorder.html" class="hiddenlink" target="rightframe">MediaRecorder</A><br>
+<!-- Class MediaStore.Audio.AudioColumns -->
+<A HREF="android.provider.MediaStore.Audio.AudioColumns.html" class="hiddenlink" target="rightframe"><i>MediaStore.Audio.AudioColumns</i></A><br>
+<!-- Class MenuItem -->
+<A HREF="android.view.MenuItem.html" class="hiddenlink" target="rightframe"><i>MenuItem</i></A><br>
+<!-- Class MenuItem.OnActionExpandListener -->
+<A HREF="pkg_android.view.html#MenuItem.OnActionExpandListener" class="hiddenlink" target="rightframe"><b><i>MenuItem.OnActionExpandListener</i></b></A><br>
+<!-- Field METADATA_KEY_BITRATE -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_BITRATE" class="hiddenlink" target="rightframe">METADATA_KEY_BITRATE</A>
+</nobr><br>
+<!-- Field METADATA_KEY_HAS_AUDIO -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_AUDIO</A>
+</nobr><br>
+<!-- Field METADATA_KEY_HAS_VIDEO -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_VIDEO</A>
+</nobr><br>
+<!-- Field METADATA_KEY_VIDEO_HEIGHT -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_HEIGHT</A>
+</nobr><br>
+<!-- Field METADATA_KEY_VIDEO_WIDTH -->
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_WIDTH</A>
+</nobr><br>
+<!-- Class Method -->
+<A HREF="java.lang.reflect.Method.html" class="hiddenlink" target="rightframe">Method</A><br>
+<!-- Class MifareClassic -->
+<A HREF="android.nfc.tech.MifareClassic.html" class="hiddenlink" target="rightframe">MifareClassic</A><br>
+<!-- Class MifareUltralight -->
+<A HREF="android.nfc.tech.MifareUltralight.html" class="hiddenlink" target="rightframe">MifareUltralight</A><br>
+<!-- Field minResizeHeight -->
+<i>minResizeHeight</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeHeight" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field minResizeHeight -->
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeHeight" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<!-- Field minResizeWidth -->
+<i>minResizeWidth</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeWidth" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field minResizeWidth -->
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeWidth" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<!-- Class MockPackageManager -->
+<A HREF="android.test.mock.MockPackageManager.html" class="hiddenlink" target="rightframe">MockPackageManager</A><br>
+<!-- Class MotionEvent -->
+<A HREF="android.view.MotionEvent.html" class="hiddenlink" target="rightframe">MotionEvent</A><br>
+<!-- Class MotionEvent.PointerProperties -->
+<A HREF="pkg_android.view.html#MotionEvent.PointerProperties" class="hiddenlink" target="rightframe"><b>MotionEvent.PointerProperties</b></A><br>
+<!-- Method myLooper -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myLooper_changed()" class="hiddenlink" target="rightframe">myLooper
+()</A></nobr><br>
+<!-- Method myQueue -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myQueue_changed()" class="hiddenlink" target="rightframe">myQueue
+()</A></nobr><br>
+<!-- Class NdefRecord -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.nfc.NdefRecord.html" class="hiddenlink" target="rightframe">NdefRecord</A><br>
+<!-- Method newChooseAccountIntent -->
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.newChooseAccountIntent_added(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle)" class="hiddenlink" target="rightframe"><b>newChooseAccountIntent</b>
+(<code>Account, ArrayList<Account>, String[], boolean, String, String, String[], Bundle</code>)</A></nobr><br>
+<!-- Class NfcA -->
+<A HREF="android.nfc.tech.NfcA.html" class="hiddenlink" target="rightframe">NfcA</A><br>
+<!-- Class NfcAdapter -->
+<A HREF="android.nfc.NfcAdapter.html" class="hiddenlink" target="rightframe">NfcAdapter</A><br>
+<!-- Class NfcAdapter.CreateNdefMessageCallback -->
+<A HREF="pkg_android.nfc.html#NfcAdapter.CreateNdefMessageCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.CreateNdefMessageCallback</i></b></A><br>
+<!-- Class NfcAdapter.OnNdefPushCompleteCallback -->
+<A HREF="pkg_android.nfc.html#NfcAdapter.OnNdefPushCompleteCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.OnNdefPushCompleteCallback</i></b></A><br>
+<!-- Class NfcB -->
+<A HREF="android.nfc.tech.NfcB.html" class="hiddenlink" target="rightframe">NfcB</A><br>
+<!-- Class NfcEvent -->
+<A HREF="pkg_android.nfc.html#NfcEvent" class="hiddenlink" target="rightframe"><b>NfcEvent</b></A><br>
+<!-- Class NfcF -->
+<A HREF="android.nfc.tech.NfcF.html" class="hiddenlink" target="rightframe">NfcF</A><br>
+<!-- Class NfcV -->
+<A HREF="android.nfc.tech.NfcV.html" class="hiddenlink" target="rightframe">NfcV</A><br>
+<!-- Field NON_PREMULTIPLIED -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.NON_PREMULTIPLIED" class="hiddenlink" target="rightframe"><strike>NON_PREMULTIPLIED</strike></A>
+</nobr><br>
+<!-- Class NoSuchPropertyException -->
+<A HREF="pkg_android.util.html#NoSuchPropertyException" class="hiddenlink" target="rightframe"><b>NoSuchPropertyException</b></A><br>
+<!-- Class Notification.Builder -->
+<A HREF="android.app.Notification.Builder.html" class="hiddenlink" target="rightframe">Notification.Builder</A><br>
+<!-- Field notificationTimeout -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.notificationTimeout" class="hiddenlink" target="rightframe">notificationTimeout</A>
+</nobr><br>
+<!-- Class ObjectAnimator -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.animation.ObjectAnimator.html" class="hiddenlink" target="rightframe">ObjectAnimator</A><br>
+<!-- Class ObjectInputStream -->
+<A HREF="java.io.ObjectInputStream.html" class="hiddenlink" target="rightframe">ObjectInputStream</A><br>
+<!-- Class ObjectOutputStream -->
+<A HREF="java.io.ObjectOutputStream.html" class="hiddenlink" target="rightframe">ObjectOutputStream</A><br>
+<!-- Method obtain -->
+<i>obtain</i><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_removed(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</strike> in android.view.MotionEvent
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, PointerProperties[], PointerCoords[], int, int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.obtain_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>AccessibilityEvent</code>)</b> in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method ofFloat -->
+<i>ofFloat</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofFloat_added(T, android.util.Property<T, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Float>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method ofFloat -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofFloat_added(android.util.Property<?, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Float>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method ofInt -->
+<i>ofInt</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofInt_added(T, android.util.Property<T, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Integer>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method ofInt -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofInt_added(android.util.Property<?, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Integer>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method ofKeyframe -->
+<nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofKeyframe_added(android.util.Property, android.animation.Keyframe...)" class="hiddenlink" target="rightframe"><b>ofKeyframe</b>
+(<code>Property, </code>)</A></nobr><br>
+<!-- Method ofObject -->
+<i>ofObject</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofObject_added(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, V>, TypeEvaluator<V>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method ofObject -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofObject_added(android.util.Property, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property, TypeEvaluator<V>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method onActionViewCollapsed -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewCollapsed_added()" class="hiddenlink" target="rightframe"><b>onActionViewCollapsed</b>
+()</A></nobr><br>
+<!-- Method onActionViewExpanded -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>onActionViewExpanded</b>
+()</A></nobr><br>
+<!-- Method onBuildStartFragmentIntent -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.onBuildStartFragmentIntent_added(java.lang.String, android.os.Bundle, int, int)" class="hiddenlink" target="rightframe"><b>onBuildStartFragmentIntent</b>
+(<code>String, Bundle, int, int</code>)</A></nobr><br>
+<!-- Method onFullBackup -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onFullBackup_added(android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>onFullBackup</b>
+(<code>FullBackupDataOutput</code>)</A></nobr><br>
+<!-- Method onHoverChanged -->
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverChanged_added(boolean)" class="hiddenlink" target="rightframe"><b>onHoverChanged</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method onHoverEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method onInitializeAccessibilityEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method onInitializeAccessibilityNodeInfo -->
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityNodeInfo_added(android.view.accessibility.AccessibilityNodeInfo)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityNodeInfo</b>
+(<code>AccessibilityNodeInfo</code>)</A></nobr><br>
+<!-- Method onInterceptHoverEvent -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onInterceptHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onInterceptHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method onPopulateAccessibilityEvent -->
+<nobr><A HREF="android.view.View.html#android.view.View.onPopulateAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onPopulateAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method onRequestSendAccessibilityEvent -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onRequestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onRequestSendAccessibilityEvent</b>
+(<code>View, AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method onRestoreFile -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onRestoreFile_added(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long)" class="hiddenlink" target="rightframe"><b>onRestoreFile</b>
+(<code>ParcelFileDescriptor, long, File, int, long, long</code>)</A></nobr><br>
+<!-- Method onShowCustomView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, int, CustomViewCallback</code>)</A></nobr><br>
+<!-- Method onTaskRemoved -->
+<nobr><A HREF="android.app.Service.html#android.app.Service.onTaskRemoved_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>onTaskRemoved</b>
+(<code>Intent</code>)</A></nobr><br>
+<!-- Method onTrimMemory -->
+<i>onTrimMemory</i><br>
+ <nobr><A HREF="android.app.Activity.html#android.app.Activity.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Activity
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.app.Application.html#android.app.Application.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Application
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.app.Fragment.html#android.app.Fragment.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Fragment
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.app.Service.html#android.app.Service.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Service
+</A></nobr><br>
+<!-- Method onTrimMemory -->
+ <nobr><A HREF="android.content.ContentProvider.html#android.content.ContentProvider.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.content.ContentProvider
+</A></nobr><br>
+<!-- Method onViewClicked -->
+<nobr><A HREF="android.inputmethodservice.InputMethodService.html#android.inputmethodservice.InputMethodService.onViewClicked_added(boolean)" class="hiddenlink" target="rightframe"><b>onViewClicked</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method openContactPhotoInputStream -->
+<nobr><A HREF="android.provider.ContactsContract.Contacts.html#android.provider.ContactsContract.Contacts.openContactPhotoInputStream_added(android.content.ContentResolver, android.net.Uri, boolean)" class="hiddenlink" target="rightframe"><b>openContactPhotoInputStream</b>
+(<code>ContentResolver, Uri, boolean</code>)</A></nobr><br>
+<!-- Method overridesImplicitlyEnabledSubtype -->
+<i>overridesImplicitlyEnabledSubtype</i><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.overridesImplicitlyEnabledSubtype_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.inputmethod.InputMethodSubtype
+</A></nobr><br>
+<!-- Field overridesImplicitlyEnabledSubtype -->
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.overridesImplicitlyEnabledSubtype" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Class OverScroller -->
+<A HREF="android.widget.OverScroller.html" class="hiddenlink" target="rightframe">OverScroller</A><br>
+<!-- Class PackageManager -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<!-- Field packageNames -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.packageNames" class="hiddenlink" target="rightframe">packageNames</A>
+</nobr><br>
+<!-- Class PackageStats -->
+<A HREF="android.content.pm.PackageStats.html" class="hiddenlink" target="rightframe">PackageStats</A><br>
+<!-- Class Paint -->
+<A HREF="android.graphics.Paint.html" class="hiddenlink" target="rightframe">Paint</A><br>
+<!-- Class ParcelFileDescriptor -->
+<A HREF="android.os.ParcelFileDescriptor.html" class="hiddenlink" target="rightframe">ParcelFileDescriptor</A><br>
+<!-- Field PASSWORD_QUALITY_BIOMETRIC_WEAK -->
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK" class="hiddenlink" target="rightframe">PASSWORD_QUALITY_BIOMETRIC_WEAK</A>
+</nobr><br>
+<!-- Class PathClassLoader -->
+<A HREF="dalvik.system.PathClassLoader.html" class="hiddenlink" target="rightframe">PathClassLoader</A><br>
+<!-- Class Patterns -->
+<A HREF="android.util.Patterns.html" class="hiddenlink" target="rightframe">Patterns</A><br>
+<!-- Class PendingIntent -->
+<A HREF="android.app.PendingIntent.html" class="hiddenlink" target="rightframe">PendingIntent</A><br>
+<!-- Class Permission -->
+<A HREF="java.security.Permission.html" class="hiddenlink" target="rightframe">Permission</A><br>
+<!-- Method perspectiveM -->
+<nobr><A HREF="android.opengl.Matrix.html#android.opengl.Matrix.perspectiveM_added(float[], int, float, float, float, float)" class="hiddenlink" target="rightframe"><b>perspectiveM</b>
+(<code>float[], int, float, float, float, float</code>)</A></nobr><br>
+<!-- Field PHOTO_FILE_ID -->
+<i>PHOTO_FILE_ID</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html#android.provider.ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.CommonDataKinds.Photo</A>
+</nobr><br>
+<!-- Field PHOTO_FILE_ID -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.Contacts.Photo</A>
+</nobr><br>
+<!-- Field PHOTO_FILE_ID -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.ContactsColumns</A>
+</nobr><br>
+<!-- Class PopupMenu -->
+<A HREF="android.widget.PopupMenu.html" class="hiddenlink" target="rightframe">PopupMenu</A><br>
+<!-- Class PopupMenu.OnDismissListener -->
+<A HREF="pkg_android.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<!-- Class Preference -->
+<A HREF="android.preference.Preference.html" class="hiddenlink" target="rightframe">Preference</A><br>
+<!-- Class PreferenceActivity -->
+<A HREF="android.preference.PreferenceActivity.html" class="hiddenlink" target="rightframe">PreferenceActivity</A><br>
+<!-- Method prepare -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepare_changed()" class="hiddenlink" target="rightframe">prepare
+()</A></nobr><br>
+<!-- Method prepareMainLooper -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepareMainLooper_changed()" class="hiddenlink" target="rightframe">prepareMainLooper
+()</A></nobr><br>
+<!-- Field PRIMARY_ACCOUNT_NAME -->
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_NAME" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_NAME</A>
+</nobr><br>
+<!-- Field PRIMARY_ACCOUNT_TYPE -->
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_TYPE" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_TYPE</A>
+</nobr><br>
+<!-- Class PrivateCredentialPermission -->
+<A HREF="javax.security.auth.PrivateCredentialPermission.html" class="hiddenlink" target="rightframe">PrivateCredentialPermission</A><br>
+<!-- Class Process -->
+<A HREF="android.os.Process.html" class="hiddenlink" target="rightframe">Process</A><br>
+<!-- Field PROFILE_CONTENT_URI -->
+<i>PROFILE_CONTENT_URI</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html#android.provider.ContactsContract.RawContactsEntity.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsEntity</A>
+</nobr><br>
+<!-- Field PROFILE_CONTENT_URI -->
+<nobr> in
+<A HREF="android.provider.ContactsContract.StatusUpdates.html#android.provider.ContactsContract.StatusUpdates.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.StatusUpdates</A>
+</nobr><br>
+<!-- Class Property -->
+<A HREF="pkg_android.util.html#Property" class="hiddenlink" target="rightframe"><b>Property</b></A><br>
+<!-- Class PropertyValuesHolder -->
+<A HREF="android.animation.PropertyValuesHolder.html" class="hiddenlink" target="rightframe">PropertyValuesHolder</A><br>
+<!-- Field publicKey -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.publicKey" class="hiddenlink" target="rightframe">publicKey</A>
+</nobr><br>
+<!-- Field PUSH_BUFFERS -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.PUSH_BUFFERS" class="hiddenlink" target="rightframe"><strike>PUSH_BUFFERS</strike></A>
+</nobr><br>
+<!-- Class R.attr -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<!-- Class R.color -->
+<A HREF="android.R.color.html" class="hiddenlink" target="rightframe">R.color</A><br>
+<!-- Class R.integer -->
+<A HREF="android.R.integer.html" class="hiddenlink" target="rightframe">R.integer</A><br>
+<!-- Class R.string -->
+<A HREF="android.R.string.html" class="hiddenlink" target="rightframe">R.string</A><br>
+<!-- Class R.style -->
+<A HREF="android.R.style.html" class="hiddenlink" target="rightframe">R.style</A><br>
+<!-- Field RADIO -->
+<nobr><A HREF="android.os.Build.html#android.os.Build.RADIO" class="hiddenlink" target="rightframe">RADIO</A>
+</nobr><br>
+<!-- Field RADIO_NFC -->
+<nobr><A HREF="android.provider.Settings.System.html#android.provider.Settings.System.RADIO_NFC" class="hiddenlink" target="rightframe">RADIO_NFC</A>
+</nobr><br>
+<!-- Field RAW_CONTACT_IS_USER_PROFILE -->
+<nobr><A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.RAW_CONTACT_IS_USER_PROFILE" class="hiddenlink" target="rightframe">RAW_CONTACT_IS_USER_PROFILE</A>
+</nobr><br>
+<!-- Field READ_PROFILE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.READ_PROFILE" class="hiddenlink" target="rightframe">READ_PROFILE</A>
+</nobr><br>
+<!-- Method readData -->
+<i>readData</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method readData -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method rebootWipeCache -->
+<nobr><A HREF="android.os.RecoverySystem.html#android.os.RecoverySystem.rebootWipeCache_added(android.content.Context)" class="hiddenlink" target="rightframe"><b>rebootWipeCache</b>
+(<code>Context</code>)</A></nobr><br>
+<!-- Class RecognizerIntent -->
+<A HREF="android.speech.RecognizerIntent.html" class="hiddenlink" target="rightframe">RecognizerIntent</A><br>
+<!-- Class RecoverySystem -->
+<A HREF="android.os.RecoverySystem.html" class="hiddenlink" target="rightframe">RecoverySystem</A><br>
+<!-- Class RectF -->
+<A HREF="android.graphics.RectF.html" class="hiddenlink" target="rightframe">RectF</A><br>
+<!-- Method recycle -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.recycle_changed()" class="hiddenlink" target="rightframe">recycle
+()</A></nobr><br>
+<!-- Class ReferenceQueue -->
+<A HREF="java.lang.ref.ReferenceQueue.html" class="hiddenlink" target="rightframe">ReferenceQueue</A><br>
+<!-- Method registerActivityLifecycleCallbacks -->
+<nobr><A HREF="android.app.Application.html#android.app.Application.registerActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>registerActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<!-- Method registerComponentCallbacks -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.registerComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>registerComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<!-- Method registerRemoteControlClient -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.registerRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>registerRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<!-- Field RELATIVE_HORIZONTAL_GRAVITY_MASK -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK" class="hiddenlink" target="rightframe">RELATIVE_HORIZONTAL_GRAVITY_MASK</A>
+</nobr><br>
+<!-- Field RELATIVE_LAYOUT_DIRECTION -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_LAYOUT_DIRECTION" class="hiddenlink" target="rightframe">RELATIVE_LAYOUT_DIRECTION</A>
+</nobr><br>
+<!-- Method release -->
+<i>release</i><br>
+ <nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.graphics.SurfaceTexture
+</A></nobr><br>
+<!-- Method release -->
+ <nobr><A HREF="android.view.Surface.html#android.view.Surface.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.Surface
+</A></nobr><br>
+<!-- Class RemoteControlClient -->
+<A HREF="pkg_android.media.html#RemoteControlClient" class="hiddenlink" target="rightframe"><b>RemoteControlClient</b></A><br>
+<!-- Class RemoteControlClient.MetadataEditor -->
+<A HREF="pkg_android.media.html#RemoteControlClient.MetadataEditor" class="hiddenlink" target="rightframe"><b>RemoteControlClient.MetadataEditor</b></A><br>
+<!-- Class RemoteViews -->
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<!-- Method remove -->
+<nobr><A HREF="java.lang.ref.ReferenceQueue.html#java.lang.ref.ReferenceQueue.remove_changed(long)" class="hiddenlink" target="rightframe">remove
+(<code>long</code>)</A></nobr><br>
+<!-- Method removeAccessibilityStateChangeListener -->
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.removeAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Class RenderScriptGL -->
+<A HREF="android.renderscript.RenderScriptGL.html" class="hiddenlink" target="rightframe">RenderScriptGL</A><br>
+<!-- Method requestSendAccessibilityEvent -->
+<i>requestSendAccessibilityEvent</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewGroup
+</A></nobr><br>
+<!-- Method requestSendAccessibilityEvent -->
+ <nobr><A HREF="android.view.ViewParent.html#android.view.ViewParent.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewParent
+</A></nobr><br>
+<!-- Field requiresFadingEdge -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.requiresFadingEdge" class="hiddenlink" target="rightframe">requiresFadingEdge</A>
+</nobr><br>
+<!-- Method resetResolvedDrawables -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedDrawables_added()" class="hiddenlink" target="rightframe"><b>resetResolvedDrawables</b>
+()</A></nobr><br>
+<!-- Method resetResolvedLayoutDirection -->
+<i>resetResolvedLayoutDirection</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.ViewGroup
+</A></nobr><br>
+<!-- Method resetResolvedLayoutDirection -->
+ <nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.TextView
+</A></nobr><br>
+<!-- Method resetResolvedTextDirection -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedTextDirection_added()" class="hiddenlink" target="rightframe"><b>resetResolvedTextDirection</b>
+()</A></nobr><br>
+<!-- Method resolveDrawables -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveDrawables_added()" class="hiddenlink" target="rightframe"><b>resolveDrawables</b>
+()</A></nobr><br>
+<!-- Method resolveTextDirection -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveTextDirection_added()" class="hiddenlink" target="rightframe"><b>resolveTextDirection</b>
+()</A></nobr><br>
+<!-- Field ROTATION -->
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION" class="hiddenlink" target="rightframe">ROTATION</A>
+</nobr><br>
+<!-- Field ROTATION_X -->
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_X" class="hiddenlink" target="rightframe">ROTATION_X</A>
+</nobr><br>
+<!-- Field ROTATION_Y -->
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_Y" class="hiddenlink" target="rightframe">ROTATION_Y</A>
+</nobr><br>
+<!-- Field rowCount -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowCount" class="hiddenlink" target="rightframe">rowCount</A>
+</nobr><br>
+<!-- Field rowOrderPreserved -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowOrderPreserved" class="hiddenlink" target="rightframe">rowOrderPreserved</A>
+</nobr><br>
+<!-- Class RSTextureView -->
+<A HREF="pkg_android.renderscript.html#RSTextureView" class="hiddenlink" target="rightframe"><b>RSTextureView</b></A><br>
+<!-- Field SCALE_X -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_X" class="hiddenlink" target="rightframe">SCALE_X</A>
+</nobr><br>
+<!-- Field SCALE_Y -->
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_Y" class="hiddenlink" target="rightframe">SCALE_Y</A>
+</nobr><br>
+<!-- Field SCO_AUDIO_STATE_CONNECTING -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.SCO_AUDIO_STATE_CONNECTING" class="hiddenlink" target="rightframe">SCO_AUDIO_STATE_CONNECTING</A>
+</nobr><br>
+<!-- Class Script -->
+<A HREF="android.renderscript.Script.html" class="hiddenlink" target="rightframe">Script</A><br>
+<!-- Class Scroller -->
+<A HREF="android.widget.Scroller.html" class="hiddenlink" target="rightframe">Scroller</A><br>
+<!-- Class SearchManager -->
+<A HREF="android.app.SearchManager.html" class="hiddenlink" target="rightframe">SearchManager</A><br>
+<!-- Class SearchView -->
+<A HREF="android.widget.SearchView.html" class="hiddenlink" target="rightframe">SearchView</A><br>
+<!-- Field SECURE -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SECURE" class="hiddenlink" target="rightframe"><strike>SECURE</strike></A>
+</nobr><br>
+<!-- Method send -->
+<nobr><A HREF="android.app.PendingIntent.html#android.app.PendingIntent.send_added(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>send</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<!-- Method sendIntent -->
+<nobr><A HREF="android.content.IntentSender.html#android.content.IntentSender.sendIntent_added(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>sendIntent</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<!-- Class Sensor -->
+<A HREF="android.hardware.Sensor.html" class="hiddenlink" target="rightframe">Sensor</A><br>
+<!-- Class Service -->
+<A HREF="android.app.Service.html" class="hiddenlink" target="rightframe">Service</A><br>
+<!-- Field SERVICE_META_DATA -->
+<i>SERVICE_META_DATA</i><br>
+<nobr> in
+<A HREF="android.accessibilityservice.AccessibilityService.html#android.accessibilityservice.AccessibilityService.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.accessibilityservice.AccessibilityService</A>
+</nobr><br>
+<!-- Field SERVICE_META_DATA -->
+<nobr> in
+<A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.speech.tts.TextToSpeech.Engine</A>
+</nobr><br>
+<!-- Class ServiceInfo -->
+<A HREF="android.content.pm.ServiceInfo.html" class="hiddenlink" target="rightframe">ServiceInfo</A><br>
+<!-- Method setAccessibilityDelegate -->
+<nobr><A HREF="android.view.View.html#android.view.View.setAccessibilityDelegate_added(android.view.View.AccessibilityDelegate)" class="hiddenlink" target="rightframe"><b>setAccessibilityDelegate</b>
+(<code>AccessibilityDelegate</code>)</A></nobr><br>
+<!-- Method setAccessible -->
+<i>setAccessible</i><br>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(java.lang.reflect.AccessibleObject[], boolean)" class="hiddenlink" target="rightframe">type
+(<code>AccessibleObject[], boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+<!-- Method setAccessible -->
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+<!-- Method setActionProvider -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setActionProvider_added(android.view.ActionProvider)" class="hiddenlink" target="rightframe"><b>setActionProvider</b>
+(<code>ActionProvider</code>)</A></nobr><br>
+<!-- Method setAddedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setAddedCount_changed(int)" class="hiddenlink" target="rightframe">setAddedCount
+(<code>int</code>)</A></nobr><br>
+<!-- Method setAdditionalInputMethodSubtypes -->
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.setAdditionalInputMethodSubtypes_added(java.lang.String, android.view.inputmethod.InputMethodSubtype[])" class="hiddenlink" target="rightframe"><b>setAdditionalInputMethodSubtypes</b>
+(<code>String, InputMethodSubtype[]</code>)</A></nobr><br>
+<!-- Method setAllCaps -->
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.setAllCaps_added(boolean)" class="hiddenlink" target="rightframe"><b>setAllCaps</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAlpha -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setAlpha_removed(float)" class="hiddenlink" target="rightframe"><strike>setAlpha</strike>
+(<code>float</code>)</A></nobr><br>
+<!-- Method setAnimateParentHierarchy -->
+<nobr><A HREF="android.animation.LayoutTransition.html#android.animation.LayoutTransition.setAnimateParentHierarchy_added(boolean)" class="hiddenlink" target="rightframe"><b>setAnimateParentHierarchy</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAutoExposureLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoExposureLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoExposureLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAutoWhiteBalanceLock -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoWhiteBalanceLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoWhiteBalanceLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAuxiliaryOutputFile -->
+<i>setAuxiliaryOutputFile</i><br>
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.io.FileDescriptor)" class="hiddenlink" target="rightframe">type
+(<code>FileDescriptor</code>) in android.media.MediaRecorder
+</A></nobr><br>
+<!-- Method setAuxiliaryOutputFile -->
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.lang.String)" class="hiddenlink" target="rightframe">type
+(<code>String</code>) in android.media.MediaRecorder
+</A></nobr><br>
+<!-- Method setBeforeText -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setBeforeText_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setBeforeText
+(<code>CharSequence</code>)</A></nobr><br>
+<!-- Method setCameraDisabled -->
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setCameraDisabled_added(android.content.ComponentName, boolean)" class="hiddenlink" target="rightframe"><b>setCameraDisabled</b>
+(<code>ComponentName, boolean</code>)</A></nobr><br>
+<!-- Method setChecked -->
+<i>setChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setChecked -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method setClassName -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setClassName_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setClassName
+(<code>CharSequence</code>)</A></nobr><br>
+<!-- Method setContentDescription -->
+<i>setContentDescription</i><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+<!-- Method setContentDescription -->
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+<!-- Method setContentDescription -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setContentDescription_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type
+(<code>CharSequence</code>) in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method setCurrentItemIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setCurrentItemIndex_changed(int)" class="hiddenlink" target="rightframe">setCurrentItemIndex
+(<code>int</code>)</A></nobr><br>
+<!-- Method setDataSource -->
+<i>setDataSource</i><br>
+ <nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.setDataSource_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>String, Map<String, String></code>)</b> in android.media.MediaMetadataRetriever
+</A></nobr><br>
+<!-- Method setDataSource -->
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_removed(java.lang.String)" class="hiddenlink" target="rightframe">type <strike>
+(<code>String</code>)</strike> in android.media.MediaPlayer
+</A></nobr><br>
+<!-- Method setDataSource -->
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, Uri, Map<String, String></code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+<!-- Method setDataSource -->
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+<!-- Method setDimAmount -->
+<nobr><A HREF="android.view.Window.html#android.view.Window.setDimAmount_added(float)" class="hiddenlink" target="rightframe"><b>setDimAmount</b>
+(<code>float</code>)</A></nobr><br>
+<!-- Method setDisableDependentsState -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setDisableDependentsState_changed(boolean)" class="hiddenlink" target="rightframe">setDisableDependentsState
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setDividerPadding -->
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.setDividerPadding_added(int)" class="hiddenlink" target="rightframe"><b>setDividerPadding</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setEnabled -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setEnabled_changed(boolean)" class="hiddenlink" target="rightframe">setEnabled
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setEncoding -->
+<nobr><A HREF="java.util.logging.Handler.html#java.util.logging.Handler.setEncoding_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEncoding
+(<code>String</code>)</A></nobr><br>
+<!-- Method setEngineByPackageName -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.setEngineByPackageName_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEngineByPackageName
+(<code>String</code>)</A></nobr><br>
+<!-- Method setFaceDetectionListener -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.setFaceDetectionListener_added(android.hardware.Camera.FaceDetectionListener)" class="hiddenlink" target="rightframe"><b>setFaceDetectionListener</b>
+(<code>FaceDetectionListener</code>)</A></nobr><br>
+<!-- Method setFitsSystemWindows -->
+<nobr><A HREF="android.view.View.html#android.view.View.setFitsSystemWindows_added(boolean)" class="hiddenlink" target="rightframe"><b>setFitsSystemWindows</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setFlags -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFlags_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setFlags</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setFocusAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setFocusAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setFocusAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<!-- Method setFreezeTint -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFreezeTint_removed(int)" class="hiddenlink" target="rightframe"><strike>setFreezeTint</strike>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setFromIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFromIndex_changed(int)" class="hiddenlink" target="rightframe">setFromIndex
+(<code>int</code>)</A></nobr><br>
+<!-- Method setFullScreen -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFullScreen_changed(boolean)" class="hiddenlink" target="rightframe">setFullScreen
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setHinting -->
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.setHinting_added(int)" class="hiddenlink" target="rightframe"><b>setHinting</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setHomeButtonEnabled -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setHomeButtonEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setHomeButtonEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setHovered -->
+<nobr><A HREF="android.view.View.html#android.view.View.setHovered_added(boolean)" class="hiddenlink" target="rightframe"><b>setHovered</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setIcon -->
+<i>setIcon</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setIcon -->
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setImeOptions -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setImeOptions_added(int)" class="hiddenlink" target="rightframe"><b>setImeOptions</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setInputType -->
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setInputType_added(int)" class="hiddenlink" target="rightframe"><b>setInputType</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setItemCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setItemCount_changed(int)" class="hiddenlink" target="rightframe">setItemCount
+(<code>int</code>)</A></nobr><br>
+<!-- Method setKeyManagers -->
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setKeyManagers_added(javax.net.ssl.KeyManager[])" class="hiddenlink" target="rightframe"><b>setKeyManagers</b>
+(<code>KeyManager[]</code>)</A></nobr><br>
+<!-- Method setLayer -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setLayer_removed(int)" class="hiddenlink" target="rightframe"><strike>setLayer</strike>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setLocation -->
+<nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setLocation_added(float, float)" class="hiddenlink" target="rightframe"><b>setLocation</b>
+(<code>float, float</code>)</A></nobr><br>
+<!-- Method setLogo -->
+<i>setLogo</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setLogo -->
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<!-- Method setMatrix -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setMatrix_removed(float, float, float, float)" class="hiddenlink" target="rightframe"><strike>setMatrix</strike>
+(<code>float, float, float, float</code>)</A></nobr><br>
+<!-- Method setMenuVisibility -->
+<nobr><A HREF="android.app.Fragment.html#android.app.Fragment.setMenuVisibility_added(boolean)" class="hiddenlink" target="rightframe"><b>setMenuVisibility</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setMeteringAreas -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setMeteringAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setMeteringAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<!-- Method setNdefPushMessage -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessage_added(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessage</b>
+(<code>NdefMessage, Activity, </code>)</A></nobr><br>
+<!-- Method setNdefPushMessageCallback -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessageCallback_added(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessageCallback</b>
+(<code>CreateNdefMessageCallback, Activity, </code>)</A></nobr><br>
+<!-- Method setOnActionExpandListener -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setOnActionExpandListener_added(android.view.MenuItem.OnActionExpandListener)" class="hiddenlink" target="rightframe"><b>setOnActionExpandListener</b>
+(<code>OnActionExpandListener</code>)</A></nobr><br>
+<!-- Method setOnDismissListener -->
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.setOnDismissListener_added(android.widget.PopupMenu.OnDismissListener)" class="hiddenlink" target="rightframe"><b>setOnDismissListener</b>
+(<code>OnDismissListener</code>)</A></nobr><br>
+<!-- Method setOnHoverListener -->
+<nobr><A HREF="android.view.View.html#android.view.View.setOnHoverListener_added(android.view.View.OnHoverListener)" class="hiddenlink" target="rightframe"><b>setOnHoverListener</b>
+(<code>OnHoverListener</code>)</A></nobr><br>
+<!-- Method setOnNdefPushCompleteCallback -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setOnNdefPushCompleteCallback_added(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setOnNdefPushCompleteCallback</b>
+(<code>OnNdefPushCompleteCallback, Activity, </code>)</A></nobr><br>
+<!-- Method setOrientation -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setOrientation_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setOrientation</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setParcelableData -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setParcelableData_changed(android.os.Parcelable)" class="hiddenlink" target="rightframe">setParcelableData
+(<code>Parcelable</code>)</A></nobr><br>
+<!-- Method setPassword -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setPassword_changed(boolean)" class="hiddenlink" target="rightframe">setPassword
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setPosition -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setPosition_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setPosition</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setProgress -->
+<nobr><A HREF="android.app.Notification.Builder.html#android.app.Notification.Builder.setProgress_added(int, int, boolean)" class="hiddenlink" target="rightframe"><b>setProgress</b>
+(<code>int, int, boolean</code>)</A></nobr><br>
+<!-- Method setProperty -->
+<i>setProperty</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+<!-- Method setProperty -->
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<!-- Method setRecordingHint -->
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setRecordingHint_added(boolean)" class="hiddenlink" target="rightframe"><b>setRecordingHint</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setRemoteAdapter -->
+<i>setRemoteAdapter</i><br>
+ <nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_added(int, android.content.Intent)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, Intent</code>)</b> in android.widget.RemoteViews
+</A></nobr><br>
+<!-- Method setRemoteAdapter -->
+ <nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_changed(int, int, android.content.Intent)" class="hiddenlink" target="rightframe">type
+(<code>int, int, Intent</code>) in android.widget.RemoteViews
+</A></nobr><br>
+<!-- Method setRemovedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setRemovedCount_changed(int)" class="hiddenlink" target="rightframe">setRemovedCount
+(<code>int</code>)</A></nobr><br>
+<!-- Method setScrollX -->
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollX_added(int)" class="hiddenlink" target="rightframe"><b>setScrollX</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setScrollY -->
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollY_added(int)" class="hiddenlink" target="rightframe"><b>setScrollY</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setShowAsActionFlags -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setShowAsActionFlags_added(int)" class="hiddenlink" target="rightframe"><b>setShowAsActionFlags</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setSize -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setSize_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setSize</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setSplitBackgroundDrawable -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setSplitBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setSplitBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<!-- Method setStackedBackgroundDrawable -->
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setStackedBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setStackedBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<!-- Method setStartDelay -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.setStartDelay_added(long)" class="hiddenlink" target="rightframe"><b>setStartDelay</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Method setStrict -->
+<nobr><A HREF="android.database.sqlite.SQLiteQueryBuilder.html#android.database.sqlite.SQLiteQueryBuilder.setStrict_added(boolean)" class="hiddenlink" target="rightframe"><b>setStrict</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setSummaryOff -->
+<i>setSummaryOff</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSummaryOff -->
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSummaryOn -->
+<i>setSummaryOn</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSummaryOn -->
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSurface -->
+<nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setSurface_added(android.view.Surface)" class="hiddenlink" target="rightframe"><b>setSurface</b>
+(<code>Surface</code>)</A></nobr><br>
+<!-- Method setSurfaceTexture -->
+<nobr><A HREF="android.renderscript.RenderScriptGL.html#android.renderscript.RenderScriptGL.setSurfaceTexture_added(android.graphics.SurfaceTexture, int, int)" class="hiddenlink" target="rightframe"><b>setSurfaceTexture</b>
+(<code>SurfaceTexture, int, int</code>)</A></nobr><br>
+<!-- Method setTag -->
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.setTag_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>setTag</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method setTextSize -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextSize_changed(android.webkit.WebSettings.TextSize)" class="hiddenlink" target="rightframe">setTextSize
+(<code>TextSize</code>)</A></nobr><br>
+<!-- Method setTextZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextZoom_added(int)" class="hiddenlink" target="rightframe"><b>setTextZoom</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setThreadStatsTag -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.setThreadStatsTag_added(int)" class="hiddenlink" target="rightframe"><b>setThreadStatsTag</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setTimeout -->
+<i>setTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+<!-- Method setTimeout -->
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+<!-- Method setTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+<!-- Method setTimeout -->
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<!-- Class Settings -->
+<A HREF="android.provider.Settings.html" class="hiddenlink" target="rightframe">Settings</A><br>
+<!-- Class Settings.Secure -->
+<A HREF="android.provider.Settings.Secure.html" class="hiddenlink" target="rightframe">Settings.Secure</A><br>
+<!-- Class Settings.System -->
+<A HREF="android.provider.Settings.System.html" class="hiddenlink" target="rightframe">Settings.System</A><br>
+<!-- Method setTransparentRegionHint -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setTransparentRegionHint_removed(android.graphics.Region)" class="hiddenlink" target="rightframe"><strike>setTransparentRegionHint</strike>
+(<code>Region</code>)</A></nobr><br>
+<!-- Method setTrustManagers -->
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setTrustManagers_added(javax.net.ssl.TrustManager[])" class="hiddenlink" target="rightframe"><b>setTrustManagers</b>
+(<code>TrustManager[]</code>)</A></nobr><br>
+<!-- Method setUiOptions -->
+<i>setUiOptions</i><br>
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.view.Window
+</A></nobr><br>
+<!-- Method setUiOptions -->
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.view.Window
+</A></nobr><br>
+<!-- Class ShareActionProvider -->
+<A HREF="pkg_android.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<!-- Class ShareActionProvider.OnShareTargetSelectedListener -->
+<A HREF="pkg_android.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<!-- Class Short2 -->
+<i>Short2</i><br>
+ <A HREF="android.renderscript.Short2.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Short2 -->
+ <nobr><A HREF="android.renderscript.Short2.html#android.renderscript.Short2.ctor_added(short, short)" class="hiddenlink" target="rightframe"><b>Short2</b>
+(<code>short, short</code>)</A></nobr> constructor<br>
+<!-- Class Short3 -->
+<i>Short3</i><br>
+ <A HREF="android.renderscript.Short3.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Short3 -->
+ <nobr><A HREF="android.renderscript.Short3.html#android.renderscript.Short3.ctor_added(short, short, short)" class="hiddenlink" target="rightframe"><b>Short3</b>
+(<code>short, short, short</code>)</A></nobr> constructor<br>
+<!-- Class Short4 -->
+<i>Short4</i><br>
+ <A HREF="android.renderscript.Short4.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Constructor Short4 -->
+ <nobr><A HREF="android.renderscript.Short4.html#android.renderscript.Short4.ctor_added(short, short, short, short)" class="hiddenlink" target="rightframe"><b>Short4</b>
+(<code>short, short, short, short</code>)</A></nobr> constructor<br>
+<!-- Method shouldDelayChildPressedState -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.shouldDelayChildPressedState_added()" class="hiddenlink" target="rightframe"><b>shouldDelayChildPressedState</b>
+()</A></nobr><br>
+<!-- Method show -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.show_removed()" class="hiddenlink" target="rightframe"><strike>show</strike>
+()</A></nobr><br>
+<!-- Field SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW -->
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" class="hiddenlink" target="rightframe">SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW</A>
+</nobr><br>
+<!-- Class SocketPermission -->
+<A HREF="java.net.SocketPermission.html" class="hiddenlink" target="rightframe">SocketPermission</A><br>
+<!-- Field SOURCE_STYLUS -->
+<nobr><A HREF="android.view.InputDevice.html#android.view.InputDevice.SOURCE_STYLUS" class="hiddenlink" target="rightframe">SOURCE_STYLUS</A>
+</nobr><br>
+<!-- Class Space -->
+<A HREF="pkg_android.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<!-- Class SparseArray -->
+<A HREF="android.util.SparseArray.html" class="hiddenlink" target="rightframe">SparseArray</A><br>
+<!-- Class SparseBooleanArray -->
+<A HREF="android.util.SparseBooleanArray.html" class="hiddenlink" target="rightframe">SparseBooleanArray</A><br>
+<!-- Class SparseIntArray -->
+<A HREF="android.util.SparseIntArray.html" class="hiddenlink" target="rightframe">SparseIntArray</A><br>
+<!-- Class SpeechRecognizer -->
+<A HREF="android.speech.SpeechRecognizer.html" class="hiddenlink" target="rightframe">SpeechRecognizer</A><br>
+<!-- Class SQLiteOpenHelper -->
+<A HREF="android.database.sqlite.SQLiteOpenHelper.html" class="hiddenlink" target="rightframe">SQLiteOpenHelper</A><br>
+<!-- Class SQLiteQueryBuilder -->
+<A HREF="android.database.sqlite.SQLiteQueryBuilder.html" class="hiddenlink" target="rightframe">SQLiteQueryBuilder</A><br>
+<!-- Field SSL_DATE_INVALID -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_DATE_INVALID" class="hiddenlink" target="rightframe">SSL_DATE_INVALID</A>
+</nobr><br>
+<!-- Field SSL_INVALID -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_INVALID" class="hiddenlink" target="rightframe">SSL_INVALID</A>
+</nobr><br>
+<!-- Field SSL_MAX_ERROR -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_MAX_ERROR" class="hiddenlink" target="rightframe">SSL_MAX_ERROR</A>
+</nobr><br>
+<!-- Class SSLCertificateSocketFactory -->
+<A HREF="android.net.SSLCertificateSocketFactory.html" class="hiddenlink" target="rightframe">SSLCertificateSocketFactory</A><br>
+<!-- Class SslError -->
+<i>SslError</i><br>
+ <A HREF="android.net.http.SslError.html" class="hiddenlink" target="rightframe">android.net.http</A><br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, android.net.http.SslCertificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, SslCertificate, String</code>)</A></nobr> constructor<br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, java.security.cert.X509Certificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, X509Certificate, String</code>)</A></nobr> constructor<br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, android.net.http.SslCertificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, SslCertificate</code>)</A></nobr> constructor<br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, java.security.cert.X509Certificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, X509Certificate</code>)</A></nobr> constructor<br>
+<!-- Class StackView -->
+<i>StackView</i><br>
+ <A HREF="android.widget.StackView.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<!-- Constructor StackView -->
+ <nobr><A HREF="android.widget.StackView.html#android.widget.StackView.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>StackView</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<!-- Method start -->
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.start_added()" class="hiddenlink" target="rightframe"><b>start</b>
+()</A></nobr><br>
+<!-- Field START -->
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.START" class="hiddenlink" target="rightframe">START</A>
+</nobr><br>
+<!-- Method startFaceDetection -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.startFaceDetection_added()" class="hiddenlink" target="rightframe"><b>startFaceDetection</b>
+()</A></nobr><br>
+<!-- Method startWithFragment -->
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.startWithFragment_added(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int)" class="hiddenlink" target="rightframe"><b>startWithFragment</b>
+(<code>String, Bundle, Fragment, int, int, int</code>)</A></nobr><br>
+<!-- Field state_drag_can_accept -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_can_accept" class="hiddenlink" target="rightframe">state_drag_can_accept</A>
+</nobr><br>
+<!-- Field state_drag_hovered -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_hovered" class="hiddenlink" target="rightframe">state_drag_hovered</A>
+</nobr><br>
+<!-- Field state_hovered -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_hovered" class="hiddenlink" target="rightframe">state_hovered</A>
+</nobr><br>
+<!-- Field STATUS_BAR_HIDDEN -->
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_HIDDEN" class="hiddenlink" target="rightframe">STATUS_BAR_HIDDEN</A>
+</nobr><br>
+<!-- Field status_bar_notification_info_maxnum -->
+<nobr><A HREF="android.R.integer.html#android.R.integer.status_bar_notification_info_maxnum" class="hiddenlink" target="rightframe">status_bar_notification_info_maxnum</A>
+</nobr><br>
+<!-- Field status_bar_notification_info_overflow -->
+<nobr><A HREF="android.R.string.html#android.R.string.status_bar_notification_info_overflow" class="hiddenlink" target="rightframe">status_bar_notification_info_overflow</A>
+</nobr><br>
+<!-- Field STATUS_BAR_VISIBLE -->
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_VISIBLE" class="hiddenlink" target="rightframe">STATUS_BAR_VISIBLE</A>
+</nobr><br>
+<!-- Method stopFaceDetection -->
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.stopFaceDetection_added()" class="hiddenlink" target="rightframe"><b>stopFaceDetection</b>
+()</A></nobr><br>
+<!-- Field stopWithTask -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.stopWithTask" class="hiddenlink" target="rightframe">stopWithTask</A>
+</nobr><br>
+<!-- Method subData -->
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData_removed(int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subData</strike>
+(<code>int, FieldPacker</code>)</A></nobr><br>
+<!-- Method subData1D -->
+<i>subData1D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, byte[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, byte[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData1D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData1D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData1D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, short[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, short[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData2D -->
+<i>subData2D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData2D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subElementData -->
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subElementData_removed(int, int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subElementData</strike>
+(<code>int, int, FieldPacker</code>)</A></nobr><br>
+<!-- Field subtypeExtraValue -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeExtraValue" class="hiddenlink" target="rightframe">subtypeExtraValue</A>
+</nobr><br>
+<!-- Field subtypeLocale -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeLocale" class="hiddenlink" target="rightframe">subtypeLocale</A>
+</nobr><br>
+<!-- Field SUGGEST_COLUMN_LAST_ACCESS_HINT -->
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT" class="hiddenlink" target="rightframe">SUGGEST_COLUMN_LAST_ACCESS_HINT</A>
+</nobr><br>
+<!-- Class SuggestionSpan -->
+<A HREF="pkg_android.text.style.html#SuggestionSpan" class="hiddenlink" target="rightframe"><b>SuggestionSpan</b></A><br>
+<!-- Method supportsProcesses -->
+<nobr><A HREF="android.os.Process.html#android.os.Process.supportsProcesses_changed()" class="hiddenlink" target="rightframe">supportsProcesses
+()</A></nobr><br>
+<!-- Field SURACE_FROZEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURACE_FROZEN</strike></A>
+</nobr><br>
+<!-- Class Surface -->
+<i>Surface</i><br>
+ <A HREF="android.view.Surface.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<!-- Constructor Surface -->
+ <nobr><A HREF="android.view.Surface.html#android.view.Surface.ctor_added(android.graphics.SurfaceTexture)" class="hiddenlink" target="rightframe"><b>Surface</b>
+(<code>SurfaceTexture</code>)</A></nobr> constructor<br>
+<!-- Field SURFACE_BLUR_FREEZE -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_BLUR_FREEZE" class="hiddenlink" target="rightframe"><strike>SURFACE_BLUR_FREEZE</strike></A>
+</nobr><br>
+<!-- Field SURFACE_DITHER -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_DITHER" class="hiddenlink" target="rightframe"><strike>SURFACE_DITHER</strike></A>
+</nobr><br>
+<!-- Field SURFACE_FROZEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURFACE_FROZEN</strike></A>
+</nobr><br>
+<!-- Field SURFACE_HIDDEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_HIDDEN" class="hiddenlink" target="rightframe"><strike>SURFACE_HIDDEN</strike></A>
+</nobr><br>
+<!-- Class SurfaceTexture -->
+<A HREF="android.graphics.SurfaceTexture.html" class="hiddenlink" target="rightframe">SurfaceTexture</A><br>
+<!-- Class Switch -->
+<A HREF="pkg_android.widget.html#Switch" class="hiddenlink" target="rightframe"><b>Switch</b></A><br>
+<!-- Field switchMinWidth -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchMinWidth" class="hiddenlink" target="rightframe">switchMinWidth</A>
+</nobr><br>
+<!-- Field switchPadding -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPadding" class="hiddenlink" target="rightframe">switchPadding</A>
+</nobr><br>
+<!-- Class SwitchPreference -->
+<A HREF="pkg_android.preference.html#SwitchPreference" class="hiddenlink" target="rightframe"><b>SwitchPreference</b></A><br>
+<!-- Field switchPreferenceStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPreferenceStyle" class="hiddenlink" target="rightframe">switchPreferenceStyle</A>
+</nobr><br>
+<!-- Field switchTextAppearance -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextAppearance" class="hiddenlink" target="rightframe">switchTextAppearance</A>
+</nobr><br>
+<!-- Field switchTextOff -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOff" class="hiddenlink" target="rightframe">switchTextOff</A>
+</nobr><br>
+<!-- Field switchTextOn -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOn" class="hiddenlink" target="rightframe">switchTextOn</A>
+</nobr><br>
+<!-- Class SyncAdapterType -->
+<A HREF="android.content.SyncAdapterType.html" class="hiddenlink" target="rightframe">SyncAdapterType</A><br>
+<!-- Class SynthesisCallback -->
+<A HREF="pkg_android.speech.tts.html#SynthesisCallback" class="hiddenlink" target="rightframe"><b><i>SynthesisCallback</i></b></A><br>
+<!-- Class SynthesisRequest -->
+<A HREF="pkg_android.speech.tts.html#SynthesisRequest" class="hiddenlink" target="rightframe"><b>SynthesisRequest</b></A><br>
+<!-- Field SYSTEM_UI_FLAG_HIDE_NAVIGATION -->
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_HIDE_NAVIGATION</A>
+</nobr><br>
+<!-- Field SYSTEM_UI_FLAG_LOW_PROFILE -->
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_LOW_PROFILE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_LOW_PROFILE</A>
+</nobr><br>
+<!-- Field SYSTEM_UI_FLAG_VISIBLE -->
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_VISIBLE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_VISIBLE</A>
+</nobr><br>
+<!-- Method tagSocket -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.tagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>tagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<!-- Field targetDescriptions -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.targetDescriptions" class="hiddenlink" target="rightframe">targetDescriptions</A>
+</nobr><br>
+<!-- Class TestTarget -->
+<A HREF="dalvik.annotation.TestTarget.html" class="hiddenlink" target="rightframe">TestTarget</A><br>
+<!-- Class TestTargetClass -->
+<A HREF="dalvik.annotation.TestTargetClass.html" class="hiddenlink" target="rightframe">TestTargetClass</A><br>
+<!-- Field TEXT_SERVICES_MANAGER_SERVICE -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.TEXT_SERVICES_MANAGER_SERVICE" class="hiddenlink" target="rightframe">TEXT_SERVICES_MANAGER_SERVICE</A>
+</nobr><br>
+<!-- Field textAllCaps -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAllCaps" class="hiddenlink" target="rightframe">textAllCaps</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_DialogWindowTitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_DialogWindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_DialogWindowTitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Large_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Medium -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Medium_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_SearchResult_Subtitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Subtitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_SearchResult_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Title</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Small_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Menu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Menu</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_Button -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_Button" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_Button</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_DropDownHint -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownHint" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownHint</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_DropDownItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownItem</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_EditText -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_EditText" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_EditText</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_IconMenu_Item -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_IconMenu_Item" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_IconMenu_Item</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_PopupMenu_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Large</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_PopupMenu_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Small</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TabWidget -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TabWidget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TabWidget</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TextView_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_PopupMenu</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem</A>
+</nobr><br>
+<!-- Field TextAppearance_DeviceDefault_WindowTitle -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_WindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_WindowTitle</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionBar_Menu -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Menu</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionBar_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_Holo_Widget_ActionMode_Title_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<!-- Field TextAppearance_SuggestionHighlight -->
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_SuggestionHighlight" class="hiddenlink" target="rightframe">TextAppearance_SuggestionHighlight</A>
+</nobr><br>
+<!-- Field textAppearanceListItem -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItem" class="hiddenlink" target="rightframe">textAppearanceListItem</A>
+</nobr><br>
+<!-- Field textAppearanceListItemSmall -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItemSmall" class="hiddenlink" target="rightframe">textAppearanceListItemSmall</A>
+</nobr><br>
+<!-- Field textEditSuggestionItemLayout -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textEditSuggestionItemLayout" class="hiddenlink" target="rightframe">textEditSuggestionItemLayout</A>
+</nobr><br>
+<!-- Field textSuggestionsWindowStyle -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.textSuggestionsWindowStyle" class="hiddenlink" target="rightframe">textSuggestionsWindowStyle</A>
+</nobr><br>
+<!-- Class TextToSpeech -->
+<i>TextToSpeech</i><br>
+ <A HREF="android.speech.tts.TextToSpeech.html" class="hiddenlink" target="rightframe">android.speech.tts</A><br>
+<!-- Constructor TextToSpeech -->
+ <nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" class="hiddenlink" target="rightframe"><b>TextToSpeech</b>
+(<code>Context, OnInitListener, String</code>)</A></nobr> constructor<br>
+<!-- Class TextToSpeech.Engine -->
+<A HREF="android.speech.tts.TextToSpeech.Engine.html" class="hiddenlink" target="rightframe">TextToSpeech.Engine</A><br>
+<!-- Class TextToSpeech.EngineInfo -->
+<A HREF="pkg_android.speech.tts.html#TextToSpeech.EngineInfo" class="hiddenlink" target="rightframe"><b>TextToSpeech.EngineInfo</b></A><br>
+<!-- Class TextToSpeechService -->
+<A HREF="pkg_android.speech.tts.html#TextToSpeechService" class="hiddenlink" target="rightframe"><b>TextToSpeechService</b></A><br>
+<!-- Class TextureView -->
+<A HREF="pkg_android.view.html#TextureView" class="hiddenlink" target="rightframe"><b>TextureView</b></A><br>
+<!-- Class TextureView.SurfaceTextureListener -->
+<A HREF="pkg_android.view.html#TextureView.SurfaceTextureListener" class="hiddenlink" target="rightframe"><b><i>TextureView.SurfaceTextureListener</i></b></A><br>
+<!-- Class TextView -->
+<A HREF="android.widget.TextView.html" class="hiddenlink" target="rightframe">TextView</A><br>
+<!-- Field THEME_DEVICE_DEFAULT_DARK -->
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_DARK</A>
+</nobr><br>
+<!-- Field THEME_DEVICE_DEFAULT_LIGHT -->
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_LIGHT</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault" class="hiddenlink" target="rightframe">Theme_DeviceDefault</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Dialog_NoActionBar_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_DialogWhenLarge -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_DialogWhenLarge_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_InputMethod -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_InputMethod" class="hiddenlink" target="rightframe">Theme_DeviceDefault_InputMethod</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_DarkActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DarkActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_DialogWhenLarge -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_NoActionBar_Fullscreen -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar_Fullscreen</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Light_Panel -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Panel</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_NoActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_NoActionBar_Fullscreen -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar_Fullscreen</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Panel -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Panel</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Wallpaper -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper</A>
+</nobr><br>
+<!-- Field Theme_DeviceDefault_Wallpaper_NoTitleBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper_NoTitleBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper_NoTitleBar</A>
+</nobr><br>
+<!-- Field Theme_Holo_Light_DarkActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_Holo_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_Holo_Light_DarkActionBar</A>
+</nobr><br>
+<!-- Field thumbTextPadding -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.thumbTextPadding" class="hiddenlink" target="rightframe">thumbTextPadding</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_ERASER -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_ERASER" class="hiddenlink" target="rightframe">TOOL_TYPE_ERASER</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_FINGER -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_FINGER" class="hiddenlink" target="rightframe">TOOL_TYPE_FINGER</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_MOUSE -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_MOUSE" class="hiddenlink" target="rightframe">TOOL_TYPE_MOUSE</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_STYLUS -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_STYLUS" class="hiddenlink" target="rightframe">TOOL_TYPE_STYLUS</A>
+</nobr><br>
+<!-- Field TOOL_TYPE_UNKNOWN -->
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_UNKNOWN" class="hiddenlink" target="rightframe">TOOL_TYPE_UNKNOWN</A>
+</nobr><br>
+<!-- Field TOP_LEVEL_DOMAIN_STR -->
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR</A>
+</nobr><br>
+<!-- Field TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL -->
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL</A>
+</nobr><br>
+<!-- Method toShortString -->
+<nobr><A HREF="android.graphics.RectF.html#android.graphics.RectF.toShortString_added()" class="hiddenlink" target="rightframe"><b>toShortString</b>
+()</A></nobr><br>
+<!-- Field TOUCH_EXPLORATION_ENABLED -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TOUCH_EXPLORATION_ENABLED" class="hiddenlink" target="rightframe">TOUCH_EXPLORATION_ENABLED</A>
+</nobr><br>
+<!-- Field track -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.track" class="hiddenlink" target="rightframe">track</A>
+</nobr><br>
+<!-- Class TrafficStats -->
+<A HREF="android.net.TrafficStats.html" class="hiddenlink" target="rightframe">TrafficStats</A><br>
+<!-- Field TRANSLATION_X -->
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_X" class="hiddenlink" target="rightframe">TRANSLATION_X</A>
+</nobr><br>
+<!-- Field TRANSLATION_Y -->
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_Y" class="hiddenlink" target="rightframe">TRANSLATION_Y</A>
+</nobr><br>
+<!-- Field TTS_DEFAULT_COUNTRY -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY" class="hiddenlink" target="rightframe">TTS_DEFAULT_COUNTRY</A>
+</nobr><br>
+<!-- Field TTS_DEFAULT_LANG -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_LANG" class="hiddenlink" target="rightframe">TTS_DEFAULT_LANG</A>
+</nobr><br>
+<!-- Field TTS_DEFAULT_VARIANT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_VARIANT" class="hiddenlink" target="rightframe">TTS_DEFAULT_VARIANT</A>
+</nobr><br>
+<!-- Field TTS_USE_DEFAULTS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_USE_DEFAULTS" class="hiddenlink" target="rightframe">TTS_USE_DEFAULTS</A>
+</nobr><br>
+<!-- Class TwoStatePreference -->
+<A HREF="pkg_android.preference.html#TwoStatePreference" class="hiddenlink" target="rightframe"><b>TwoStatePreference</b></A><br>
+<!-- Field TYPE_AMBIENT_TEMPERATURE -->
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_AMBIENT_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_AMBIENT_TEMPERATURE</A>
+</nobr><br>
+<!-- Field TYPE_DIRECTORY -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_DIRECTORY" class="hiddenlink" target="rightframe">TYPE_DIRECTORY</A>
+</nobr><br>
+<!-- Field TYPE_DUMMY -->
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.TYPE_DUMMY" class="hiddenlink" target="rightframe">TYPE_DUMMY</A>
+</nobr><br>
+<!-- Field TYPE_FILE -->
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_FILE" class="hiddenlink" target="rightframe">TYPE_FILE</A>
+</nobr><br>
+<!-- Field TYPE_RELATIVE_HUMIDITY -->
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_RELATIVE_HUMIDITY" class="hiddenlink" target="rightframe">TYPE_RELATIVE_HUMIDITY</A>
+</nobr><br>
+<!-- Field TYPE_TEMPERATURE -->
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_TEMPERATURE</A>
+</nobr><br>
+<!-- Field TYPE_TOUCH_EXPLORATION_GESTURE_END -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_END</A>
+</nobr><br>
+<!-- Field TYPE_TOUCH_EXPLORATION_GESTURE_START -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_START</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_HOVER_ENTER -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_ENTER</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_HOVER_EXIT -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_EXIT</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_SCROLLED -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED" class="hiddenlink" target="rightframe">TYPE_VIEW_SCROLLED</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_TEXT_SELECTION_CHANGED -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED" class="hiddenlink" target="rightframe">TYPE_VIEW_TEXT_SELECTION_CHANGED</A>
+</nobr><br>
+<!-- Field TYPE_WINDOW_CONTENT_CHANGED -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOW_CONTENT_CHANGED</A>
+</nobr><br>
+<!-- Class TypeEvaluator -->
+<A HREF="android.animation.TypeEvaluator.html" class="hiddenlink" target="rightframe"><i>TypeEvaluator</i></A><br>
+<!-- Method U16_2 -->
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U16_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U16_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U32_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U32_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U32_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U64_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U64_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U64_4 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U8_2 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Method U8_3 -->
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<!-- Field UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW -->
+<nobr><A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" class="hiddenlink" target="rightframe">UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW</A>
+</nobr><br>
+<!-- Field uiOptions -->
+<i>uiOptions</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.uiOptions" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<!-- Field uiOptions -->
+<nobr> in
+<A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ActivityInfo</A>
+</nobr><br>
+<!-- Field uiOptions -->
+<nobr> in
+<A HREF="android.content.pm.ApplicationInfo.html#android.content.pm.ApplicationInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ApplicationInfo</A>
+</nobr><br>
+<!-- Method unfreeze -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.unfreeze_removed()" class="hiddenlink" target="rightframe"><strike>unfreeze</strike>
+()</A></nobr><br>
+<!-- Method unregisterActivityLifecycleCallbacks -->
+<nobr><A HREF="android.app.Application.html#android.app.Application.unregisterActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<!-- Method unregisterComponentCallbacks -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.unregisterComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<!-- Method unregisterRemoteControlClient -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.unregisterRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>unregisterRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<!-- Class UnresolvedPermission -->
+<A HREF="java.security.UnresolvedPermission.html" class="hiddenlink" target="rightframe">UnresolvedPermission</A><br>
+<!-- Method untagSocket -->
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.untagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>untagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<!-- Field USAGE_GRAPHICS_RENDER_TARGET -->
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.USAGE_GRAPHICS_RENDER_TARGET" class="hiddenlink" target="rightframe">USAGE_GRAPHICS_RENDER_TARGET</A>
+</nobr><br>
+<!-- Field useDefaultMargins -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.useDefaultMargins" class="hiddenlink" target="rightframe">useDefaultMargins</A>
+</nobr><br>
+<!-- Field USES_POLICY_DISABLE_CAMERA -->
+<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_DISABLE_CAMERA" class="hiddenlink" target="rightframe">USES_POLICY_DISABLE_CAMERA</A>
+</nobr><br>
+<!-- Field VERIFICATION_ALLOW -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_ALLOW" class="hiddenlink" target="rightframe">VERIFICATION_ALLOW</A>
+</nobr><br>
+<!-- Field VERIFICATION_REJECT -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_REJECT" class="hiddenlink" target="rightframe">VERIFICATION_REJECT</A>
+</nobr><br>
+<!-- Method verifyPendingInstall -->
+<i>verifyPendingInstall</i><br>
+ <nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.content.pm.PackageManager
+</A></nobr><br>
+<!-- Method verifyPendingInstall -->
+ <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.test.mock.MockPackageManager
+</A></nobr><br>
+<!-- Class View -->
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<!-- Class View.AccessibilityDelegate -->
+<A HREF="pkg_android.view.html#View.AccessibilityDelegate" class="hiddenlink" target="rightframe"><b>View.AccessibilityDelegate</b></A><br>
+<!-- Class View.OnHoverListener -->
+<A HREF="pkg_android.view.html#View.OnHoverListener" class="hiddenlink" target="rightframe"><b><i>View.OnHoverListener</i></b></A><br>
+<!-- Method viewClicked -->
+<i>viewClicked</i><br>
+ <nobr><A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html#android.inputmethodservice.InputMethodService.InputMethodSessionImpl.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.inputmethodservice.InputMethodService.InputMethodSessionImpl
+</A></nobr><br>
+<!-- Method viewClicked -->
+ <nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.viewClicked_added(android.view.View)" class="hiddenlink" target="rightframe">type <b>
+(<code>View</code>)</b> in android.view.inputmethod.InputMethodManager
+</A></nobr><br>
+<!-- Method viewClicked -->
+ <nobr><A HREF="android.view.inputmethod.InputMethodSession.html#android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.view.inputmethod.InputMethodSession
+</A></nobr><br>
+<!-- Class ViewConfiguration -->
+<A HREF="android.view.ViewConfiguration.html" class="hiddenlink" target="rightframe">ViewConfiguration</A><br>
+<!-- Class ViewGroup -->
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<!-- Class ViewParent -->
+<A HREF="android.view.ViewParent.html" class="hiddenlink" target="rightframe"><i>ViewParent</i></A><br>
+<!-- Class ViewPropertyAnimator -->
+<A HREF="android.view.ViewPropertyAnimator.html" class="hiddenlink" target="rightframe">ViewPropertyAnimator</A><br>
+<!-- Class VoicemailContract -->
+<A HREF="pkg_android.provider.html#VoicemailContract" class="hiddenlink" target="rightframe"><b>VoicemailContract</b></A><br>
+<!-- Class VoicemailContract.Status -->
+<A HREF="pkg_android.provider.html#VoicemailContract.Status" class="hiddenlink" target="rightframe"><b>VoicemailContract.Status</b></A><br>
+<!-- Class VoicemailContract.Voicemails -->
+<A HREF="pkg_android.provider.html#VoicemailContract.Voicemails" class="hiddenlink" target="rightframe"><b>VoicemailContract.Voicemails</b></A><br>
+<!-- Class VpnService -->
+<A HREF="pkg_android.net.html#VpnService" class="hiddenlink" target="rightframe"><b>VpnService</b></A><br>
+<!-- Class VpnService.Builder -->
+<A HREF="pkg_android.net.html#VpnService.Builder" class="hiddenlink" target="rightframe"><b>VpnService.Builder</b></A><br>
+<!-- Class WallpaperManager -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<!-- Class WallpaperService.Engine -->
+<A HREF="android.service.wallpaper.WallpaperService.Engine.html" class="hiddenlink" target="rightframe">WallpaperService.Engine</A><br>
+<!-- Class WebChromeClient -->
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<!-- Class WebSettings -->
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<!-- Class WebSettings.TextSize -->
+<A HREF="android.webkit.WebSettings.TextSize.html" class="hiddenlink" target="rightframe">WebSettings.TextSize</A><br>
+<!-- Class WebView.HitTestResult -->
+<A HREF="android.webkit.WebView.HitTestResult.html" class="hiddenlink" target="rightframe">WebView.HitTestResult</A><br>
+<!-- Field Widget_DeviceDefault -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault" class="hiddenlink" target="rightframe">Widget_DeviceDefault</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_TabBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_TabText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionBar_TabView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton_CloseMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_CloseMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton_Overflow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_Overflow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionButton_TextButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_TextButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_TextButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ActionMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_AutoCompleteTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_AutoCompleteTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Borderless -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Inset -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Inset</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Button_Toggle -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Toggle</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CalendarView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CalendarView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CompoundButton_CheckBox -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_CheckBox</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CompoundButton_RadioButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_RadioButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_CompoundButton_Star -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_Star</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_DatePicker -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DatePicker" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DatePicker</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_DropDownItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_DropDownItem_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_EditText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_EditText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ExpandableListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ExpandableListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_GridView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_GridView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_HorizontalScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_HorizontalScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ImageButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ImageButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_Solid_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabText_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionBar_TabView_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionButton_CloseMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_CloseMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionButton_Overflow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_Overflow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionMode -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ActionMode_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_AutoCompleteTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_AutoCompleteTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Inset -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Inset</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Button_Toggle -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Toggle</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CalendarView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CalendarView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CompoundButton_CheckBox -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_CheckBox</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CompoundButton_RadioButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_RadioButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_CompoundButton_Star -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_Star</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_DropDownItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_DropDownItem_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_EditText -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_EditText</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ExpandableListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ExpandableListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_GridView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_GridView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_HorizontalScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_HorizontalScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ImageButton -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ImageButton</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ListPopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListPopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ListView_DropDown -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView_DropDown</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupMenu</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_PopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Horizontal -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Horizontal</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Large_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Small_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Inverse</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ProgressBar_Small_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Title</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_RatingBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_RatingBar_Indicator -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Indicator</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_RatingBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_ScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_SeekBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_SeekBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_Tab -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Tab</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_TabWidget -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TabWidget</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_TextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_TextView_SpinnerItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView_SpinnerItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_WebTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Light_WebView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ListPopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListPopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ListView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ListView_DropDown -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView_DropDown</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_PopupMenu -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupMenu</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_PopupWindow -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupWindow</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Horizontal -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Horizontal</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Large -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Large</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ProgressBar_Small_Title -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small_Title</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_RatingBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_RatingBar_Indicator -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Indicator</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_RatingBar_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Small</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_ScrollView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ScrollView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_SeekBar -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_SeekBar</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Spinner -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Spinner</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_Tab -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Tab</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_TabWidget -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TabWidget</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_TextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_TextView_SpinnerItem -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView_SpinnerItem</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_WebTextView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebTextView</A>
+</nobr><br>
+<!-- Field Widget_DeviceDefault_WebView -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebView</A>
+</nobr><br>
+<!-- Field Widget_Holo_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_Holo_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_Solid -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_Solid_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_TabBar_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_TabText_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionBar_TabView_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_ActionMode_Inverse -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionMode_Inverse</A>
+</nobr><br>
+<!-- Field Widget_Holo_Light_Button_Borderless_Small -->
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Light_Button_Borderless_Small</A>
+</nobr><br>
+<!-- Field WIFI_P2P_SERVICE -->
+<nobr><A HREF="android.content.Context.html#android.content.Context.WIFI_P2P_SERVICE" class="hiddenlink" target="rightframe">WIFI_P2P_SERVICE</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_AP_COUNT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_AP_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_AP_COUNT</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_MAX_AP_CHECKS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_MAX_AP_CHECKS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_PING_COUNT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_COUNT</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_PING_DELAY_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_DELAY_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_PING_TIMEOUT_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_TIMEOUT_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_WATCH_LIST -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_WATCH_LIST" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_WATCH_LIST</A>
+</nobr><br>
+<!-- Class WifiManager -->
+<A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
+<!-- Class Window -->
+<A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
+<!-- Class WindowManager.LayoutParams -->
+<A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
+<!-- Class WpsInfo -->
+<A HREF="pkg_android.net.wifi.html#WpsInfo" class="hiddenlink" target="rightframe"><b>WpsInfo</b></A><br>
+<!-- Field WRITE_PROFILE -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_PROFILE" class="hiddenlink" target="rightframe">WRITE_PROFILE</A>
+</nobr><br>
+<!-- Field X -->
+<A NAME="X"></A>
+<br><font size="+2">X</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.X" class="hiddenlink" target="rightframe">X</A>
+</nobr><br>
+<!-- Field Y -->
+<A NAME="Y"></A>
+<br><font size="+2">Y</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html
new file mode 100644
index 0000000..76ffbac
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html
@@ -0,0 +1,1471 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<A HREF="alldiffs_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Class AbsListView -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.widget.AbsListView.html" class="hiddenlink" target="rightframe">AbsListView</A><br>
+<!-- Class AccessibilityEvent -->
+<A HREF="android.view.accessibility.AccessibilityEvent.html" class="hiddenlink" target="rightframe">AccessibilityEvent</A><br>
+<!-- Class AccessibilityManager -->
+<A HREF="android.view.accessibility.AccessibilityManager.html" class="hiddenlink" target="rightframe">AccessibilityManager</A><br>
+<!-- Class AccessibilityService -->
+<A HREF="android.accessibilityservice.AccessibilityService.html" class="hiddenlink" target="rightframe">AccessibilityService</A><br>
+<!-- Class AccessibilityServiceInfo -->
+<A HREF="android.accessibilityservice.AccessibilityServiceInfo.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfo</A><br>
+<!-- Class AccessibleObject -->
+<A HREF="java.lang.reflect.AccessibleObject.html" class="hiddenlink" target="rightframe">AccessibleObject</A><br>
+<!-- Class AccountManager -->
+<A HREF="android.accounts.AccountManager.html" class="hiddenlink" target="rightframe">AccountManager</A><br>
+<!-- Field ACTION_PACKAGE_INSTALL -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_INSTALL" class="hiddenlink" target="rightframe">ACTION_PACKAGE_INSTALL</A>
+</nobr><br>
+<!-- Field ACTION_SCO_AUDIO_STATE_CHANGED -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_CHANGED</A>
+</nobr><br>
+<!-- Field ACTION_UMS_CONNECTED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_CONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_CONNECTED</A>
+</nobr><br>
+<!-- Field ACTION_UMS_DISCONNECTED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_DISCONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_DISCONNECTED</A>
+</nobr><br>
+<!-- Class ActionBar -->
+<A HREF="android.app.ActionBar.html" class="hiddenlink" target="rightframe">ActionBar</A><br>
+<!-- Class ActionBar.Tab -->
+<A HREF="android.app.ActionBar.Tab.html" class="hiddenlink" target="rightframe">ActionBar.Tab</A><br>
+<!-- Class ActionMode -->
+<A HREF="android.view.ActionMode.html" class="hiddenlink" target="rightframe">ActionMode</A><br>
+<!-- Class Activity -->
+<A HREF="android.app.Activity.html" class="hiddenlink" target="rightframe">Activity</A><br>
+<!-- Class ActivityInfo -->
+<A HREF="android.content.pm.ActivityInfo.html" class="hiddenlink" target="rightframe">ActivityInfo</A><br>
+<!-- Class AdapterViewAnimator -->
+<A HREF="android.widget.AdapterViewAnimator.html" class="hiddenlink" target="rightframe">AdapterViewAnimator</A><br>
+<!-- Class AlertDialog -->
+<A HREF="android.app.AlertDialog.html" class="hiddenlink" target="rightframe">AlertDialog</A><br>
+<!-- Class Allocation -->
+<A HREF="android.renderscript.Allocation.html" class="hiddenlink" target="rightframe">Allocation</A><br>
+<!-- Class AllocationAdapter -->
+<A HREF="android.renderscript.AllocationAdapter.html" class="hiddenlink" target="rightframe">AllocationAdapter</A><br>
+<!-- Class AllPermission -->
+<A HREF="java.security.AllPermission.html" class="hiddenlink" target="rightframe">AllPermission</A><br>
+<!-- Field ANCHOR_TYPE -->
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.ANCHOR_TYPE" class="hiddenlink" target="rightframe">ANCHOR_TYPE</A>
+</nobr><br>
+<!-- Package android -->
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<!-- Package android.accessibilityservice -->
+<A HREF="pkg_android.accessibilityservice.html" class="hiddenlink" target="rightframe">android.accessibilityservice</A><br>
+<!-- Package android.accounts -->
+<A HREF="pkg_android.accounts.html" class="hiddenlink" target="rightframe">android.accounts</A><br>
+<!-- Package android.animation -->
+<A HREF="pkg_android.animation.html" class="hiddenlink" target="rightframe">android.animation</A><br>
+<!-- Package android.app -->
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<!-- Package android.app.admin -->
+<A HREF="pkg_android.app.admin.html" class="hiddenlink" target="rightframe">android.app.admin</A><br>
+<!-- Package android.app.backup -->
+<A HREF="pkg_android.app.backup.html" class="hiddenlink" target="rightframe">android.app.backup</A><br>
+<!-- Package android.appwidget -->
+<A HREF="pkg_android.appwidget.html" class="hiddenlink" target="rightframe">android.appwidget</A><br>
+<!-- Package android.bluetooth -->
+<A HREF="pkg_android.bluetooth.html" class="hiddenlink" target="rightframe">android.bluetooth</A><br>
+<!-- Package android.content -->
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<!-- Package android.content.pm -->
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<!-- Package android.database.sqlite -->
+<A HREF="pkg_android.database.sqlite.html" class="hiddenlink" target="rightframe">android.database.sqlite</A><br>
+<!-- Package android.graphics -->
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<!-- Package android.hardware -->
+<A HREF="pkg_android.hardware.html" class="hiddenlink" target="rightframe">android.hardware</A><br>
+<!-- Package android.inputmethodservice -->
+<A HREF="pkg_android.inputmethodservice.html" class="hiddenlink" target="rightframe">android.inputmethodservice</A><br>
+<!-- Package android.media -->
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<!-- Package android.net -->
+<A HREF="pkg_android.net.html" class="hiddenlink" target="rightframe">android.net</A><br>
+<!-- Package android.net.http -->
+<A HREF="pkg_android.net.http.html" class="hiddenlink" target="rightframe">android.net.http</A><br>
+<!-- Package android.net.wifi -->
+<A HREF="pkg_android.net.wifi.html" class="hiddenlink" target="rightframe">android.net.wifi</A><br>
+<!-- Package android.nfc -->
+<A HREF="pkg_android.nfc.html" class="hiddenlink" target="rightframe">android.nfc</A><br>
+<!-- Package android.nfc.tech -->
+<A HREF="pkg_android.nfc.tech.html" class="hiddenlink" target="rightframe">android.nfc.tech</A><br>
+<!-- Package android.opengl -->
+<A HREF="pkg_android.opengl.html" class="hiddenlink" target="rightframe">android.opengl</A><br>
+<!-- Package android.os -->
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<!-- Package android.preference -->
+<A HREF="pkg_android.preference.html" class="hiddenlink" target="rightframe">android.preference</A><br>
+<!-- Package android.provider -->
+<A HREF="pkg_android.provider.html" class="hiddenlink" target="rightframe">android.provider</A><br>
+<!-- Package android.renderscript -->
+<A HREF="pkg_android.renderscript.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<!-- Package android.service.wallpaper -->
+<A HREF="pkg_android.service.wallpaper.html" class="hiddenlink" target="rightframe">android.service.wallpaper</A><br>
+<!-- Package android.speech -->
+<A HREF="pkg_android.speech.html" class="hiddenlink" target="rightframe">android.speech</A><br>
+<!-- Package android.speech.tts -->
+<A HREF="pkg_android.speech.tts.html" class="hiddenlink" target="rightframe">android.speech.tts</A><br>
+<!-- Package android.test.mock -->
+<A HREF="pkg_android.test.mock.html" class="hiddenlink" target="rightframe">android.test.mock</A><br>
+<!-- Package android.text -->
+<A HREF="pkg_android.text.html" class="hiddenlink" target="rightframe">android.text</A><br>
+<!-- Package android.text.style -->
+<A HREF="pkg_android.text.style.html" class="hiddenlink" target="rightframe">android.text.style</A><br>
+<!-- Package android.util -->
+<A HREF="pkg_android.util.html" class="hiddenlink" target="rightframe">android.util</A><br>
+<!-- Package android.view -->
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<!-- Package android.view.accessibility -->
+<A HREF="pkg_android.view.accessibility.html" class="hiddenlink" target="rightframe">android.view.accessibility</A><br>
+<!-- Package android.view.inputmethod -->
+<A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
+<!-- Package android.webkit -->
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<!-- Package android.widget -->
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<!-- Class Animator -->
+<A HREF="android.animation.Animator.html" class="hiddenlink" target="rightframe">Animator</A><br>
+<!-- Class Application -->
+<A HREF="android.app.Application.html" class="hiddenlink" target="rightframe">Application</A><br>
+<!-- Class ApplicationInfo -->
+<A HREF="android.content.pm.ApplicationInfo.html" class="hiddenlink" target="rightframe">ApplicationInfo</A><br>
+<!-- Class AppWidgetProviderInfo -->
+<A HREF="android.appwidget.AppWidgetProviderInfo.html" class="hiddenlink" target="rightframe">AppWidgetProviderInfo</A><br>
+<!-- Class AudioManager -->
+<A HREF="android.media.AudioManager.html" class="hiddenlink" target="rightframe">AudioManager</A><br>
+<!-- Field BACKGROUND_DATA -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.BACKGROUND_DATA" class="hiddenlink" target="rightframe">BACKGROUND_DATA</A>
+</nobr><br>
+<!-- Class BackupAgent -->
+<A HREF="android.app.backup.BackupAgent.html" class="hiddenlink" target="rightframe">BackupAgent</A><br>
+<!-- Class BaseObj -->
+<A HREF="android.renderscript.BaseObj.html" class="hiddenlink" target="rightframe">BaseObj</A><br>
+<!-- Class BasicPermission -->
+<A HREF="java.security.BasicPermission.html" class="hiddenlink" target="rightframe">BasicPermission</A><br>
+<!-- Class BluetoothAdapter -->
+<A HREF="android.bluetooth.BluetoothAdapter.html" class="hiddenlink" target="rightframe">BluetoothAdapter</A><br>
+<!-- Class BluetoothProfile -->
+<A HREF="android.bluetooth.BluetoothProfile.html" class="hiddenlink" target="rightframe"><i>BluetoothProfile</i></A><br>
+<!-- Class BluetoothSocket -->
+<A HREF="android.bluetooth.BluetoothSocket.html" class="hiddenlink" target="rightframe">BluetoothSocket</A><br>
+<!-- Class Build -->
+<A HREF="android.os.Build.html" class="hiddenlink" target="rightframe">Build</A><br>
+<!-- Class Build.VERSION_CODES -->
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<!-- Class Byte2 -->
+<A HREF="android.renderscript.Byte2.html" class="hiddenlink" target="rightframe">Byte2</A><br>
+<!-- Class Byte3 -->
+<A HREF="android.renderscript.Byte3.html" class="hiddenlink" target="rightframe">Byte3</A><br>
+<!-- Class Byte4 -->
+<A HREF="android.renderscript.Byte4.html" class="hiddenlink" target="rightframe">Byte4</A><br>
+<!-- Class CallLog.Calls -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.provider.CallLog.Calls.html" class="hiddenlink" target="rightframe">CallLog.Calls</A><br>
+<!-- Class Camera -->
+<A HREF="android.hardware.Camera.html" class="hiddenlink" target="rightframe">Camera</A><br>
+<!-- Class Camera.Parameters -->
+<A HREF="android.hardware.Camera.Parameters.html" class="hiddenlink" target="rightframe">Camera.Parameters</A><br>
+<!-- Class Canvas -->
+<A HREF="android.graphics.Canvas.html" class="hiddenlink" target="rightframe">Canvas</A><br>
+<!-- Class CheckBoxPreference -->
+<A HREF="android.preference.CheckBoxPreference.html" class="hiddenlink" target="rightframe">CheckBoxPreference</A><br>
+<!-- Class Class -->
+<A HREF="java.lang.Class.html" class="hiddenlink" target="rightframe">Class</A><br>
+<!-- Method clone -->
+<i>clone</i><br>
+ <nobr><A HREF="android.util.SparseArray.html#android.util.SparseArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseArray
+</A></nobr><br>
+<!-- Method clone -->
+ <nobr><A HREF="android.util.SparseBooleanArray.html#android.util.SparseBooleanArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseBooleanArray
+</A></nobr><br>
+<!-- Method clone -->
+ <nobr><A HREF="android.util.SparseIntArray.html#android.util.SparseIntArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseIntArray
+</A></nobr><br>
+<!-- Class Config -->
+<A HREF="android.util.Config.html" class="hiddenlink" target="rightframe">Config</A><br>
+<!-- Class ConnectivityManager -->
+<A HREF="android.net.ConnectivityManager.html" class="hiddenlink" target="rightframe">ConnectivityManager</A><br>
+<!-- Class Constructor -->
+<A HREF="java.lang.reflect.Constructor.html" class="hiddenlink" target="rightframe">Constructor</A><br>
+<!-- Class ContactsContract -->
+<A HREF="android.provider.ContactsContract.html" class="hiddenlink" target="rightframe">ContactsContract</A><br>
+<!-- Class ContactsContract.CommonDataKinds.Photo -->
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.CommonDataKinds.Photo</A><br>
+<!-- Class ContactsContract.Contacts -->
+<A HREF="android.provider.ContactsContract.Contacts.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts</A><br>
+<!-- Class ContactsContract.Contacts.Photo -->
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts.Photo</A><br>
+<!-- Class ContactsContract.ContactsColumns -->
+<A HREF="android.provider.ContactsContract.ContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.ContactsColumns</i></A><br>
+<!-- Class ContactsContract.GroupsColumns -->
+<A HREF="android.provider.ContactsContract.GroupsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.GroupsColumns</i></A><br>
+<!-- Class ContactsContract.Intents -->
+<A HREF="android.provider.ContactsContract.Intents.html" class="hiddenlink" target="rightframe">ContactsContract.Intents</A><br>
+<!-- Class ContactsContract.RawContactsColumns -->
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.RawContactsColumns</i></A><br>
+<!-- Class ContactsContract.RawContactsEntity -->
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html" class="hiddenlink" target="rightframe">ContactsContract.RawContactsEntity</A><br>
+<!-- Class ContactsContract.SettingsColumns -->
+<A HREF="android.provider.ContactsContract.SettingsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.SettingsColumns</i></A><br>
+<!-- Class ContactsContract.StatusUpdates -->
+<A HREF="android.provider.ContactsContract.StatusUpdates.html" class="hiddenlink" target="rightframe">ContactsContract.StatusUpdates</A><br>
+<!-- Class ContentProvider -->
+<A HREF="android.content.ContentProvider.html" class="hiddenlink" target="rightframe">ContentProvider</A><br>
+<!-- Class Context -->
+<A HREF="android.content.Context.html" class="hiddenlink" target="rightframe">Context</A><br>
+<!-- Package dalvik.annotation -->
+<A NAME="D"></A>
+<A HREF="pkg_dalvik.annotation.html" class="hiddenlink" target="rightframe">dalvik.annotation</A><br>
+<!-- Package dalvik.system -->
+<A HREF="pkg_dalvik.system.html" class="hiddenlink" target="rightframe">dalvik.system</A><br>
+<!-- Class Debug -->
+<A HREF="android.os.Debug.html" class="hiddenlink" target="rightframe">Debug</A><br>
+<!-- Field DEBUG -->
+<nobr><A HREF="android.util.Config.html#android.util.Config.DEBUG" class="hiddenlink" target="rightframe">DEBUG</A>
+</nobr><br>
+<!-- Class Debug.MemoryInfo -->
+<A HREF="android.os.Debug.MemoryInfo.html" class="hiddenlink" target="rightframe">Debug.MemoryInfo</A><br>
+<!-- Class DeviceAdminInfo -->
+<A HREF="android.app.admin.DeviceAdminInfo.html" class="hiddenlink" target="rightframe">DeviceAdminInfo</A><br>
+<!-- Class DevicePolicyManager -->
+<A HREF="android.app.admin.DevicePolicyManager.html" class="hiddenlink" target="rightframe">DevicePolicyManager</A><br>
+<!-- Class DexClassLoader -->
+<A HREF="dalvik.system.DexClassLoader.html" class="hiddenlink" target="rightframe">DexClassLoader</A><br>
+<!-- Method disableForegroundNdefPush -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.disableForegroundNdefPush_changed(android.app.Activity)" class="hiddenlink" target="rightframe">disableForegroundNdefPush
+(<code>Activity</code>)</A></nobr><br>
+<!-- Class Element -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.renderscript.Element.html" class="hiddenlink" target="rightframe">Element</A><br>
+<!-- Method enableForegroundNdefPush -->
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.enableForegroundNdefPush_changed(android.app.Activity, android.nfc.NdefMessage)" class="hiddenlink" target="rightframe">enableForegroundNdefPush
+(<code>Activity, NdefMessage</code>)</A></nobr><br>
+<!-- Method enableReplaceObject -->
+<nobr><A HREF="java.io.ObjectOutputStream.html#java.io.ObjectOutputStream.enableReplaceObject_changed(boolean)" class="hiddenlink" target="rightframe">enableReplaceObject
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method enableResolveObject -->
+<nobr><A HREF="java.io.ObjectInputStream.html#java.io.ObjectInputStream.enableResolveObject_changed(boolean)" class="hiddenlink" target="rightframe">enableResolveObject
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method equals -->
+<i>equals</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.io.FilePermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.net.SocketPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.AllPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.BasicPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.Permission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.UnresolvedPermission
+</A></nobr><br>
+<!-- Method equals -->
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<!-- Method evaluate -->
+<i>evaluate</i><br>
+ <nobr><A HREF="android.animation.FloatEvaluator.html#android.animation.FloatEvaluator.evaluate_changed(float, java.lang.Number, java.lang.Number)" class="hiddenlink" target="rightframe">type
+(<code>float, Number, Number</code>) in android.animation.FloatEvaluator
+</A></nobr><br>
+<!-- Method evaluate -->
+ <nobr><A HREF="android.animation.IntEvaluator.html#android.animation.IntEvaluator.evaluate_changed(float, java.lang.Integer, java.lang.Integer)" class="hiddenlink" target="rightframe">type
+(<code>float, Integer, Integer</code>) in android.animation.IntEvaluator
+</A></nobr><br>
+<!-- Method evaluate -->
+ <nobr><A HREF="android.animation.TypeEvaluator.html#android.animation.TypeEvaluator.evaluate_changed(float, T, T)" class="hiddenlink" target="rightframe">type
+(<code>float, T, T</code>) in android.animation.TypeEvaluator
+</A></nobr><br>
+<!-- Class ExpandableListView -->
+<A HREF="android.widget.ExpandableListView.html" class="hiddenlink" target="rightframe">ExpandableListView</A><br>
+<!-- Field EXTRA_NETWORK_INFO -->
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.EXTRA_NETWORK_INFO" class="hiddenlink" target="rightframe">EXTRA_NETWORK_INFO</A>
+</nobr><br>
+<!-- Field fadingEdge -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.fadingEdge" class="hiddenlink" target="rightframe">fadingEdge</A>
+</nobr><br>
+<!-- Class Field -->
+<A HREF="java.lang.reflect.Field.html" class="hiddenlink" target="rightframe">Field</A><br>
+<!-- Class FieldPacker -->
+<A HREF="android.renderscript.FieldPacker.html" class="hiddenlink" target="rightframe">FieldPacker</A><br>
+<!-- Class FilePermission -->
+<A HREF="java.io.FilePermission.html" class="hiddenlink" target="rightframe">FilePermission</A><br>
+<!-- Method findLibrary -->
+<nobr><A HREF="dalvik.system.PathClassLoader.html#dalvik.system.PathClassLoader.findLibrary_changed(java.lang.String)" class="hiddenlink" target="rightframe">findLibrary
+(<code>String</code>)</A></nobr><br>
+<!-- Field FLAG_BLUR_BEHIND -->
+<nobr><A HREF="android.view.WindowManager.LayoutParams.html#android.view.WindowManager.LayoutParams.FLAG_BLUR_BEHIND" class="hiddenlink" target="rightframe">FLAG_BLUR_BEHIND</A>
+</nobr><br>
+<!-- Class FloatEvaluator -->
+<A HREF="android.animation.FloatEvaluator.html" class="hiddenlink" target="rightframe">FloatEvaluator</A><br>
+<!-- Class Fragment -->
+<A HREF="android.app.Fragment.html" class="hiddenlink" target="rightframe">Fragment</A><br>
+<!-- Class FragmentManager -->
+<A HREF="android.app.FragmentManager.html" class="hiddenlink" target="rightframe">FragmentManager</A><br>
+<!-- Class FragmentManager.BackStackEntry -->
+<A HREF="android.app.FragmentManager.BackStackEntry.html" class="hiddenlink" target="rightframe"><i>FragmentManager.BackStackEntry</i></A><br>
+<!-- Class FrameLayout -->
+<A HREF="android.widget.FrameLayout.html" class="hiddenlink" target="rightframe">FrameLayout</A><br>
+<!-- Method getAccessibilityServiceList -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getAccessibilityServiceList_changed()" class="hiddenlink" target="rightframe">getAccessibilityServiceList
+()</A></nobr><br>
+<!-- Method getAddedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getAddedCount_changed()" class="hiddenlink" target="rightframe">getAddedCount
+()</A></nobr><br>
+<!-- Method getAuthToken -->
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_changed(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe">getAuthToken
+(<code>Account, String, boolean, AccountManagerCallback<Bundle>, Handler</code>)</A></nobr><br>
+<!-- Method getBackgroundDataSetting -->
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.getBackgroundDataSetting_changed()" class="hiddenlink" target="rightframe">getBackgroundDataSetting
+()</A></nobr><br>
+<!-- Method getBeforeText -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getBeforeText_changed()" class="hiddenlink" target="rightframe">getBeforeText
+()</A></nobr><br>
+<!-- Method getClassName -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getClassName_changed()" class="hiddenlink" target="rightframe">getClassName
+()</A></nobr><br>
+<!-- Method getConsiderGoneChildrenWhenMeasuring -->
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getConsiderGoneChildrenWhenMeasuring_changed()" class="hiddenlink" target="rightframe">getConsiderGoneChildrenWhenMeasuring
+()</A></nobr><br>
+<!-- Method getConstructor -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<!-- Method getConstructors -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructors_changed()" class="hiddenlink" target="rightframe">getConstructors
+()</A></nobr><br>
+<!-- Method getContentDescription -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getContentDescription_changed()" class="hiddenlink" target="rightframe">getContentDescription
+()</A></nobr><br>
+<!-- Method getCurrentItemIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getCurrentItemIndex_changed()" class="hiddenlink" target="rightframe">getCurrentItemIndex
+()</A></nobr><br>
+<!-- Method getDeclaredClasses -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredClasses_changed()" class="hiddenlink" target="rightframe">getDeclaredClasses
+()</A></nobr><br>
+<!-- Method getDeclaredConstructor -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<!-- Method getDeclaredConstructors -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructors_changed()" class="hiddenlink" target="rightframe">getDeclaredConstructors
+()</A></nobr><br>
+<!-- Method getDeclaredField -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getDeclaredField
+(<code>String</code>)</A></nobr><br>
+<!-- Method getDeclaredFields -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredFields_changed()" class="hiddenlink" target="rightframe">getDeclaredFields
+()</A></nobr><br>
+<!-- Method getDeclaredMethod -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<!-- Method getDeclaredMethods -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethods_changed()" class="hiddenlink" target="rightframe">getDeclaredMethods
+()</A></nobr><br>
+<!-- Method getDisableDependentsState -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getDisableDependentsState_changed()" class="hiddenlink" target="rightframe">getDisableDependentsState
+()</A></nobr><br>
+<!-- Method getField -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getField
+(<code>String</code>)</A></nobr><br>
+<!-- Method getFields -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getFields_changed()" class="hiddenlink" target="rightframe">getFields
+()</A></nobr><br>
+<!-- Method getFromIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getFromIndex_changed()" class="hiddenlink" target="rightframe">getFromIndex
+()</A></nobr><br>
+<!-- Method getItemCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getItemCount_changed()" class="hiddenlink" target="rightframe">getItemCount
+()</A></nobr><br>
+<!-- Method getMainLooper -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.getMainLooper_changed()" class="hiddenlink" target="rightframe">getMainLooper
+()</A></nobr><br>
+<!-- Method getMethod -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<!-- Method getMethods -->
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethods_changed()" class="hiddenlink" target="rightframe">getMethods
+()</A></nobr><br>
+<!-- Method getParcelableData -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getParcelableData_changed()" class="hiddenlink" target="rightframe">getParcelableData
+()</A></nobr><br>
+<!-- Method getRemovedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRemovedCount_changed()" class="hiddenlink" target="rightframe">getRemovedCount
+()</A></nobr><br>
+<!-- Method getSummaryOff -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOff_changed()" class="hiddenlink" target="rightframe">getSummaryOff
+()</A></nobr><br>
+<!-- Method getSummaryOn -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOn_changed()" class="hiddenlink" target="rightframe">getSummaryOn
+()</A></nobr><br>
+<!-- Method getText -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getText_changed()" class="hiddenlink" target="rightframe">getText
+()</A></nobr><br>
+<!-- Method getTextSize -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextSize_changed()" class="hiddenlink" target="rightframe">getTextSize
+()</A></nobr><br>
+<!-- Class GLUtils -->
+<A HREF="android.opengl.GLUtils.html" class="hiddenlink" target="rightframe">GLUtils</A><br>
+<!-- Class Gravity -->
+<A HREF="android.view.Gravity.html" class="hiddenlink" target="rightframe">Gravity</A><br>
+<!-- Class Handler -->
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>Handler</i><br>
+ <A HREF="android.os.Handler.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<!-- Class Handler -->
+ <A HREF="java.util.logging.Handler.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<!-- Method hashCode -->
+<i>hashCode</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.io.FilePermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.net.SocketPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.AllPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.BasicPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.Permission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.UnresolvedPermission
+</A></nobr><br>
+<!-- Method hashCode -->
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<!-- Field IMAGE_ANCHOR_TYPE -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.IMAGE_ANCHOR_TYPE" class="hiddenlink" target="rightframe">IMAGE_ANCHOR_TYPE</A>
+</nobr><br>
+<!-- Class InputDevice -->
+<A HREF="android.view.InputDevice.html" class="hiddenlink" target="rightframe">InputDevice</A><br>
+<!-- Class InputMethodManager -->
+<A HREF="android.view.inputmethod.InputMethodManager.html" class="hiddenlink" target="rightframe">InputMethodManager</A><br>
+<!-- Class InputMethodService -->
+<A HREF="android.inputmethodservice.InputMethodService.html" class="hiddenlink" target="rightframe">InputMethodService</A><br>
+<!-- Class InputMethodService.InputMethodSessionImpl -->
+<A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html" class="hiddenlink" target="rightframe">InputMethodService.InputMethodSessionImpl</A><br>
+<!-- Class InputMethodSession -->
+<A HREF="android.view.inputmethod.InputMethodSession.html" class="hiddenlink" target="rightframe"><i>InputMethodSession</i></A><br>
+<!-- Class InputMethodSubtype -->
+<A HREF="android.view.inputmethod.InputMethodSubtype.html" class="hiddenlink" target="rightframe">InputMethodSubtype</A><br>
+<!-- Class Int2 -->
+<A HREF="android.renderscript.Int2.html" class="hiddenlink" target="rightframe">Int2</A><br>
+<!-- Class Int3 -->
+<A HREF="android.renderscript.Int3.html" class="hiddenlink" target="rightframe">Int3</A><br>
+<!-- Class Int4 -->
+<A HREF="android.renderscript.Int4.html" class="hiddenlink" target="rightframe">Int4</A><br>
+<!-- Class Intent -->
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<!-- Class IntentSender -->
+<A HREF="android.content.IntentSender.html" class="hiddenlink" target="rightframe">IntentSender</A><br>
+<!-- Class IntEvaluator -->
+<A HREF="android.animation.IntEvaluator.html" class="hiddenlink" target="rightframe">IntEvaluator</A><br>
+<!-- Method isChecked -->
+<i>isChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method isChecked -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method isEnabled -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isEnabled_changed()" class="hiddenlink" target="rightframe">isEnabled
+()</A></nobr><br>
+<!-- Method isFullScreen -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isFullScreen_changed()" class="hiddenlink" target="rightframe">isFullScreen
+()</A></nobr><br>
+<!-- Class IsoDep -->
+<A HREF="android.nfc.tech.IsoDep.html" class="hiddenlink" target="rightframe">IsoDep</A><br>
+<!-- Method isPassword -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isPassword_changed()" class="hiddenlink" target="rightframe">isPassword
+()</A></nobr><br>
+<!-- Method isWiredHeadsetOn -->
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.isWiredHeadsetOn_changed()" class="hiddenlink" target="rightframe">isWiredHeadsetOn
+()</A></nobr><br>
+<!-- Package java.io -->
+<A NAME="J"></A>
+<A HREF="pkg_java.io.html" class="hiddenlink" target="rightframe">java.io</A><br>
+<!-- Package java.lang -->
+<A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
+<!-- Package java.lang.ref -->
+<A HREF="pkg_java.lang.ref.html" class="hiddenlink" target="rightframe">java.lang.ref</A><br>
+<!-- Package java.lang.reflect -->
+<A HREF="pkg_java.lang.reflect.html" class="hiddenlink" target="rightframe">java.lang.reflect</A><br>
+<!-- Package java.net -->
+<A HREF="pkg_java.net.html" class="hiddenlink" target="rightframe">java.net</A><br>
+<!-- Package java.security -->
+<A HREF="pkg_java.security.html" class="hiddenlink" target="rightframe">java.security</A><br>
+<!-- Package java.util.logging -->
+<A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<!-- Package javax.security.auth -->
+<A HREF="pkg_javax.security.auth.html" class="hiddenlink" target="rightframe">javax.security.auth</A><br>
+<!-- Class KeyEvent -->
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.KeyEvent.html" class="hiddenlink" target="rightframe">KeyEvent</A><br>
+<!-- Class Layout -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.text.Layout.html" class="hiddenlink" target="rightframe">Layout</A><br>
+<!-- Class LayoutTransition -->
+<A HREF="android.animation.LayoutTransition.html" class="hiddenlink" target="rightframe">LayoutTransition</A><br>
+<!-- Class LinearLayout -->
+<A HREF="android.widget.LinearLayout.html" class="hiddenlink" target="rightframe">LinearLayout</A><br>
+<!-- Class LiveFolders -->
+<A HREF="android.provider.LiveFolders.html" class="hiddenlink" target="rightframe">LiveFolders</A><br>
+<!-- Class Long2 -->
+<A HREF="android.renderscript.Long2.html" class="hiddenlink" target="rightframe">Long2</A><br>
+<!-- Class Long3 -->
+<A HREF="android.renderscript.Long3.html" class="hiddenlink" target="rightframe">Long3</A><br>
+<!-- Class Long4 -->
+<A HREF="android.renderscript.Long4.html" class="hiddenlink" target="rightframe">Long4</A><br>
+<!-- Method loop -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.loop_changed()" class="hiddenlink" target="rightframe">loop
+()</A></nobr><br>
+<!-- Class Looper -->
+<A HREF="android.os.Looper.html" class="hiddenlink" target="rightframe">Looper</A><br>
+<!-- Class Manifest.permission -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<!-- Class Matrix -->
+<A HREF="android.opengl.Matrix.html" class="hiddenlink" target="rightframe">Matrix</A><br>
+<!-- Field MAX_TEXT_LENGTH -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH" class="hiddenlink" target="rightframe">MAX_TEXT_LENGTH</A>
+</nobr><br>
+<!-- Class MediaMetadataRetriever -->
+<A HREF="android.media.MediaMetadataRetriever.html" class="hiddenlink" target="rightframe">MediaMetadataRetriever</A><br>
+<!-- Class MediaPlayer -->
+<A HREF="android.media.MediaPlayer.html" class="hiddenlink" target="rightframe">MediaPlayer</A><br>
+<!-- Class MediaRecorder -->
+<A HREF="android.media.MediaRecorder.html" class="hiddenlink" target="rightframe">MediaRecorder</A><br>
+<!-- Class MediaStore.Audio.AudioColumns -->
+<A HREF="android.provider.MediaStore.Audio.AudioColumns.html" class="hiddenlink" target="rightframe"><i>MediaStore.Audio.AudioColumns</i></A><br>
+<!-- Class MenuItem -->
+<A HREF="android.view.MenuItem.html" class="hiddenlink" target="rightframe"><i>MenuItem</i></A><br>
+<!-- Class Method -->
+<A HREF="java.lang.reflect.Method.html" class="hiddenlink" target="rightframe">Method</A><br>
+<!-- Class MifareClassic -->
+<A HREF="android.nfc.tech.MifareClassic.html" class="hiddenlink" target="rightframe">MifareClassic</A><br>
+<!-- Class MifareUltralight -->
+<A HREF="android.nfc.tech.MifareUltralight.html" class="hiddenlink" target="rightframe">MifareUltralight</A><br>
+<!-- Class MockPackageManager -->
+<A HREF="android.test.mock.MockPackageManager.html" class="hiddenlink" target="rightframe">MockPackageManager</A><br>
+<!-- Class MotionEvent -->
+<A HREF="android.view.MotionEvent.html" class="hiddenlink" target="rightframe">MotionEvent</A><br>
+<!-- Method myLooper -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myLooper_changed()" class="hiddenlink" target="rightframe">myLooper
+()</A></nobr><br>
+<!-- Method myQueue -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myQueue_changed()" class="hiddenlink" target="rightframe">myQueue
+()</A></nobr><br>
+<!-- Class NdefRecord -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.nfc.NdefRecord.html" class="hiddenlink" target="rightframe">NdefRecord</A><br>
+<!-- Class NfcA -->
+<A HREF="android.nfc.tech.NfcA.html" class="hiddenlink" target="rightframe">NfcA</A><br>
+<!-- Class NfcAdapter -->
+<A HREF="android.nfc.NfcAdapter.html" class="hiddenlink" target="rightframe">NfcAdapter</A><br>
+<!-- Class NfcB -->
+<A HREF="android.nfc.tech.NfcB.html" class="hiddenlink" target="rightframe">NfcB</A><br>
+<!-- Class NfcF -->
+<A HREF="android.nfc.tech.NfcF.html" class="hiddenlink" target="rightframe">NfcF</A><br>
+<!-- Class NfcV -->
+<A HREF="android.nfc.tech.NfcV.html" class="hiddenlink" target="rightframe">NfcV</A><br>
+<!-- Class Notification.Builder -->
+<A HREF="android.app.Notification.Builder.html" class="hiddenlink" target="rightframe">Notification.Builder</A><br>
+<!-- Class ObjectAnimator -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.animation.ObjectAnimator.html" class="hiddenlink" target="rightframe">ObjectAnimator</A><br>
+<!-- Class ObjectInputStream -->
+<A HREF="java.io.ObjectInputStream.html" class="hiddenlink" target="rightframe">ObjectInputStream</A><br>
+<!-- Class ObjectOutputStream -->
+<A HREF="java.io.ObjectOutputStream.html" class="hiddenlink" target="rightframe">ObjectOutputStream</A><br>
+<!-- Class OverScroller -->
+<A HREF="android.widget.OverScroller.html" class="hiddenlink" target="rightframe">OverScroller</A><br>
+<!-- Class PackageManager -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<!-- Class PackageStats -->
+<A HREF="android.content.pm.PackageStats.html" class="hiddenlink" target="rightframe">PackageStats</A><br>
+<!-- Class Paint -->
+<A HREF="android.graphics.Paint.html" class="hiddenlink" target="rightframe">Paint</A><br>
+<!-- Class ParcelFileDescriptor -->
+<A HREF="android.os.ParcelFileDescriptor.html" class="hiddenlink" target="rightframe">ParcelFileDescriptor</A><br>
+<!-- Class PathClassLoader -->
+<A HREF="dalvik.system.PathClassLoader.html" class="hiddenlink" target="rightframe">PathClassLoader</A><br>
+<!-- Class Patterns -->
+<A HREF="android.util.Patterns.html" class="hiddenlink" target="rightframe">Patterns</A><br>
+<!-- Class PendingIntent -->
+<A HREF="android.app.PendingIntent.html" class="hiddenlink" target="rightframe">PendingIntent</A><br>
+<!-- Class Permission -->
+<A HREF="java.security.Permission.html" class="hiddenlink" target="rightframe">Permission</A><br>
+<!-- Class PopupMenu -->
+<A HREF="android.widget.PopupMenu.html" class="hiddenlink" target="rightframe">PopupMenu</A><br>
+<!-- Class Preference -->
+<A HREF="android.preference.Preference.html" class="hiddenlink" target="rightframe">Preference</A><br>
+<!-- Class PreferenceActivity -->
+<A HREF="android.preference.PreferenceActivity.html" class="hiddenlink" target="rightframe">PreferenceActivity</A><br>
+<!-- Method prepare -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepare_changed()" class="hiddenlink" target="rightframe">prepare
+()</A></nobr><br>
+<!-- Method prepareMainLooper -->
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepareMainLooper_changed()" class="hiddenlink" target="rightframe">prepareMainLooper
+()</A></nobr><br>
+<!-- Class PrivateCredentialPermission -->
+<A HREF="javax.security.auth.PrivateCredentialPermission.html" class="hiddenlink" target="rightframe">PrivateCredentialPermission</A><br>
+<!-- Class Process -->
+<A HREF="android.os.Process.html" class="hiddenlink" target="rightframe">Process</A><br>
+<!-- Class PropertyValuesHolder -->
+<A HREF="android.animation.PropertyValuesHolder.html" class="hiddenlink" target="rightframe">PropertyValuesHolder</A><br>
+<!-- Class R.attr -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<!-- Class R.color -->
+<A HREF="android.R.color.html" class="hiddenlink" target="rightframe">R.color</A><br>
+<!-- Class R.integer -->
+<A HREF="android.R.integer.html" class="hiddenlink" target="rightframe">R.integer</A><br>
+<!-- Class R.string -->
+<A HREF="android.R.string.html" class="hiddenlink" target="rightframe">R.string</A><br>
+<!-- Class R.style -->
+<A HREF="android.R.style.html" class="hiddenlink" target="rightframe">R.style</A><br>
+<!-- Field RADIO -->
+<nobr><A HREF="android.os.Build.html#android.os.Build.RADIO" class="hiddenlink" target="rightframe">RADIO</A>
+</nobr><br>
+<!-- Class RecognizerIntent -->
+<A HREF="android.speech.RecognizerIntent.html" class="hiddenlink" target="rightframe">RecognizerIntent</A><br>
+<!-- Class RecoverySystem -->
+<A HREF="android.os.RecoverySystem.html" class="hiddenlink" target="rightframe">RecoverySystem</A><br>
+<!-- Class RectF -->
+<A HREF="android.graphics.RectF.html" class="hiddenlink" target="rightframe">RectF</A><br>
+<!-- Method recycle -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.recycle_changed()" class="hiddenlink" target="rightframe">recycle
+()</A></nobr><br>
+<!-- Class ReferenceQueue -->
+<A HREF="java.lang.ref.ReferenceQueue.html" class="hiddenlink" target="rightframe">ReferenceQueue</A><br>
+<!-- Class RemoteViews -->
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<!-- Method remove -->
+<nobr><A HREF="java.lang.ref.ReferenceQueue.html#java.lang.ref.ReferenceQueue.remove_changed(long)" class="hiddenlink" target="rightframe">remove
+(<code>long</code>)</A></nobr><br>
+<!-- Class RenderScriptGL -->
+<A HREF="android.renderscript.RenderScriptGL.html" class="hiddenlink" target="rightframe">RenderScriptGL</A><br>
+<!-- Class Script -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.renderscript.Script.html" class="hiddenlink" target="rightframe">Script</A><br>
+<!-- Class Scroller -->
+<A HREF="android.widget.Scroller.html" class="hiddenlink" target="rightframe">Scroller</A><br>
+<!-- Class SearchManager -->
+<A HREF="android.app.SearchManager.html" class="hiddenlink" target="rightframe">SearchManager</A><br>
+<!-- Class SearchView -->
+<A HREF="android.widget.SearchView.html" class="hiddenlink" target="rightframe">SearchView</A><br>
+<!-- Class Sensor -->
+<A HREF="android.hardware.Sensor.html" class="hiddenlink" target="rightframe">Sensor</A><br>
+<!-- Class Service -->
+<A HREF="android.app.Service.html" class="hiddenlink" target="rightframe">Service</A><br>
+<!-- Class ServiceInfo -->
+<A HREF="android.content.pm.ServiceInfo.html" class="hiddenlink" target="rightframe">ServiceInfo</A><br>
+<!-- Method setAccessible -->
+<i>setAccessible</i><br>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(java.lang.reflect.AccessibleObject[], boolean)" class="hiddenlink" target="rightframe">type
+(<code>AccessibleObject[], boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+<!-- Method setAccessible -->
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+<!-- Method setAddedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setAddedCount_changed(int)" class="hiddenlink" target="rightframe">setAddedCount
+(<code>int</code>)</A></nobr><br>
+<!-- Method setAuxiliaryOutputFile -->
+<i>setAuxiliaryOutputFile</i><br>
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.io.FileDescriptor)" class="hiddenlink" target="rightframe">type
+(<code>FileDescriptor</code>) in android.media.MediaRecorder
+</A></nobr><br>
+<!-- Method setAuxiliaryOutputFile -->
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.lang.String)" class="hiddenlink" target="rightframe">type
+(<code>String</code>) in android.media.MediaRecorder
+</A></nobr><br>
+<!-- Method setBeforeText -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setBeforeText_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setBeforeText
+(<code>CharSequence</code>)</A></nobr><br>
+<!-- Method setChecked -->
+<i>setChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setChecked -->
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<!-- Method setClassName -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setClassName_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setClassName
+(<code>CharSequence</code>)</A></nobr><br>
+<!-- Method setContentDescription -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setContentDescription_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setContentDescription
+(<code>CharSequence</code>)</A></nobr><br>
+<!-- Method setCurrentItemIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setCurrentItemIndex_changed(int)" class="hiddenlink" target="rightframe">setCurrentItemIndex
+(<code>int</code>)</A></nobr><br>
+<!-- Method setDisableDependentsState -->
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setDisableDependentsState_changed(boolean)" class="hiddenlink" target="rightframe">setDisableDependentsState
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setEnabled -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setEnabled_changed(boolean)" class="hiddenlink" target="rightframe">setEnabled
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setEncoding -->
+<nobr><A HREF="java.util.logging.Handler.html#java.util.logging.Handler.setEncoding_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEncoding
+(<code>String</code>)</A></nobr><br>
+<!-- Method setEngineByPackageName -->
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.setEngineByPackageName_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEngineByPackageName
+(<code>String</code>)</A></nobr><br>
+<!-- Method setFromIndex -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFromIndex_changed(int)" class="hiddenlink" target="rightframe">setFromIndex
+(<code>int</code>)</A></nobr><br>
+<!-- Method setFullScreen -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFullScreen_changed(boolean)" class="hiddenlink" target="rightframe">setFullScreen
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setItemCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setItemCount_changed(int)" class="hiddenlink" target="rightframe">setItemCount
+(<code>int</code>)</A></nobr><br>
+<!-- Method setParcelableData -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setParcelableData_changed(android.os.Parcelable)" class="hiddenlink" target="rightframe">setParcelableData
+(<code>Parcelable</code>)</A></nobr><br>
+<!-- Method setPassword -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setPassword_changed(boolean)" class="hiddenlink" target="rightframe">setPassword
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setRemoteAdapter -->
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_changed(int, int, android.content.Intent)" class="hiddenlink" target="rightframe">setRemoteAdapter
+(<code>int, int, Intent</code>)</A></nobr><br>
+<!-- Method setRemovedCount -->
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setRemovedCount_changed(int)" class="hiddenlink" target="rightframe">setRemovedCount
+(<code>int</code>)</A></nobr><br>
+<!-- Method setTextSize -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextSize_changed(android.webkit.WebSettings.TextSize)" class="hiddenlink" target="rightframe">setTextSize
+(<code>TextSize</code>)</A></nobr><br>
+<!-- Class Settings -->
+<A HREF="android.provider.Settings.html" class="hiddenlink" target="rightframe">Settings</A><br>
+<!-- Class Settings.Secure -->
+<A HREF="android.provider.Settings.Secure.html" class="hiddenlink" target="rightframe">Settings.Secure</A><br>
+<!-- Class Settings.System -->
+<A HREF="android.provider.Settings.System.html" class="hiddenlink" target="rightframe">Settings.System</A><br>
+<!-- Class Short2 -->
+<A HREF="android.renderscript.Short2.html" class="hiddenlink" target="rightframe">Short2</A><br>
+<!-- Class Short3 -->
+<A HREF="android.renderscript.Short3.html" class="hiddenlink" target="rightframe">Short3</A><br>
+<!-- Class Short4 -->
+<A HREF="android.renderscript.Short4.html" class="hiddenlink" target="rightframe">Short4</A><br>
+<!-- Class SocketPermission -->
+<A HREF="java.net.SocketPermission.html" class="hiddenlink" target="rightframe">SocketPermission</A><br>
+<!-- Class SparseArray -->
+<A HREF="android.util.SparseArray.html" class="hiddenlink" target="rightframe">SparseArray</A><br>
+<!-- Class SparseBooleanArray -->
+<A HREF="android.util.SparseBooleanArray.html" class="hiddenlink" target="rightframe">SparseBooleanArray</A><br>
+<!-- Class SparseIntArray -->
+<A HREF="android.util.SparseIntArray.html" class="hiddenlink" target="rightframe">SparseIntArray</A><br>
+<!-- Class SpeechRecognizer -->
+<A HREF="android.speech.SpeechRecognizer.html" class="hiddenlink" target="rightframe">SpeechRecognizer</A><br>
+<!-- Class SQLiteOpenHelper -->
+<A HREF="android.database.sqlite.SQLiteOpenHelper.html" class="hiddenlink" target="rightframe">SQLiteOpenHelper</A><br>
+<!-- Class SQLiteQueryBuilder -->
+<A HREF="android.database.sqlite.SQLiteQueryBuilder.html" class="hiddenlink" target="rightframe">SQLiteQueryBuilder</A><br>
+<!-- Field SSL_MAX_ERROR -->
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_MAX_ERROR" class="hiddenlink" target="rightframe">SSL_MAX_ERROR</A>
+</nobr><br>
+<!-- Class SSLCertificateSocketFactory -->
+<A HREF="android.net.SSLCertificateSocketFactory.html" class="hiddenlink" target="rightframe">SSLCertificateSocketFactory</A><br>
+<!-- Class SslError -->
+<i>SslError</i><br>
+ <A HREF="android.net.http.SslError.html" class="hiddenlink" target="rightframe">android.net.http</A><br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, android.net.http.SslCertificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, SslCertificate</code>)</A></nobr> constructor<br>
+<!-- Constructor SslError -->
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, java.security.cert.X509Certificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, X509Certificate</code>)</A></nobr> constructor<br>
+<!-- Class StackView -->
+<A HREF="android.widget.StackView.html" class="hiddenlink" target="rightframe">StackView</A><br>
+<!-- Field STATUS_BAR_HIDDEN -->
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_HIDDEN" class="hiddenlink" target="rightframe">STATUS_BAR_HIDDEN</A>
+</nobr><br>
+<!-- Field STATUS_BAR_VISIBLE -->
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_VISIBLE" class="hiddenlink" target="rightframe">STATUS_BAR_VISIBLE</A>
+</nobr><br>
+<!-- Method supportsProcesses -->
+<nobr><A HREF="android.os.Process.html#android.os.Process.supportsProcesses_changed()" class="hiddenlink" target="rightframe">supportsProcesses
+()</A></nobr><br>
+<!-- Class Surface -->
+<A HREF="android.view.Surface.html" class="hiddenlink" target="rightframe">Surface</A><br>
+<!-- Class SurfaceTexture -->
+<A HREF="android.graphics.SurfaceTexture.html" class="hiddenlink" target="rightframe">SurfaceTexture</A><br>
+<!-- Class SyncAdapterType -->
+<A HREF="android.content.SyncAdapterType.html" class="hiddenlink" target="rightframe">SyncAdapterType</A><br>
+<!-- Class TestTarget -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="dalvik.annotation.TestTarget.html" class="hiddenlink" target="rightframe">TestTarget</A><br>
+<!-- Class TestTargetClass -->
+<A HREF="dalvik.annotation.TestTargetClass.html" class="hiddenlink" target="rightframe">TestTargetClass</A><br>
+<!-- Class TextToSpeech -->
+<A HREF="android.speech.tts.TextToSpeech.html" class="hiddenlink" target="rightframe">TextToSpeech</A><br>
+<!-- Class TextToSpeech.Engine -->
+<A HREF="android.speech.tts.TextToSpeech.Engine.html" class="hiddenlink" target="rightframe">TextToSpeech.Engine</A><br>
+<!-- Class TextView -->
+<A HREF="android.widget.TextView.html" class="hiddenlink" target="rightframe">TextView</A><br>
+<!-- Field TOP_LEVEL_DOMAIN_STR -->
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR</A>
+</nobr><br>
+<!-- Field TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL -->
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL</A>
+</nobr><br>
+<!-- Class TrafficStats -->
+<A HREF="android.net.TrafficStats.html" class="hiddenlink" target="rightframe">TrafficStats</A><br>
+<!-- Field TTS_DEFAULT_COUNTRY -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY" class="hiddenlink" target="rightframe">TTS_DEFAULT_COUNTRY</A>
+</nobr><br>
+<!-- Field TTS_DEFAULT_LANG -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_LANG" class="hiddenlink" target="rightframe">TTS_DEFAULT_LANG</A>
+</nobr><br>
+<!-- Field TTS_DEFAULT_VARIANT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_VARIANT" class="hiddenlink" target="rightframe">TTS_DEFAULT_VARIANT</A>
+</nobr><br>
+<!-- Field TTS_USE_DEFAULTS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_USE_DEFAULTS" class="hiddenlink" target="rightframe">TTS_USE_DEFAULTS</A>
+</nobr><br>
+<!-- Field TYPE_TEMPERATURE -->
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_TEMPERATURE</A>
+</nobr><br>
+<!-- Class TypeEvaluator -->
+<A HREF="android.animation.TypeEvaluator.html" class="hiddenlink" target="rightframe"><i>TypeEvaluator</i></A><br>
+<!-- Class UnresolvedPermission -->
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="java.security.UnresolvedPermission.html" class="hiddenlink" target="rightframe">UnresolvedPermission</A><br>
+<!-- Class View -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<!-- Class ViewConfiguration -->
+<A HREF="android.view.ViewConfiguration.html" class="hiddenlink" target="rightframe">ViewConfiguration</A><br>
+<!-- Class ViewGroup -->
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<!-- Class ViewParent -->
+<A HREF="android.view.ViewParent.html" class="hiddenlink" target="rightframe"><i>ViewParent</i></A><br>
+<!-- Class ViewPropertyAnimator -->
+<A HREF="android.view.ViewPropertyAnimator.html" class="hiddenlink" target="rightframe">ViewPropertyAnimator</A><br>
+<!-- Class WallpaperManager -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#J"><font size="-2">J</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<!-- Class WallpaperService.Engine -->
+<A HREF="android.service.wallpaper.WallpaperService.Engine.html" class="hiddenlink" target="rightframe">WallpaperService.Engine</A><br>
+<!-- Class WebChromeClient -->
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<!-- Class WebSettings -->
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<!-- Class WebSettings.TextSize -->
+<A HREF="android.webkit.WebSettings.TextSize.html" class="hiddenlink" target="rightframe">WebSettings.TextSize</A><br>
+<!-- Class WebView.HitTestResult -->
+<A HREF="android.webkit.WebView.HitTestResult.html" class="hiddenlink" target="rightframe">WebView.HitTestResult</A><br>
+<!-- Field WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_AP_COUNT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_AP_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_AP_COUNT</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_MAX_AP_CHECKS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_MAX_AP_CHECKS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_PING_COUNT -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_COUNT</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_PING_DELAY_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_DELAY_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_PING_TIMEOUT_MS -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_TIMEOUT_MS</A>
+</nobr><br>
+<!-- Field WIFI_WATCHDOG_WATCH_LIST -->
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_WATCH_LIST" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_WATCH_LIST</A>
+</nobr><br>
+<!-- Class WifiManager -->
+<A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
+<!-- Class Window -->
+<A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
+<!-- Class WindowManager.LayoutParams -->
+<A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html
new file mode 100644
index 0000000..18bc2b3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html
@@ -0,0 +1,343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Field ALBUM_ART -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.MediaStore.Audio.AudioColumns.html#android.provider.MediaStore.Audio.AudioColumns.ALBUM_ART" class="hiddenlink" target="rightframe"><strike>ALBUM_ART</strike></A>
+</nobr><br>
+<!-- Method freeze -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.freeze_removed()" class="hiddenlink" target="rightframe"><strike>freeze</strike>
+()</A></nobr><br>
+<!-- Field FX_SURFACE_BLUR -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_BLUR" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_BLUR</strike></A>
+</nobr><br>
+<!-- Field FX_SURFACE_DIM -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_DIM" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_DIM</strike></A>
+</nobr><br>
+<!-- Field FX_SURFACE_MASK -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_MASK" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_MASK</strike></A>
+</nobr><br>
+<!-- Field FX_SURFACE_NORMAL -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_NORMAL" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_NORMAL</strike></A>
+</nobr><br>
+<!-- Field GPU -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.GPU" class="hiddenlink" target="rightframe"><strike>GPU</strike></A>
+</nobr><br>
+<!-- Field HARDWARE -->
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HARDWARE" class="hiddenlink" target="rightframe"><strike>HARDWARE</strike></A>
+</nobr><br>
+<!-- Field HIDDEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HIDDEN" class="hiddenlink" target="rightframe"><strike>HIDDEN</strike></A>
+</nobr><br>
+<!-- Method hide -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.hide_removed()" class="hiddenlink" target="rightframe"><strike>hide</strike>
+()</A></nobr><br>
+<!-- Field NON_PREMULTIPLIED -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.NON_PREMULTIPLIED" class="hiddenlink" target="rightframe"><strike>NON_PREMULTIPLIED</strike></A>
+</nobr><br>
+<!-- Method obtain -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_removed(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe"><strike>obtain</strike>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</A></nobr><br>
+<!-- Field PUSH_BUFFERS -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.PUSH_BUFFERS" class="hiddenlink" target="rightframe"><strike>PUSH_BUFFERS</strike></A>
+</nobr><br>
+<!-- Method readData -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>readData</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method readData -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Field SECURE -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SECURE" class="hiddenlink" target="rightframe"><strike>SECURE</strike></A>
+</nobr><br>
+<!-- Method setAlpha -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setAlpha_removed(float)" class="hiddenlink" target="rightframe"><strike>setAlpha</strike>
+(<code>float</code>)</A></nobr><br>
+<!-- Method setDataSource -->
+<nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_removed(java.lang.String)" class="hiddenlink" target="rightframe"><strike>setDataSource</strike>
+(<code>String</code>)</A></nobr><br>
+<!-- Method setFlags -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFlags_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setFlags</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setFreezeTint -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFreezeTint_removed(int)" class="hiddenlink" target="rightframe"><strike>setFreezeTint</strike>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setLayer -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setLayer_removed(int)" class="hiddenlink" target="rightframe"><strike>setLayer</strike>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setMatrix -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setMatrix_removed(float, float, float, float)" class="hiddenlink" target="rightframe"><strike>setMatrix</strike>
+(<code>float, float, float, float</code>)</A></nobr><br>
+<!-- Method setOrientation -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setOrientation_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setOrientation</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setPosition -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setPosition_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setPosition</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setSize -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setSize_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setSize</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method setSummaryOff -->
+<i>setSummaryOff</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSummaryOff -->
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSummaryOn -->
+<i>setSummaryOn</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setSummaryOn -->
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<!-- Method setTransparentRegionHint -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setTransparentRegionHint_removed(android.graphics.Region)" class="hiddenlink" target="rightframe"><strike>setTransparentRegionHint</strike>
+(<code>Region</code>)</A></nobr><br>
+<!-- Method show -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.show_removed()" class="hiddenlink" target="rightframe"><strike>show</strike>
+()</A></nobr><br>
+<!-- Method subData -->
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData_removed(int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subData</strike>
+(<code>int, FieldPacker</code>)</A></nobr><br>
+<!-- Method subData1D -->
+<i>subData1D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, byte[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, byte[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData1D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData1D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData1D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, short[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, short[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData2D -->
+<i>subData2D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subData2D -->
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<!-- Method subElementData -->
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subElementData_removed(int, int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subElementData</strike>
+(<code>int, int, FieldPacker</code>)</A></nobr><br>
+<!-- Field SURACE_FROZEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURACE_FROZEN</strike></A>
+</nobr><br>
+<!-- Field SURFACE_BLUR_FREEZE -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_BLUR_FREEZE" class="hiddenlink" target="rightframe"><strike>SURFACE_BLUR_FREEZE</strike></A>
+</nobr><br>
+<!-- Field SURFACE_DITHER -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_DITHER" class="hiddenlink" target="rightframe"><strike>SURFACE_DITHER</strike></A>
+</nobr><br>
+<!-- Field SURFACE_FROZEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURFACE_FROZEN</strike></A>
+</nobr><br>
+<!-- Field SURFACE_HIDDEN -->
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_HIDDEN" class="hiddenlink" target="rightframe"><strike>SURFACE_HIDDEN</strike></A>
+</nobr><br>
+<!-- Method unfreeze -->
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.unfreeze_removed()" class="hiddenlink" target="rightframe"><strike>unfreeze</strike>
+()</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html
new file mode 100644
index 0000000..542b3c8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.Manifest.permission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/Manifest.permission.html" target="_top"><font size="+2"><code>Manifest.permission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.Manifest.permission.ADD_VOICEMAIL"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/Manifest.permission.html#ADD_VOICEMAIL" target="_top"><code>ADD_VOICEMAIL</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.Manifest.permission.BIND_TEXT_SERVICE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/Manifest.permission.html#BIND_TEXT_SERVICE" target="_top"><code>BIND_TEXT_SERVICE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.Manifest.permission.BIND_VPN_SERVICE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/Manifest.permission.html#BIND_VPN_SERVICE" target="_top"><code>BIND_VPN_SERVICE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.Manifest.permission.READ_PROFILE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/Manifest.permission.html#READ_PROFILE" target="_top"><code>READ_PROFILE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.Manifest.permission.WRITE_PROFILE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/Manifest.permission.html#WRITE_PROFILE" target="_top"><code>WRITE_PROFILE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.attr.html b/docs/html/sdk/api_diff/14/changes/android.R.attr.html
new file mode 100644
index 0000000..d7adadb
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.R.attr.html
@@ -0,0 +1,580 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.R.attr
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/R.attr.html" target="_top"><font size="+2"><code>R.attr</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.accessibilityEventTypes"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#accessibilityEventTypes" target="_top"><code>accessibilityEventTypes</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.accessibilityFeedbackType"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#accessibilityFeedbackType" target="_top"><code>accessibilityFeedbackType</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.accessibilityFlags"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#accessibilityFlags" target="_top"><code>accessibilityFlags</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionBarDivider"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionBarDivider" target="_top"><code>actionBarDivider</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionBarItemBackground"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionBarItemBackground" target="_top"><code>actionBarItemBackground</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionBarSplitStyle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionBarSplitStyle" target="_top"><code>actionBarSplitStyle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionBarWidgetTheme"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionBarWidgetTheme" target="_top"><code>actionBarWidgetTheme</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionModeSelectAllDrawable"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionModeSelectAllDrawable" target="_top"><code>actionModeSelectAllDrawable</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionModeSplitBackground"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionModeSplitBackground" target="_top"><code>actionModeSplitBackground</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionModeStyle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionModeStyle" target="_top"><code>actionModeStyle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.actionProviderClass"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#actionProviderClass" target="_top"><code>actionProviderClass</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.alignmentMode"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#alignmentMode" target="_top"><code>alignmentMode</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.backgroundSplit"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#backgroundSplit" target="_top"><code>backgroundSplit</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.backgroundStacked"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#backgroundStacked" target="_top"><code>backgroundStacked</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.canRetrieveWindowContent"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#canRetrieveWindowContent" target="_top"><code>canRetrieveWindowContent</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.colorActivatedHighlight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#colorActivatedHighlight" target="_top"><code>colorActivatedHighlight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.colorFocusedHighlight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#colorFocusedHighlight" target="_top"><code>colorFocusedHighlight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.colorLongPressedHighlight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#colorLongPressedHighlight" target="_top"><code>colorLongPressedHighlight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.colorMultiSelectHighlight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#colorMultiSelectHighlight" target="_top"><code>colorMultiSelectHighlight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.colorPressedHighlight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#colorPressedHighlight" target="_top"><code>colorPressedHighlight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.columnCount"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#columnCount" target="_top"><code>columnCount</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.columnOrderPreserved"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#columnOrderPreserved" target="_top"><code>columnOrderPreserved</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.directionDescriptions"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#directionDescriptions" target="_top"><code>directionDescriptions</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.drawableEnd"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#drawableEnd" target="_top"><code>drawableEnd</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.drawableStart"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#drawableStart" target="_top"><code>drawableStart</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.isAuxiliary"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#isAuxiliary" target="_top"><code>isAuxiliary</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.layout_columnSpan"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#layout_columnSpan" target="_top"><code>layout_columnSpan</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.layout_row"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#layout_row" target="_top"><code>layout_row</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.layout_rowSpan"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#layout_rowSpan" target="_top"><code>layout_rowSpan</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.listPreferredItemHeightLarge"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#listPreferredItemHeightLarge" target="_top"><code>listPreferredItemHeightLarge</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.listPreferredItemHeightSmall"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#listPreferredItemHeightSmall" target="_top"><code>listPreferredItemHeightSmall</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.listPreferredItemPaddingLeft"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#listPreferredItemPaddingLeft" target="_top"><code>listPreferredItemPaddingLeft</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.listPreferredItemPaddingRight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#listPreferredItemPaddingRight" target="_top"><code>listPreferredItemPaddingRight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.minResizeHeight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#minResizeHeight" target="_top"><code>minResizeHeight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.minResizeWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#minResizeWidth" target="_top"><code>minResizeWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.notificationTimeout"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#notificationTimeout" target="_top"><code>notificationTimeout</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.overridesImplicitlyEnabledSubtype"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#overridesImplicitlyEnabledSubtype" target="_top"><code>overridesImplicitlyEnabledSubtype</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.packageNames"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#packageNames" target="_top"><code>packageNames</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.publicKey"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#publicKey" target="_top"><code>publicKey</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.requiresFadingEdge"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#requiresFadingEdge" target="_top"><code>requiresFadingEdge</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.rowCount"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#rowCount" target="_top"><code>rowCount</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.rowOrderPreserved"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#rowOrderPreserved" target="_top"><code>rowOrderPreserved</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.state_drag_can_accept"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#state_drag_can_accept" target="_top"><code>state_drag_can_accept</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.state_drag_hovered"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#state_drag_hovered" target="_top"><code>state_drag_hovered</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.state_hovered"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#state_hovered" target="_top"><code>state_hovered</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.stopWithTask"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#stopWithTask" target="_top"><code>stopWithTask</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.subtypeExtraValue"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#subtypeExtraValue" target="_top"><code>subtypeExtraValue</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.subtypeLocale"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#subtypeLocale" target="_top"><code>subtypeLocale</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.switchMinWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#switchMinWidth" target="_top"><code>switchMinWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.switchPadding"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#switchPadding" target="_top"><code>switchPadding</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.switchPreferenceStyle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#switchPreferenceStyle" target="_top"><code>switchPreferenceStyle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.switchTextAppearance"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#switchTextAppearance" target="_top"><code>switchTextAppearance</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.switchTextOff"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#switchTextOff" target="_top"><code>switchTextOff</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.switchTextOn"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#switchTextOn" target="_top"><code>switchTextOn</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.targetDescriptions"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#targetDescriptions" target="_top"><code>targetDescriptions</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.textAllCaps"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#textAllCaps" target="_top"><code>textAllCaps</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.textAppearanceListItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#textAppearanceListItem" target="_top"><code>textAppearanceListItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.textAppearanceListItemSmall"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#textAppearanceListItemSmall" target="_top"><code>textAppearanceListItemSmall</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.textEditSuggestionItemLayout"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#textEditSuggestionItemLayout" target="_top"><code>textEditSuggestionItemLayout</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.textSuggestionsWindowStyle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#textSuggestionsWindowStyle" target="_top"><code>textSuggestionsWindowStyle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.thumbTextPadding"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#thumbTextPadding" target="_top"><code>thumbTextPadding</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.track"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#track" target="_top"><code>track</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.uiOptions"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#uiOptions" target="_top"><code>uiOptions</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.useDefaultMargins"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#useDefaultMargins" target="_top"><code>useDefaultMargins</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.fadingEdge"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#fadingEdge" target="_top"><code>fadingEdge</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.color.html b/docs/html/sdk/api_diff/14/changes/android.R.color.html
new file mode 100644
index 0000000..2fa2703
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.R.color.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.R.color
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/R.color.html" target="_top"><font size="+2"><code>R.color</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_blue_bright"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_blue_bright" target="_top"><code>holo_blue_bright</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_blue_dark"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_blue_dark" target="_top"><code>holo_blue_dark</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_blue_light"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_blue_light" target="_top"><code>holo_blue_light</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_green_dark"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_green_dark" target="_top"><code>holo_green_dark</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_green_light"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_green_light" target="_top"><code>holo_green_light</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_orange_dark"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_orange_dark" target="_top"><code>holo_orange_dark</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_orange_light"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_orange_light" target="_top"><code>holo_orange_light</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_purple"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_purple" target="_top"><code>holo_purple</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_red_dark"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_red_dark" target="_top"><code>holo_red_dark</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.color.holo_red_light"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.color.html#holo_red_light" target="_top"><code>holo_red_light</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.integer.html b/docs/html/sdk/api_diff/14/changes/android.R.integer.html
new file mode 100644
index 0000000..8218ee4
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.R.integer.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.R.integer
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/R.integer.html" target="_top"><font size="+2"><code>R.integer</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.integer.status_bar_notification_info_maxnum"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.integer.html#status_bar_notification_info_maxnum" target="_top"><code>status_bar_notification_info_maxnum</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.string.html b/docs/html/sdk/api_diff/14/changes/android.R.string.html
new file mode 100644
index 0000000..942e97b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.R.string.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.R.string
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/R.string.html" target="_top"><font size="+2"><code>R.string</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.string.status_bar_notification_info_overflow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.string.html#status_bar_notification_info_overflow" target="_top"><code>status_bar_notification_info_overflow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.style.html b/docs/html/sdk/api_diff/14/changes/android.R.style.html
new file mode 100644
index 0000000..e4692cc
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.R.style.html
@@ -0,0 +1,1438 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.R.style
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/R.style.html" target="_top"><font size="+2"><code>R.style</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.DeviceDefault_ButtonBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#DeviceDefault_ButtonBar" target="_top"><code>DeviceDefault_ButtonBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.DeviceDefault_ButtonBar_AlertDialog"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#DeviceDefault_ButtonBar_AlertDialog" target="_top"><code>DeviceDefault_ButtonBar_AlertDialog</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.DeviceDefault_Light_ButtonBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#DeviceDefault_Light_ButtonBar" target="_top"><code>DeviceDefault_Light_ButtonBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.DeviceDefault_Light_ButtonBar_AlertDialog"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#DeviceDefault_Light_ButtonBar_AlertDialog" target="_top"><code>DeviceDefault_Light_ButtonBar_AlertDialog</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.DeviceDefault_Light_SegmentedButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#DeviceDefault_Light_SegmentedButton" target="_top"><code>DeviceDefault_Light_SegmentedButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.DeviceDefault_SegmentedButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#DeviceDefault_SegmentedButton" target="_top"><code>DeviceDefault_SegmentedButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault" target="_top"><code>TextAppearance_DeviceDefault</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_DialogWindowTitle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_DialogWindowTitle" target="_top"><code>TextAppearance_DeviceDefault_DialogWindowTitle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Large"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Large" target="_top"><code>TextAppearance_DeviceDefault_Large</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Large_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Large_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Large_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Medium"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Medium" target="_top"><code>TextAppearance_DeviceDefault_Medium</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Medium_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Medium_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Medium_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_SearchResult_Subtitle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_SearchResult_Subtitle" target="_top"><code>TextAppearance_DeviceDefault_SearchResult_Subtitle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_SearchResult_Title"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_SearchResult_Title" target="_top"><code>TextAppearance_DeviceDefault_SearchResult_Title</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Small" target="_top"><code>TextAppearance_DeviceDefault_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Small_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Small_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Small_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget" target="_top"><code>TextAppearance_DeviceDefault_Widget</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionBar_Menu" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionBar_Menu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionBar_Title" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionBar_Title</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionMode_Title" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionMode_Title</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" target="_top"><code>TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_Button"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_Button" target="_top"><code>TextAppearance_DeviceDefault_Widget_Button</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_DropDownHint"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_DropDownHint" target="_top"><code>TextAppearance_DeviceDefault_Widget_DropDownHint</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_DropDownItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_DropDownItem" target="_top"><code>TextAppearance_DeviceDefault_Widget_DropDownItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_EditText"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_EditText" target="_top"><code>TextAppearance_DeviceDefault_Widget_EditText</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_IconMenu_Item"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_IconMenu_Item" target="_top"><code>TextAppearance_DeviceDefault_Widget_IconMenu_Item</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_PopupMenu" target="_top"><code>TextAppearance_DeviceDefault_Widget_PopupMenu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Large"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_PopupMenu_Large" target="_top"><code>TextAppearance_DeviceDefault_Widget_PopupMenu_Large</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_PopupMenu_Small" target="_top"><code>TextAppearance_DeviceDefault_Widget_PopupMenu_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_TabWidget"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_TabWidget" target="_top"><code>TextAppearance_DeviceDefault_Widget_TabWidget</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_TextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_TextView" target="_top"><code>TextAppearance_DeviceDefault_Widget_TextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_TextView_PopupMenu"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" target="_top"><code>TextAppearance_DeviceDefault_Widget_TextView_PopupMenu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" target="_top"><code>TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_DeviceDefault_WindowTitle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_DeviceDefault_WindowTitle" target="_top"><code>TextAppearance_DeviceDefault_WindowTitle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_Holo_Widget_ActionBar_Menu"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_Holo_Widget_ActionBar_Menu" target="_top"><code>TextAppearance_Holo_Widget_ActionBar_Menu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" target="_top"><code>TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_Holo_Widget_ActionBar_Title_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_Holo_Widget_ActionBar_Title_Inverse" target="_top"><code>TextAppearance_Holo_Widget_ActionBar_Title_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" target="_top"><code>TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_Holo_Widget_ActionMode_Title_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_Holo_Widget_ActionMode_Title_Inverse" target="_top"><code>TextAppearance_Holo_Widget_ActionMode_Title_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.TextAppearance_SuggestionHighlight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#TextAppearance_SuggestionHighlight" target="_top"><code>TextAppearance_SuggestionHighlight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault" target="_top"><code>Theme_DeviceDefault</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Dialog"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Dialog" target="_top"><code>Theme_DeviceDefault_Dialog</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_DialogWhenLarge"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_DialogWhenLarge" target="_top"><code>Theme_DeviceDefault_DialogWhenLarge</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_DialogWhenLarge_NoActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_DialogWhenLarge_NoActionBar" target="_top"><code>Theme_DeviceDefault_DialogWhenLarge_NoActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Dialog_MinWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Dialog_MinWidth" target="_top"><code>Theme_DeviceDefault_Dialog_MinWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Dialog_NoActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Dialog_NoActionBar" target="_top"><code>Theme_DeviceDefault_Dialog_NoActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Dialog_NoActionBar_MinWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" target="_top"><code>Theme_DeviceDefault_Dialog_NoActionBar_MinWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_InputMethod"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_InputMethod" target="_top"><code>Theme_DeviceDefault_InputMethod</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light" target="_top"><code>Theme_DeviceDefault_Light</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_DarkActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_DarkActionBar" target="_top"><code>Theme_DeviceDefault_Light_DarkActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_Dialog"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_Dialog" target="_top"><code>Theme_DeviceDefault_Light_Dialog</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_DialogWhenLarge" target="_top"><code>Theme_DeviceDefault_Light_DialogWhenLarge</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" target="_top"><code>Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_Dialog_MinWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_Dialog_MinWidth" target="_top"><code>Theme_DeviceDefault_Light_Dialog_MinWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_Dialog_NoActionBar" target="_top"><code>Theme_DeviceDefault_Light_Dialog_NoActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" target="_top"><code>Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_NoActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_NoActionBar" target="_top"><code>Theme_DeviceDefault_Light_NoActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_NoActionBar_Fullscreen" target="_top"><code>Theme_DeviceDefault_Light_NoActionBar_Fullscreen</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Light_Panel"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Light_Panel" target="_top"><code>Theme_DeviceDefault_Light_Panel</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_NoActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_NoActionBar" target="_top"><code>Theme_DeviceDefault_NoActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_NoActionBar_Fullscreen" target="_top"><code>Theme_DeviceDefault_NoActionBar_Fullscreen</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Panel"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Panel" target="_top"><code>Theme_DeviceDefault_Panel</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Wallpaper"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Wallpaper" target="_top"><code>Theme_DeviceDefault_Wallpaper</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_DeviceDefault_Wallpaper_NoTitleBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_DeviceDefault_Wallpaper_NoTitleBar" target="_top"><code>Theme_DeviceDefault_Wallpaper_NoTitleBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Theme_Holo_Light_DarkActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Theme_Holo_Light_DarkActionBar" target="_top"><code>Theme_Holo_Light_DarkActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault" target="_top"><code>Widget_DeviceDefault</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionBar" target="_top"><code>Widget_DeviceDefault_ActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionBar_Solid"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionBar_Solid" target="_top"><code>Widget_DeviceDefault_ActionBar_Solid</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionBar_TabBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionBar_TabBar" target="_top"><code>Widget_DeviceDefault_ActionBar_TabBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionBar_TabText"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionBar_TabText" target="_top"><code>Widget_DeviceDefault_ActionBar_TabText</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionBar_TabView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionBar_TabView" target="_top"><code>Widget_DeviceDefault_ActionBar_TabView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionButton" target="_top"><code>Widget_DeviceDefault_ActionButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionButton_CloseMode"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionButton_CloseMode" target="_top"><code>Widget_DeviceDefault_ActionButton_CloseMode</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionButton_Overflow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionButton_Overflow" target="_top"><code>Widget_DeviceDefault_ActionButton_Overflow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionButton_TextButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionButton_TextButton" target="_top"><code>Widget_DeviceDefault_ActionButton_TextButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ActionMode"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ActionMode" target="_top"><code>Widget_DeviceDefault_ActionMode</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_AutoCompleteTextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_AutoCompleteTextView" target="_top"><code>Widget_DeviceDefault_AutoCompleteTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Button"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Button" target="_top"><code>Widget_DeviceDefault_Button</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Button_Borderless"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Button_Borderless" target="_top"><code>Widget_DeviceDefault_Button_Borderless</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Button_Borderless_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Button_Borderless_Small" target="_top"><code>Widget_DeviceDefault_Button_Borderless_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Button_Inset"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Button_Inset" target="_top"><code>Widget_DeviceDefault_Button_Inset</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Button_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Button_Small" target="_top"><code>Widget_DeviceDefault_Button_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Button_Toggle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Button_Toggle" target="_top"><code>Widget_DeviceDefault_Button_Toggle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_CalendarView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_CalendarView" target="_top"><code>Widget_DeviceDefault_CalendarView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_CompoundButton_CheckBox"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_CompoundButton_CheckBox" target="_top"><code>Widget_DeviceDefault_CompoundButton_CheckBox</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_CompoundButton_RadioButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_CompoundButton_RadioButton" target="_top"><code>Widget_DeviceDefault_CompoundButton_RadioButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_CompoundButton_Star"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_CompoundButton_Star" target="_top"><code>Widget_DeviceDefault_CompoundButton_Star</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_DatePicker"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_DatePicker" target="_top"><code>Widget_DeviceDefault_DatePicker</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_DropDownItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_DropDownItem" target="_top"><code>Widget_DeviceDefault_DropDownItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_DropDownItem_Spinner"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_DropDownItem_Spinner" target="_top"><code>Widget_DeviceDefault_DropDownItem_Spinner</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_EditText"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_EditText" target="_top"><code>Widget_DeviceDefault_EditText</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ExpandableListView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ExpandableListView" target="_top"><code>Widget_DeviceDefault_ExpandableListView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_GridView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_GridView" target="_top"><code>Widget_DeviceDefault_GridView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_HorizontalScrollView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_HorizontalScrollView" target="_top"><code>Widget_DeviceDefault_HorizontalScrollView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ImageButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ImageButton" target="_top"><code>Widget_DeviceDefault_ImageButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light" target="_top"><code>Widget_DeviceDefault_Light</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar" target="_top"><code>Widget_DeviceDefault_Light_ActionBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_Solid" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_Solid</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_Solid_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_TabBar" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_TabBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_TabText" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_TabText</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_TabText_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_TabView" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_TabView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ActionBar_TabView_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionButton" target="_top"><code>Widget_DeviceDefault_Light_ActionButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionButton_CloseMode"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionButton_CloseMode" target="_top"><code>Widget_DeviceDefault_Light_ActionButton_CloseMode</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionButton_Overflow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionButton_Overflow" target="_top"><code>Widget_DeviceDefault_Light_ActionButton_Overflow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionMode"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionMode" target="_top"><code>Widget_DeviceDefault_Light_ActionMode</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ActionMode_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ActionMode_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ActionMode_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_AutoCompleteTextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_AutoCompleteTextView" target="_top"><code>Widget_DeviceDefault_Light_AutoCompleteTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Button"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Button" target="_top"><code>Widget_DeviceDefault_Light_Button</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Button_Borderless_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Button_Borderless_Small" target="_top"><code>Widget_DeviceDefault_Light_Button_Borderless_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Button_Inset"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Button_Inset" target="_top"><code>Widget_DeviceDefault_Light_Button_Inset</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Button_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Button_Small" target="_top"><code>Widget_DeviceDefault_Light_Button_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Button_Toggle"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Button_Toggle" target="_top"><code>Widget_DeviceDefault_Light_Button_Toggle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_CalendarView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_CalendarView" target="_top"><code>Widget_DeviceDefault_Light_CalendarView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_CompoundButton_CheckBox"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_CompoundButton_CheckBox" target="_top"><code>Widget_DeviceDefault_Light_CompoundButton_CheckBox</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_CompoundButton_RadioButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_CompoundButton_RadioButton" target="_top"><code>Widget_DeviceDefault_Light_CompoundButton_RadioButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_CompoundButton_Star"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_CompoundButton_Star" target="_top"><code>Widget_DeviceDefault_Light_CompoundButton_Star</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_DropDownItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_DropDownItem" target="_top"><code>Widget_DeviceDefault_Light_DropDownItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_DropDownItem_Spinner"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_DropDownItem_Spinner" target="_top"><code>Widget_DeviceDefault_Light_DropDownItem_Spinner</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_EditText"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_EditText" target="_top"><code>Widget_DeviceDefault_Light_EditText</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ExpandableListView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ExpandableListView" target="_top"><code>Widget_DeviceDefault_Light_ExpandableListView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_GridView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_GridView" target="_top"><code>Widget_DeviceDefault_Light_GridView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_HorizontalScrollView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_HorizontalScrollView" target="_top"><code>Widget_DeviceDefault_Light_HorizontalScrollView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ImageButton"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ImageButton" target="_top"><code>Widget_DeviceDefault_Light_ImageButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ListPopupWindow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ListPopupWindow" target="_top"><code>Widget_DeviceDefault_Light_ListPopupWindow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ListView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ListView" target="_top"><code>Widget_DeviceDefault_Light_ListView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ListView_DropDown"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ListView_DropDown" target="_top"><code>Widget_DeviceDefault_Light_ListView_DropDown</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_PopupMenu"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_PopupMenu" target="_top"><code>Widget_DeviceDefault_Light_PopupMenu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_PopupWindow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_PopupWindow" target="_top"><code>Widget_DeviceDefault_Light_PopupWindow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Horizontal"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Horizontal" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Horizontal</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Large" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Large</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Large_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Small" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Small_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Title"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ProgressBar_Small_Title" target="_top"><code>Widget_DeviceDefault_Light_ProgressBar_Small_Title</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_RatingBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_RatingBar" target="_top"><code>Widget_DeviceDefault_Light_RatingBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_RatingBar_Indicator"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_RatingBar_Indicator" target="_top"><code>Widget_DeviceDefault_Light_RatingBar_Indicator</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_RatingBar_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_RatingBar_Small" target="_top"><code>Widget_DeviceDefault_Light_RatingBar_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_ScrollView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_ScrollView" target="_top"><code>Widget_DeviceDefault_Light_ScrollView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_SeekBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_SeekBar" target="_top"><code>Widget_DeviceDefault_Light_SeekBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Spinner"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Spinner" target="_top"><code>Widget_DeviceDefault_Light_Spinner</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_Tab"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_Tab" target="_top"><code>Widget_DeviceDefault_Light_Tab</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_TabWidget"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_TabWidget" target="_top"><code>Widget_DeviceDefault_Light_TabWidget</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_TextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_TextView" target="_top"><code>Widget_DeviceDefault_Light_TextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_TextView_SpinnerItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_TextView_SpinnerItem" target="_top"><code>Widget_DeviceDefault_Light_TextView_SpinnerItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_WebTextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_WebTextView" target="_top"><code>Widget_DeviceDefault_Light_WebTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Light_WebView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Light_WebView" target="_top"><code>Widget_DeviceDefault_Light_WebView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ListPopupWindow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ListPopupWindow" target="_top"><code>Widget_DeviceDefault_ListPopupWindow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ListView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ListView" target="_top"><code>Widget_DeviceDefault_ListView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ListView_DropDown"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ListView_DropDown" target="_top"><code>Widget_DeviceDefault_ListView_DropDown</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_PopupMenu"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_PopupMenu" target="_top"><code>Widget_DeviceDefault_PopupMenu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_PopupWindow"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_PopupWindow" target="_top"><code>Widget_DeviceDefault_PopupWindow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ProgressBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ProgressBar" target="_top"><code>Widget_DeviceDefault_ProgressBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ProgressBar_Horizontal"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ProgressBar_Horizontal" target="_top"><code>Widget_DeviceDefault_ProgressBar_Horizontal</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ProgressBar_Large"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ProgressBar_Large" target="_top"><code>Widget_DeviceDefault_ProgressBar_Large</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ProgressBar_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ProgressBar_Small" target="_top"><code>Widget_DeviceDefault_ProgressBar_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ProgressBar_Small_Title"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ProgressBar_Small_Title" target="_top"><code>Widget_DeviceDefault_ProgressBar_Small_Title</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_RatingBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_RatingBar" target="_top"><code>Widget_DeviceDefault_RatingBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_RatingBar_Indicator"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_RatingBar_Indicator" target="_top"><code>Widget_DeviceDefault_RatingBar_Indicator</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_RatingBar_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_RatingBar_Small" target="_top"><code>Widget_DeviceDefault_RatingBar_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_ScrollView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_ScrollView" target="_top"><code>Widget_DeviceDefault_ScrollView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_SeekBar"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_SeekBar" target="_top"><code>Widget_DeviceDefault_SeekBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Spinner"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Spinner" target="_top"><code>Widget_DeviceDefault_Spinner</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_Tab"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_Tab" target="_top"><code>Widget_DeviceDefault_Tab</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_TabWidget"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_TabWidget" target="_top"><code>Widget_DeviceDefault_TabWidget</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_TextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_TextView" target="_top"><code>Widget_DeviceDefault_TextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_TextView_SpinnerItem"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_TextView_SpinnerItem" target="_top"><code>Widget_DeviceDefault_TextView_SpinnerItem</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_WebTextView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_WebTextView" target="_top"><code>Widget_DeviceDefault_WebTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_DeviceDefault_WebView"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_DeviceDefault_WebView" target="_top"><code>Widget_DeviceDefault_WebView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_ActionBar_Solid"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_ActionBar_Solid" target="_top"><code>Widget_Holo_ActionBar_Solid</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Button_Borderless_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Button_Borderless_Small" target="_top"><code>Widget_Holo_Button_Borderless_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_ActionBar_Solid"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_ActionBar_Solid" target="_top"><code>Widget_Holo_Light_ActionBar_Solid</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_ActionBar_Solid_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_ActionBar_Solid_Inverse" target="_top"><code>Widget_Holo_Light_ActionBar_Solid_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_ActionBar_TabBar_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_ActionBar_TabBar_Inverse" target="_top"><code>Widget_Holo_Light_ActionBar_TabBar_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_ActionBar_TabText_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_ActionBar_TabText_Inverse" target="_top"><code>Widget_Holo_Light_ActionBar_TabText_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_ActionBar_TabView_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_ActionBar_TabView_Inverse" target="_top"><code>Widget_Holo_Light_ActionBar_TabView_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_ActionMode_Inverse"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_ActionMode_Inverse" target="_top"><code>Widget_Holo_Light_ActionMode_Inverse</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.style.Widget_Holo_Light_Button_Borderless_Small"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.style.html#Widget_Holo_Light_Button_Borderless_Small" target="_top"><code>Widget_Holo_Light_Button_Borderless_Small</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
new file mode 100644
index 0000000..7cae772
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.accessibilityservice.AccessibilityService
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.accessibilityservice.<A HREF="../../../../reference/android/accessibilityservice/AccessibilityService.html" target="_top"><font size="+2"><code>AccessibilityService</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityService.SERVICE_META_DATA"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityService.html#SERVICE_META_DATA" target="_top"><code>SERVICE_META_DATA</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
new file mode 100644
index 0000000..8e775a4
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.accessibilityservice.AccessibilityServiceInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.accessibilityservice.<A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html" target="_top"><font size="+2"><code>AccessibilityServiceInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.feedbackTypeToString_added(int)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#feedbackTypeToString(int)" target="_top"><code>feedbackTypeToString</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.flagToString_added(int)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#flagToString(int)" target="_top"><code>flagToString</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.getCanRetrieveWindowContent_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#getCanRetrieveWindowContent()" target="_top"><code>getCanRetrieveWindowContent</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.getDescription_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#getDescription()" target="_top"><code>getDescription</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.getId_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#getId()" target="_top"><code>getId</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.getResolveInfo_added()"></A>
+ <nobr><code>ResolveInfo</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#getResolveInfo()" target="_top"><code>getResolveInfo</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.getSettingsActivityName_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#getSettingsActivityName()" target="_top"><code>getSettingsActivityName</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/accessibilityservice/AccessibilityServiceInfo.html#FEEDBACK_ALL_MASK" target="_top"><code>FEEDBACK_ALL_MASK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html b/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html
new file mode 100644
index 0000000..8adef37
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.accounts.AccountManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.accounts.<A HREF="../../../../reference/android/accounts/AccountManager.html" target="_top"><font size="+2"><code>AccountManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accounts.AccountManager.getAuthToken_added(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)"></A>
+ <nobr><code>AccountManagerFuture<Bundle></code> <A HREF="../../../../reference/android/accounts/AccountManager.html#getAuthToken(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" target="_top"><code>getAuthToken</code></A>(<code>Account,</nobr> String<nobr>,</nobr> Bundle<nobr>,</nobr> boolean<nobr>,</nobr> AccountManagerCallback<Bundle><nobr>,</nobr> Handler<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accounts.AccountManager.newChooseAccountIntent_added(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle)"></A>
+ <nobr><code>Intent</code> <A HREF="../../../../reference/android/accounts/AccountManager.html#newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle)" target="_top"><code>newChooseAccountIntent</code></A>(<code>Account,</nobr> ArrayList<Account><nobr>,</nobr> String[]<nobr>,</nobr> boolean<nobr>,</nobr> String<nobr>,</nobr> String<nobr>,</nobr> String[]<nobr>,</nobr> Bundle<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accounts.AccountManager.getAuthToken_changed(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)"></A>
+ <nobr><code>AccountManagerFuture<Bundle></code> <A HREF="../../../../reference/android/accounts/AccountManager.html#getAuthToken(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" target="_top"><code>getAuthToken</code></A>(<code>Account,</nobr> String<nobr>,</nobr> boolean<nobr>,</nobr> AccountManagerCallback<Bundle><nobr>,</nobr> Handler<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accounts.AccountManager.KEY_ANDROID_PACKAGE_NAME"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/accounts/AccountManager.html#KEY_ANDROID_PACKAGE_NAME" target="_top"><code>KEY_ANDROID_PACKAGE_NAME</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html b/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html
new file mode 100644
index 0000000..1448825
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.Animator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.animation.<A HREF="../../../../reference/android/animation/Animator.html" target="_top"><font size="+2"><code>Animator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.Animator.isStarted_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/animation/Animator.html#isStarted()" target="_top"><code>isStarted</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html b/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
new file mode 100644
index 0000000..faedf88
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.FloatEvaluator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.animation.<A HREF="../../../../reference/android/animation/FloatEvaluator.html" target="_top"><font size="+2"><code>FloatEvaluator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.FloatEvaluator.evaluate_changed(float, java.lang.Number, java.lang.Number)"></A>
+ <nobr><code>Float</code> <A HREF="../../../../reference/android/animation/FloatEvaluator.html#evaluate(float, java.lang.Number, java.lang.Number)" target="_top"><code>evaluate</code></A>(<code>float,</nobr> Number<nobr>,</nobr> Number<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in return type from <code>Object</code> to <code>Float</code>.<br>
+ Change in signature from (<code>float, Object, Object</code>) to (<code>float, Number, Number</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html b/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
new file mode 100644
index 0000000..91388bd
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.IntEvaluator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.animation.<A HREF="../../../../reference/android/animation/IntEvaluator.html" target="_top"><font size="+2"><code>IntEvaluator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.IntEvaluator.evaluate_changed(float, java.lang.Integer, java.lang.Integer)"></A>
+ <nobr><code>Integer</code> <A HREF="../../../../reference/android/animation/IntEvaluator.html#evaluate(float, java.lang.Integer, java.lang.Integer)" target="_top"><code>evaluate</code></A>(<code>float,</nobr> Integer<nobr>,</nobr> Integer<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in return type from <code>Object</code> to <code>Integer</code>.<br>
+ Change in signature from (<code>float, Object, Object</code>) to (<code>float, Integer, Integer</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html b/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
new file mode 100644
index 0000000..ed6b3e7
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.LayoutTransition
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.animation.<A HREF="../../../../reference/android/animation/LayoutTransition.html" target="_top"><font size="+2"><code>LayoutTransition</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.LayoutTransition.setAnimateParentHierarchy_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/animation/LayoutTransition.html#setAnimateParentHierarchy(boolean)" target="_top"><code>setAnimateParentHierarchy</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html b/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
new file mode 100644
index 0000000..872ffff
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.ObjectAnimator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.animation.<A HREF="../../../../reference/android/animation/ObjectAnimator.html" target="_top"><font size="+2"><code>ObjectAnimator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.ObjectAnimator.ofFloat_added(T, android.util.Property<T, java.lang.Float>, float...)"></A>
+ <nobr><code>ObjectAnimator</code> <A HREF="../../../../reference/android/animation/ObjectAnimator.html#ofFloat(T, android.util.Property<T, java.lang.Float>, float...)" target="_top"><code>ofFloat</code></A>(<code>T,</nobr> Property<T<nobr>,</nobr> Float><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.ObjectAnimator.ofInt_added(T, android.util.Property<T, java.lang.Integer>, int...)"></A>
+ <nobr><code>ObjectAnimator</code> <A HREF="../../../../reference/android/animation/ObjectAnimator.html#ofInt(T, android.util.Property<T, java.lang.Integer>, int...)" target="_top"><code>ofInt</code></A>(<code>T,</nobr> Property<T<nobr>,</nobr> Integer><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.ObjectAnimator.ofObject_added(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...)"></A>
+ <nobr><code>ObjectAnimator</code> <A HREF="../../../../reference/android/animation/ObjectAnimator.html#ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...)" target="_top"><code>ofObject</code></A>(<code>T,</nobr> Property<T<nobr>,</nobr> V><nobr>,</nobr> TypeEvaluator<V><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.ObjectAnimator.setProperty_added(android.util.Property)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/animation/ObjectAnimator.html#setProperty(android.util.Property)" target="_top"><code>setProperty</code></A>(<code>Property</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html b/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
new file mode 100644
index 0000000..543d91f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.PropertyValuesHolder
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.animation.<A HREF="../../../../reference/android/animation/PropertyValuesHolder.html" target="_top"><font size="+2"><code>PropertyValuesHolder</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.PropertyValuesHolder.ofFloat_added(android.util.Property<?, java.lang.Float>, float...)"></A>
+ <nobr><code>PropertyValuesHolder</code> <A HREF="../../../../reference/android/animation/PropertyValuesHolder.html#ofFloat(android.util.Property<?, java.lang.Float>, float...)" target="_top"><code>ofFloat</code></A>(<code>Property<?,</nobr> Float><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.PropertyValuesHolder.ofInt_added(android.util.Property<?, java.lang.Integer>, int...)"></A>
+ <nobr><code>PropertyValuesHolder</code> <A HREF="../../../../reference/android/animation/PropertyValuesHolder.html#ofInt(android.util.Property<?, java.lang.Integer>, int...)" target="_top"><code>ofInt</code></A>(<code>Property<?,</nobr> Integer><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.PropertyValuesHolder.ofKeyframe_added(android.util.Property, android.animation.Keyframe...)"></A>
+ <nobr><code>PropertyValuesHolder</code> <A HREF="../../../../reference/android/animation/PropertyValuesHolder.html#ofKeyframe(android.util.Property, android.animation.Keyframe...)" target="_top"><code>ofKeyframe</code></A>(<code>Property<nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.PropertyValuesHolder.ofObject_added(android.util.Property, android.animation.TypeEvaluator<V>, V...)"></A>
+ <nobr><code>PropertyValuesHolder</code> <A HREF="../../../../reference/android/animation/PropertyValuesHolder.html#ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...)" target="_top"><code>ofObject</code></A>(<code>Property,</nobr> TypeEvaluator<V><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.PropertyValuesHolder.setProperty_added(android.util.Property)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/animation/PropertyValuesHolder.html#setProperty(android.util.Property)" target="_top"><code>setProperty</code></A>(<code>Property</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html b/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
new file mode 100644
index 0000000..1e95066
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation.TypeEvaluator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.animation.<A HREF="../../../../reference/android/animation/TypeEvaluator.html" target="_top"><font size="+2"><code>TypeEvaluator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation.TypeEvaluator.evaluate_changed(float, T, T)"></A>
+ <nobr><code>T</code> <A HREF="../../../../reference/android/animation/TypeEvaluator.html#evaluate(float, T, T)" target="_top"><code>evaluate</code></A>(<code>float,</nobr> T<nobr>,</nobr> T<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in return type from <code>Object</code> to <code>T</code>.<br>
+ Change in signature from (<code>float, Object, Object</code>) to (<code>float, T, T</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
new file mode 100644
index 0000000..22eed31
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.ActionBar.Tab
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/ActionBar.Tab.html" target="_top"><font size="+2"><code>ActionBar.Tab</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.Tab.getContentDescription_added()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/app/ActionBar.Tab.html#getContentDescription()" target="_top"><code>getContentDescription</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.Tab.setContentDescription_added(int)"></A>
+ <nobr><code>Tab</code> <A HREF="../../../../reference/android/app/ActionBar.Tab.html#setContentDescription(int)" target="_top"><code>setContentDescription</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.Tab.setContentDescription_added(java.lang.CharSequence)"></A>
+ <nobr><code>Tab</code> <A HREF="../../../../reference/android/app/ActionBar.Tab.html#setContentDescription(java.lang.CharSequence)" target="_top"><code>setContentDescription</code></A>(<code>CharSequence</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html
new file mode 100644
index 0000000..0ca869c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.ActionBar
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/ActionBar.html" target="_top"><font size="+2"><code>ActionBar</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.getThemedContext_added()"></A>
+ <nobr><code>Context</code> <A HREF="../../../../reference/android/app/ActionBar.html#getThemedContext()" target="_top"><code>getThemedContext</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setHomeButtonEnabled_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setHomeButtonEnabled(boolean)" target="_top"><code>setHomeButtonEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setIcon_added(android.graphics.drawable.Drawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setIcon(android.graphics.drawable.Drawable)" target="_top"><code>setIcon</code></A>(<code>Drawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setIcon_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setIcon(int)" target="_top"><code>setIcon</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setLogo_added(android.graphics.drawable.Drawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setLogo(android.graphics.drawable.Drawable)" target="_top"><code>setLogo</code></A>(<code>Drawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setLogo_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setLogo(int)" target="_top"><code>setLogo</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setSplitBackgroundDrawable_added(android.graphics.drawable.Drawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setSplitBackgroundDrawable(android.graphics.drawable.Drawable)" target="_top"><code>setSplitBackgroundDrawable</code></A>(<code>Drawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.ActionBar.setStackedBackgroundDrawable_added(android.graphics.drawable.Drawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/ActionBar.html#setStackedBackgroundDrawable(android.graphics.drawable.Drawable)" target="_top"><code>setStackedBackgroundDrawable</code></A>(<code>Drawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Activity.html b/docs/html/sdk/api_diff/14/changes/android.app.Activity.html
new file mode 100644
index 0000000..7e5e032
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Activity.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.Activity
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/Activity.html" target="_top"><font size="+2"><code>Activity</code></font></A>
+</H2>
+<p><font xsize="+1">Removed interface <code>android.content.ComponentCallbacks</code>.<br> Added interface <code>android.content.ComponentCallbacks2</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Activity.onTrimMemory_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Activity.html#onTrimMemory(int)" target="_top"><code>onTrimMemory</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html b/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html
new file mode 100644
index 0000000..b3786dea
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.AlertDialog
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/AlertDialog.html" target="_top"><font size="+2"><code>AlertDialog</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/app/AlertDialog.html#THEME_DEVICE_DEFAULT_DARK" target="_top"><code>THEME_DEVICE_DEFAULT_DARK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/app/AlertDialog.html#THEME_DEVICE_DEFAULT_LIGHT" target="_top"><code>THEME_DEVICE_DEFAULT_LIGHT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Application.html b/docs/html/sdk/api_diff/14/changes/android.app.Application.html
new file mode 100644
index 0000000..da105de
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Application.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.Application
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/Application.html" target="_top"><font size="+2"><code>Application</code></font></A>
+</H2>
+<p><font xsize="+1">Removed interface <code>android.content.ComponentCallbacks</code>.<br> Added interface <code>android.content.ComponentCallbacks2</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Application.onTrimMemory_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Application.html#onTrimMemory(int)" target="_top"><code>onTrimMemory</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Application.registerActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)" target="_top"><code>registerActivityLifecycleCallbacks</code></A>(<code>ActivityLifecycleCallbacks</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Application.unregisterActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Application.html#unregisterActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)" target="_top"><code>unregisterActivityLifecycleCallbacks</code></A>(<code>ActivityLifecycleCallbacks</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html
new file mode 100644
index 0000000..2d85f0c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.Fragment
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/Fragment.html" target="_top"><font size="+2"><code>Fragment</code></font></A>
+</H2>
+<p><font xsize="+1">Removed interface <code>android.content.ComponentCallbacks</code>.<br> Added interface <code>android.content.ComponentCallbacks2</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Fragment.onTrimMemory_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Fragment.html#onTrimMemory(int)" target="_top"><code>onTrimMemory</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Fragment.setMenuVisibility_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Fragment.html#setMenuVisibility(boolean)" target="_top"><code>setMenuVisibility</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
new file mode 100644
index 0000000..6db6763
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.FragmentManager.BackStackEntry
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.app.<A HREF="../../../../reference/android/app/FragmentManager.BackStackEntry.html" target="_top"><font size="+2"><code>FragmentManager.BackStackEntry</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.FragmentManager.BackStackEntry.getName_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/app/FragmentManager.BackStackEntry.html#getName()" target="_top"><code>getName</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html
new file mode 100644
index 0000000..bb11aba
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.FragmentManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/FragmentManager.html" target="_top"><font size="+2"><code>FragmentManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.FragmentManager.invalidateOptionsMenu_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/FragmentManager.html#invalidateOptionsMenu()" target="_top"><code>invalidateOptionsMenu</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html b/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html
new file mode 100644
index 0000000..d9fc7f4
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.Notification.Builder
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/Notification.Builder.html" target="_top"><font size="+2"><code>Notification.Builder</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Notification.Builder.setProgress_added(int, int, boolean)"></A>
+ <nobr><code>Builder</code> <A HREF="../../../../reference/android/app/Notification.Builder.html#setProgress(int, int, boolean)" target="_top"><code>setProgress</code></A>(<code>int,</nobr> int<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html
new file mode 100644
index 0000000..e1ac14b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.PendingIntent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/PendingIntent.html" target="_top"><font size="+2"><code>PendingIntent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.PendingIntent.send_added(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/PendingIntent.html#send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String)" target="_top"><code>send</code></A>(<code>Context,</nobr> int<nobr>,</nobr> Intent<nobr>,</nobr> OnFinished<nobr>,</nobr> Handler<nobr>,</nobr> String<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html
new file mode 100644
index 0000000..c2ad438
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.SearchManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/SearchManager.html" target="_top"><font size="+2"><code>SearchManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.SearchManager.EXTRA_WEB_SEARCH_PENDINGINTENT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/app/SearchManager.html#EXTRA_WEB_SEARCH_PENDINGINTENT" target="_top"><code>EXTRA_WEB_SEARCH_PENDINGINTENT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/app/SearchManager.html#SUGGEST_COLUMN_LAST_ACCESS_HINT" target="_top"><code>SUGGEST_COLUMN_LAST_ACCESS_HINT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Service.html b/docs/html/sdk/api_diff/14/changes/android.app.Service.html
new file mode 100644
index 0000000..a56592b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Service.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.Service
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/Service.html" target="_top"><font size="+2"><code>Service</code></font></A>
+</H2>
+<p><font xsize="+1">Removed interface <code>android.content.ComponentCallbacks</code>.<br> Added interface <code>android.content.ComponentCallbacks2</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Service.onTaskRemoved_added(android.content.Intent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Service.html#onTaskRemoved(android.content.Intent)" target="_top"><code>onTaskRemoved</code></A>(<code>Intent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.Service.onTrimMemory_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/Service.html#onTrimMemory(int)" target="_top"><code>onTrimMemory</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html
new file mode 100644
index 0000000..dbe8e9f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.WallpaperManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/WallpaperManager.html" target="_top"><font size="+2"><code>WallpaperManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.forgetLoadedWallpaper_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#forgetLoadedWallpaper()" target="_top"><code>forgetLoadedWallpaper</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html b/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
new file mode 100644
index 0000000..73a430d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.admin.DeviceAdminInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.admin.<A HREF="../../../../reference/android/app/admin/DeviceAdminInfo.html" target="_top"><font size="+2"><code>DeviceAdminInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.admin.DeviceAdminInfo.USES_POLICY_DISABLE_CAMERA"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/app/admin/DeviceAdminInfo.html#USES_POLICY_DISABLE_CAMERA" target="_top"><code>USES_POLICY_DISABLE_CAMERA</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
new file mode 100644
index 0000000..03febd7
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.admin.DevicePolicyManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.admin.<A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html" target="_top"><font size="+2"><code>DevicePolicyManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.admin.DevicePolicyManager.getCameraDisabled_added(android.content.ComponentName)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#getCameraDisabled(android.content.ComponentName)" target="_top"><code>getCameraDisabled</code></A>(<code>ComponentName</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.admin.DevicePolicyManager.setCameraDisabled_added(android.content.ComponentName, boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#setCameraDisabled(android.content.ComponentName, boolean)" target="_top"><code>setCameraDisabled</code></A>(<code>ComponentName,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#PASSWORD_QUALITY_BIOMETRIC_WEAK" target="_top"><code>PASSWORD_QUALITY_BIOMETRIC_WEAK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html b/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
new file mode 100644
index 0000000..ff28b33
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.backup.BackupAgent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.backup.<A HREF="../../../../reference/android/app/backup/BackupAgent.html" target="_top"><font size="+2"><code>BackupAgent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.backup.BackupAgent.fullBackupFile_added(java.io.File, android.app.backup.FullBackupDataOutput)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/backup/BackupAgent.html#fullBackupFile(java.io.File, android.app.backup.FullBackupDataOutput)" target="_top"><code>fullBackupFile</code></A>(<code>File,</nobr> FullBackupDataOutput<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.backup.BackupAgent.onFullBackup_added(android.app.backup.FullBackupDataOutput)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/backup/BackupAgent.html#onFullBackup(android.app.backup.FullBackupDataOutput)" target="_top"><code>onFullBackup</code></A>(<code>FullBackupDataOutput</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.backup.BackupAgent.onRestoreFile_added(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/backup/BackupAgent.html#onRestoreFile(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long)" target="_top"><code>onRestoreFile</code></A>(<code>ParcelFileDescriptor,</nobr> long<nobr>,</nobr> File<nobr>,</nobr> int<nobr>,</nobr> long<nobr>,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.backup.BackupAgent.TYPE_DIRECTORY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/app/backup/BackupAgent.html#TYPE_DIRECTORY" target="_top"><code>TYPE_DIRECTORY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.backup.BackupAgent.TYPE_FILE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/app/backup/BackupAgent.html#TYPE_FILE" target="_top"><code>TYPE_FILE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html b/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
new file mode 100644
index 0000000..0e93fa5
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.appwidget.AppWidgetProviderInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.appwidget.<A HREF="../../../../reference/android/appwidget/AppWidgetProviderInfo.html" target="_top"><font size="+2"><code>AppWidgetProviderInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.appwidget.AppWidgetProviderInfo.minResizeHeight"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/appwidget/AppWidgetProviderInfo.html#minResizeHeight" target="_top"><code>minResizeHeight</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.appwidget.AppWidgetProviderInfo.minResizeWidth"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/appwidget/AppWidgetProviderInfo.html#minResizeWidth" target="_top"><code>minResizeWidth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
new file mode 100644
index 0000000..7785223
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.bluetooth.BluetoothAdapter
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.bluetooth.<A HREF="../../../../reference/android/bluetooth/BluetoothAdapter.html" target="_top"><font size="+2"><code>BluetoothAdapter</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.bluetooth.BluetoothAdapter.getProfileConnectionState_added(int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/bluetooth/BluetoothAdapter.html#getProfileConnectionState(int)" target="_top"><code>getProfileConnectionState</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
new file mode 100644
index 0000000..0d25fb1
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.bluetooth.BluetoothProfile
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.bluetooth.<A HREF="../../../../reference/android/bluetooth/BluetoothProfile.html" target="_top"><font size="+2"><code>BluetoothProfile</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.bluetooth.BluetoothProfile.HEALTH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/bluetooth/BluetoothProfile.html#HEALTH" target="_top"><code>HEALTH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
new file mode 100644
index 0000000..d4f827b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.bluetooth.BluetoothSocket
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.bluetooth.<A HREF="../../../../reference/android/bluetooth/BluetoothSocket.html" target="_top"><font size="+2"><code>BluetoothSocket</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.bluetooth.BluetoothSocket.isConnected_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/bluetooth/BluetoothSocket.html#isConnected()" target="_top"><code>isConnected</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html
new file mode 100644
index 0000000..48176b5
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.ContentProvider
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.<A HREF="../../../../reference/android/content/ContentProvider.html" target="_top"><font size="+2"><code>ContentProvider</code></font></A>
+</H2>
+<p><font xsize="+1">Removed interface <code>android.content.ComponentCallbacks</code>.<br> Added interface <code>android.content.ComponentCallbacks2</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.ContentProvider.onTrimMemory_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/ContentProvider.html#onTrimMemory(int)" target="_top"><code>onTrimMemory</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.Context.html b/docs/html/sdk/api_diff/14/changes/android.content.Context.html
new file mode 100644
index 0000000..641b64e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.Context.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.Context
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.<A HREF="../../../../reference/android/content/Context.html" target="_top"><font size="+2"><code>Context</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.registerComponentCallbacks_added(android.content.ComponentCallbacks)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/Context.html#registerComponentCallbacks(android.content.ComponentCallbacks)" target="_top"><code>registerComponentCallbacks</code></A>(<code>ComponentCallbacks</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.unregisterComponentCallbacks_added(android.content.ComponentCallbacks)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/Context.html#unregisterComponentCallbacks(android.content.ComponentCallbacks)" target="_top"><code>unregisterComponentCallbacks</code></A>(<code>ComponentCallbacks</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.BIND_ABOVE_CLIENT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/Context.html#BIND_ABOVE_CLIENT" target="_top"><code>BIND_ABOVE_CLIENT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.BIND_ADJUST_WITH_ACTIVITY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/Context.html#BIND_ADJUST_WITH_ACTIVITY" target="_top"><code>BIND_ADJUST_WITH_ACTIVITY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.BIND_ALLOW_OOM_MANAGEMENT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/Context.html#BIND_ALLOW_OOM_MANAGEMENT" target="_top"><code>BIND_ALLOW_OOM_MANAGEMENT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.BIND_IMPORTANT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/Context.html#BIND_IMPORTANT" target="_top"><code>BIND_IMPORTANT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.BIND_WAIVE_PRIORITY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/Context.html#BIND_WAIVE_PRIORITY" target="_top"><code>BIND_WAIVE_PRIORITY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.TEXT_SERVICES_MANAGER_SERVICE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Context.html#TEXT_SERVICES_MANAGER_SERVICE" target="_top"><code>TEXT_SERVICES_MANAGER_SERVICE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Context.WIFI_P2P_SERVICE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Context.html#WIFI_P2P_SERVICE" target="_top"><code>WIFI_P2P_SERVICE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.Intent.html b/docs/html/sdk/api_diff/14/changes/android.content.Intent.html
new file mode 100644
index 0000000..068fb3f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.Intent.html
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.Intent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.<A HREF="../../../../reference/android/content/Intent.html" target="_top"><font size="+2"><code>Intent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_APP_ERROR"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_APP_ERROR" target="_top"><code>ACTION_APP_ERROR</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_INSTALL_PACKAGE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_INSTALL_PACKAGE" target="_top"><code>ACTION_INSTALL_PACKAGE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_MANAGE_NETWORK_USAGE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_MANAGE_NETWORK_USAGE" target="_top"><code>ACTION_MANAGE_NETWORK_USAGE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_PACKAGE_FULLY_REMOVED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_PACKAGE_FULLY_REMOVED" target="_top"><code>ACTION_PACKAGE_FULLY_REMOVED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_PACKAGE_NEEDS_VERIFICATION"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_PACKAGE_NEEDS_VERIFICATION" target="_top"><code>ACTION_PACKAGE_NEEDS_VERIFICATION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_UNINSTALL_PACKAGE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_UNINSTALL_PACKAGE" target="_top"><code>ACTION_UNINSTALL_PACKAGE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_ALLOW_REPLACE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_ALLOW_REPLACE" target="_top"><code>EXTRA_ALLOW_REPLACE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_BUG_REPORT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_BUG_REPORT" target="_top"><code>EXTRA_BUG_REPORT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_INSTALLER_PACKAGE_NAME"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_INSTALLER_PACKAGE_NAME" target="_top"><code>EXTRA_INSTALLER_PACKAGE_NAME</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_NOT_UNKNOWN_SOURCE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_NOT_UNKNOWN_SOURCE" target="_top"><code>EXTRA_NOT_UNKNOWN_SOURCE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_RETURN_RESULT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_RETURN_RESULT" target="_top"><code>EXTRA_RETURN_RESULT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_PACKAGE_INSTALL"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_PACKAGE_INSTALL" target="_top"><code>ACTION_PACKAGE_INSTALL</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_UMS_CONNECTED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_UMS_CONNECTED" target="_top"><code>ACTION_UMS_CONNECTED</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_UMS_DISCONNECTED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_UMS_DISCONNECTED" target="_top"><code>ACTION_UMS_DISCONNECTED</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html b/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html
new file mode 100644
index 0000000..a6e751b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.IntentSender
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.<A HREF="../../../../reference/android/content/IntentSender.html" target="_top"><font size="+2"><code>IntentSender</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.IntentSender.sendIntent_added(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/IntentSender.html#sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String)" target="_top"><code>sendIntent</code></A>(<code>Context,</nobr> int<nobr>,</nobr> Intent<nobr>,</nobr> OnFinished<nobr>,</nobr> Handler<nobr>,</nobr> String<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html b/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
new file mode 100644
index 0000000..030de82
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.SyncAdapterType
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.<A HREF="../../../../reference/android/content/SyncAdapterType.html" target="_top"><font size="+2"><code>SyncAdapterType</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.SyncAdapterType.getSettingsActivity_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/SyncAdapterType.html#getSettingsActivity()" target="_top"><code>getSettingsActivity</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
new file mode 100644
index 0000000..95d4f9b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm.ActivityInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.pm.<A HREF="../../../../reference/android/content/pm/ActivityInfo.html" target="_top"><font size="+2"><code>ActivityInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/ActivityInfo.html#UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" target="_top"><code>UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.ActivityInfo.uiOptions"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/ActivityInfo.html#uiOptions" target="_top"><code>uiOptions</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
new file mode 100644
index 0000000..cd3c18d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm.ApplicationInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.pm.<A HREF="../../../../reference/android/content/pm/ApplicationInfo.html" target="_top"><font size="+2"><code>ApplicationInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.ApplicationInfo.uiOptions"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/ApplicationInfo.html#uiOptions" target="_top"><code>uiOptions</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
new file mode 100644
index 0000000..62f35f4
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm.PackageManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.pm.<A HREF="../../../../reference/android/content/pm/PackageManager.html" target="_top"><font size="+2"><code>PackageManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.verifyPendingInstall_added(int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#verifyPendingInstall(int, int)" target="_top"><code>verifyPendingInstall</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#COMPONENT_ENABLED_STATE_DISABLED_USER" target="_top"><code>COMPONENT_ENABLED_STATE_DISABLED_USER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.EXTRA_VERIFICATION_ID"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#EXTRA_VERIFICATION_ID" target="_top"><code>EXTRA_VERIFICATION_ID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_WIFI_DIRECT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_WIFI_DIRECT" target="_top"><code>FEATURE_WIFI_DIRECT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.VERIFICATION_ALLOW"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#VERIFICATION_ALLOW" target="_top"><code>VERIFICATION_ALLOW</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.VERIFICATION_REJECT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#VERIFICATION_REJECT" target="_top"><code>VERIFICATION_REJECT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
new file mode 100644
index 0000000..faac19e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm.PackageStats
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.pm.<A HREF="../../../../reference/android/content/pm/PackageStats.html" target="_top"><font size="+2"><code>PackageStats</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageStats.externalCodeSize"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/content/pm/PackageStats.html#externalCodeSize" target="_top"><code>externalCodeSize</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
new file mode 100644
index 0000000..6b9f78a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm.ServiceInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.pm.<A HREF="../../../../reference/android/content/pm/ServiceInfo.html" target="_top"><font size="+2"><code>ServiceInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.ServiceInfo.FLAG_STOP_WITH_TASK"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/ServiceInfo.html#FLAG_STOP_WITH_TASK" target="_top"><code>FLAG_STOP_WITH_TASK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.ServiceInfo.flags"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/pm/ServiceInfo.html#flags" target="_top"><code>flags</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
new file mode 100644
index 0000000..d7b09f3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.database.sqlite.SQLiteOpenHelper
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.database.sqlite.<A HREF="../../../../reference/android/database/sqlite/SQLiteOpenHelper.html" target="_top"><font size="+2"><code>SQLiteOpenHelper</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.database.sqlite.SQLiteOpenHelper.getDatabaseName_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/database/sqlite/SQLiteOpenHelper.html#getDatabaseName()" target="_top"><code>getDatabaseName</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
new file mode 100644
index 0000000..02bdeee
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.database.sqlite.SQLiteQueryBuilder
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.database.sqlite.<A HREF="../../../../reference/android/database/sqlite/SQLiteQueryBuilder.html" target="_top"><font size="+2"><code>SQLiteQueryBuilder</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.database.sqlite.SQLiteQueryBuilder.setStrict_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/database/sqlite/SQLiteQueryBuilder.html#setStrict(boolean)" target="_top"><code>setStrict</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html
new file mode 100644
index 0000000..8f90381
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics.Canvas
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.graphics.<A HREF="../../../../reference/android/graphics/Canvas.html" target="_top"><font size="+2"><code>Canvas</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Canvas.getMaximumBitmapHeight_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/graphics/Canvas.html#getMaximumBitmapHeight()" target="_top"><code>getMaximumBitmapHeight</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Canvas.getMaximumBitmapWidth_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/graphics/Canvas.html#getMaximumBitmapWidth()" target="_top"><code>getMaximumBitmapWidth</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html b/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html
new file mode 100644
index 0000000..1cc467f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics.Paint
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.graphics.<A HREF="../../../../reference/android/graphics/Paint.html" target="_top"><font size="+2"><code>Paint</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Paint.getHinting_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/graphics/Paint.html#getHinting()" target="_top"><code>getHinting</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Paint.setHinting_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/graphics/Paint.html#setHinting(int)" target="_top"><code>setHinting</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Paint.HINTING_OFF"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/graphics/Paint.html#HINTING_OFF" target="_top"><code>HINTING_OFF</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Paint.HINTING_ON"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/graphics/Paint.html#HINTING_ON" target="_top"><code>HINTING_ON</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html b/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html
new file mode 100644
index 0000000..62d6a96
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics.RectF
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.graphics.<A HREF="../../../../reference/android/graphics/RectF.html" target="_top"><font size="+2"><code>RectF</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.RectF.toShortString_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/graphics/RectF.html#toShortString()" target="_top"><code>toShortString</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html b/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
new file mode 100644
index 0000000..8df17da80
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics.SurfaceTexture
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.graphics.<A HREF="../../../../reference/android/graphics/SurfaceTexture.html" target="_top"><font size="+2"><code>SurfaceTexture</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.SurfaceTexture.getTimestamp_added()"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/graphics/SurfaceTexture.html#getTimestamp()" target="_top"><code>getTimestamp</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.SurfaceTexture.release_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/graphics/SurfaceTexture.html#release()" target="_top"><code>release</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
new file mode 100644
index 0000000..890a4aa
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
@@ -0,0 +1,235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.hardware.Camera.Parameters
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.hardware.<A HREF="../../../../reference/android/hardware/Camera.Parameters.html" target="_top"><font size="+2"><code>Camera.Parameters</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getAutoExposureLock_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getAutoExposureLock()" target="_top"><code>getAutoExposureLock</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getAutoWhiteBalanceLock_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getAutoWhiteBalanceLock()" target="_top"><code>getAutoWhiteBalanceLock</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getFocusAreas_added()"></A>
+ <nobr><code>List<Area></code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getFocusAreas()" target="_top"><code>getFocusAreas</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getMaxNumDetectedFaces_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getMaxNumDetectedFaces()" target="_top"><code>getMaxNumDetectedFaces</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getMaxNumFocusAreas_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getMaxNumFocusAreas()" target="_top"><code>getMaxNumFocusAreas</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getMaxNumMeteringAreas_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getMaxNumMeteringAreas()" target="_top"><code>getMaxNumMeteringAreas</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.getMeteringAreas_added()"></A>
+ <nobr><code>List<Area></code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#getMeteringAreas()" target="_top"><code>getMeteringAreas</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.isAutoExposureLockSupported_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#isAutoExposureLockSupported()" target="_top"><code>isAutoExposureLockSupported</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.isAutoWhiteBalanceLockSupported_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#isAutoWhiteBalanceLockSupported()" target="_top"><code>isAutoWhiteBalanceLockSupported</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.isVideoSnapshotSupported_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#isVideoSnapshotSupported()" target="_top"><code>isVideoSnapshotSupported</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.setAutoExposureLock_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)" target="_top"><code>setAutoExposureLock</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.setAutoWhiteBalanceLock_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#setAutoWhiteBalanceLock(boolean)" target="_top"><code>setAutoWhiteBalanceLock</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.setFocusAreas_added(java.util.List<android.hardware.Camera.Area>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#setFocusAreas(java.util.List<android.hardware.Camera.Area>)" target="_top"><code>setFocusAreas</code></A>(<code>List<Area></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.setMeteringAreas_added(java.util.List<android.hardware.Camera.Area>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#setMeteringAreas(java.util.List<android.hardware.Camera.Area>)" target="_top"><code>setMeteringAreas</code></A>(<code>List<Area></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.setRecordingHint_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#setRecordingHint(boolean)" target="_top"><code>setRecordingHint</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/hardware/Camera.Parameters.html#FOCUS_MODE_CONTINUOUS_PICTURE" target="_top"><code>FOCUS_MODE_CONTINUOUS_PICTURE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html
new file mode 100644
index 0000000..1d6907d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.hardware.Camera
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.hardware.<A HREF="../../../../reference/android/hardware/Camera.html" target="_top"><font size="+2"><code>Camera</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.setFaceDetectionListener_added(android.hardware.Camera.FaceDetectionListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.html#setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener)" target="_top"><code>setFaceDetectionListener</code></A>(<code>FaceDetectionListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.startFaceDetection_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.html#startFaceDetection()" target="_top"><code>startFaceDetection</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.stopFaceDetection_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/hardware/Camera.html#stopFaceDetection()" target="_top"><code>stopFaceDetection</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.ACTION_NEW_PICTURE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/hardware/Camera.html#ACTION_NEW_PICTURE" target="_top"><code>ACTION_NEW_PICTURE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Camera.ACTION_NEW_VIDEO"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/hardware/Camera.html#ACTION_NEW_VIDEO" target="_top"><code>ACTION_NEW_VIDEO</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html b/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html
new file mode 100644
index 0000000..b56e11c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.hardware.Sensor
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.hardware.<A HREF="../../../../reference/android/hardware/Sensor.html" target="_top"><font size="+2"><code>Sensor</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Sensor.TYPE_AMBIENT_TEMPERATURE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/hardware/Sensor.html#TYPE_AMBIENT_TEMPERATURE" target="_top"><code>TYPE_AMBIENT_TEMPERATURE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Sensor.TYPE_RELATIVE_HUMIDITY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/hardware/Sensor.html#TYPE_RELATIVE_HUMIDITY" target="_top"><code>TYPE_RELATIVE_HUMIDITY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware.Sensor.TYPE_TEMPERATURE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/hardware/Sensor.html#TYPE_TEMPERATURE" target="_top"><code>TYPE_TEMPERATURE</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
new file mode 100644
index 0000000..d2b2a7a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.inputmethodservice.InputMethodService.InputMethodSessionImpl
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.inputmethodservice.<A HREF="../../../../reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html" target="_top"><font size="+2"><code>InputMethodService.InputMethodSessionImpl</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.viewClicked_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html#viewClicked(boolean)" target="_top"><code>viewClicked</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
new file mode 100644
index 0000000..c3dcdc5
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.inputmethodservice.InputMethodService
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.inputmethodservice.<A HREF="../../../../reference/android/inputmethodservice/InputMethodService.html" target="_top"><font size="+2"><code>InputMethodService</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.inputmethodservice.InputMethodService.onViewClicked_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/inputmethodservice/InputMethodService.html#onViewClicked(boolean)" target="_top"><code>onViewClicked</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html
new file mode 100644
index 0000000..7b68d0c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media.AudioManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.media.<A HREF="../../../../reference/android/media/AudioManager.html" target="_top"><font size="+2"><code>AudioManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.registerRemoteControlClient_added(android.media.RemoteControlClient)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/AudioManager.html#registerRemoteControlClient(android.media.RemoteControlClient)" target="_top"><code>registerRemoteControlClient</code></A>(<code>RemoteControlClient</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.unregisterRemoteControlClient_added(android.media.RemoteControlClient)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/AudioManager.html#unregisterRemoteControlClient(android.media.RemoteControlClient)" target="_top"><code>unregisterRemoteControlClient</code></A>(<code>RemoteControlClient</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.isWiredHeadsetOn_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/media/AudioManager.html#isWiredHeadsetOn()" target="_top"><code>isWiredHeadsetOn</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/media/AudioManager.html#ACTION_SCO_AUDIO_STATE_UPDATED" target="_top"><code>ACTION_SCO_AUDIO_STATE_UPDATED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/media/AudioManager.html#EXTRA_SCO_AUDIO_PREVIOUS_STATE" target="_top"><code>EXTRA_SCO_AUDIO_PREVIOUS_STATE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.SCO_AUDIO_STATE_CONNECTING"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/AudioManager.html#SCO_AUDIO_STATE_CONNECTING" target="_top"><code>SCO_AUDIO_STATE_CONNECTING</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/media/AudioManager.html#ACTION_SCO_AUDIO_STATE_CHANGED" target="_top"><code>ACTION_SCO_AUDIO_STATE_CHANGED</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html b/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
new file mode 100644
index 0000000..5f589b9
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media.MediaMetadataRetriever
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.media.<A HREF="../../../../reference/android/media/MediaMetadataRetriever.html" target="_top"><font size="+2"><code>MediaMetadataRetriever</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaMetadataRetriever.setDataSource_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaMetadataRetriever.html#setDataSource(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" target="_top"><code>setDataSource</code></A>(<code>String,</nobr> Map<String<nobr>,</nobr> String><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaMetadataRetriever.METADATA_KEY_BITRATE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaMetadataRetriever.html#METADATA_KEY_BITRATE" target="_top"><code>METADATA_KEY_BITRATE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaMetadataRetriever.html#METADATA_KEY_HAS_AUDIO" target="_top"><code>METADATA_KEY_HAS_AUDIO</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaMetadataRetriever.html#METADATA_KEY_HAS_VIDEO" target="_top"><code>METADATA_KEY_HAS_VIDEO</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaMetadataRetriever.html#METADATA_KEY_VIDEO_HEIGHT" target="_top"><code>METADATA_KEY_VIDEO_HEIGHT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaMetadataRetriever.html#METADATA_KEY_VIDEO_WIDTH" target="_top"><code>METADATA_KEY_VIDEO_WIDTH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html
new file mode 100644
index 0000000..ebdab5c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media.MediaPlayer
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.media.<A HREF="../../../../reference/android/media/MediaPlayer.html" target="_top"><font size="+2"><code>MediaPlayer</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaPlayer.setDataSource_removed(java.lang.String)"></A>
+ <nobr><code>void</code> setDataSource(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaPlayer.setDataSource_added(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaPlayer.html#setDataSource(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>)" target="_top"><code>setDataSource</code></A>(<code>Context,</nobr> Uri<nobr>,</nobr> Map<String<nobr>,</nobr> String><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaPlayer.setDataSource_added(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaPlayer.html#setDataSource(java.lang.String)" target="_top"><code>setDataSource</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaPlayer.setSurface_added(android.view.Surface)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaPlayer.html#setSurface(android.view.Surface)" target="_top"><code>setSurface</code></A>(<code>Surface</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html
new file mode 100644
index 0000000..6f2405f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media.MediaRecorder
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.media.<A HREF="../../../../reference/android/media/MediaRecorder.html" target="_top"><font size="+2"><code>MediaRecorder</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaRecorder.setLocation_added(float, float)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaRecorder.html#setLocation(float, float)" target="_top"><code>setLocation</code></A>(<code>float,</nobr> float<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.io.FileDescriptor)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaRecorder.html#setAuxiliaryOutputFile(java.io.FileDescriptor)" target="_top"><code>setAuxiliaryOutputFile</code></A>(<code>FileDescriptor</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/media/MediaRecorder.html#setAuxiliaryOutputFile(java.lang.String)" target="_top"><code>setAuxiliaryOutputFile</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
new file mode 100644
index 0000000..f1aaddc
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.ConnectivityManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.net.<A HREF="../../../../reference/android/net/ConnectivityManager.html" target="_top"><font size="+2"><code>ConnectivityManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.ConnectivityManager.getBackgroundDataSetting_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/net/ConnectivityManager.html#getBackgroundDataSetting()" target="_top"><code>getBackgroundDataSetting</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.ConnectivityManager.TYPE_DUMMY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/net/ConnectivityManager.html#TYPE_DUMMY" target="_top"><code>TYPE_DUMMY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.ConnectivityManager.EXTRA_NETWORK_INFO"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/net/ConnectivityManager.html#EXTRA_NETWORK_INFO" target="_top"><code>EXTRA_NETWORK_INFO</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html b/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
new file mode 100644
index 0000000..b57b309
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.SSLCertificateSocketFactory
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.net.<A HREF="../../../../reference/android/net/SSLCertificateSocketFactory.html" target="_top"><font size="+2"><code>SSLCertificateSocketFactory</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.SSLCertificateSocketFactory.setKeyManagers_added(javax.net.ssl.KeyManager[])"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/SSLCertificateSocketFactory.html#setKeyManagers(javax.net.ssl.KeyManager[])" target="_top"><code>setKeyManagers</code></A>(<code>KeyManager[]</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.SSLCertificateSocketFactory.setTrustManagers_added(javax.net.ssl.TrustManager[])"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/SSLCertificateSocketFactory.html#setTrustManagers(javax.net.ssl.TrustManager[])" target="_top"><code>setTrustManagers</code></A>(<code>TrustManager[]</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html b/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html
new file mode 100644
index 0000000..55c729a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.TrafficStats
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.net.<A HREF="../../../../reference/android/net/TrafficStats.html" target="_top"><font size="+2"><code>TrafficStats</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.clearThreadStatsTag_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/TrafficStats.html#clearThreadStatsTag()" target="_top"><code>clearThreadStatsTag</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.getThreadStatsTag_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/net/TrafficStats.html#getThreadStatsTag()" target="_top"><code>getThreadStatsTag</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.incrementOperationCount_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/TrafficStats.html#incrementOperationCount(int)" target="_top"><code>incrementOperationCount</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.incrementOperationCount_added(int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/TrafficStats.html#incrementOperationCount(int, int)" target="_top"><code>incrementOperationCount</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.setThreadStatsTag_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/TrafficStats.html#setThreadStatsTag(int)" target="_top"><code>setThreadStatsTag</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.tagSocket_added(java.net.Socket)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/TrafficStats.html#tagSocket(java.net.Socket)" target="_top"><code>tagSocket</code></A>(<code>Socket</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.TrafficStats.untagSocket_added(java.net.Socket)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/net/TrafficStats.html#untagSocket(java.net.Socket)" target="_top"><code>untagSocket</code></A>(<code>Socket</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html b/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html
new file mode 100644
index 0000000..6b9c440
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.http.SslError
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.net.http.<A HREF="../../../../reference/android/net/http/SslError.html" target="_top"><font size="+2"><code>SslError</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.ctor_added(int, android.net.http.SslCertificate, java.lang.String)"></A>
+ <nobr><A HREF="../../../../reference/android/net/http/SslError.html#SslError(int, android.net.http.SslCertificate, java.lang.String)" target="_top"><code>SslError</code></A>(<code>int,</nobr> SslCertificate<nobr>,</nobr> String<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.ctor_added(int, java.security.cert.X509Certificate, java.lang.String)"></A>
+ <nobr><A HREF="../../../../reference/android/net/http/SslError.html#SslError(int, java.security.cert.X509Certificate, java.lang.String)" target="_top"><code>SslError</code></A>(<code>int,</nobr> X509Certificate<nobr>,</nobr> String<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.ctor_changed(int, android.net.http.SslCertificate)"></A>
+ <nobr><A HREF="../../../../reference/android/net/http/SslError.html#SslError(int, android.net.http.SslCertificate)" target="_top"><code>SslError</code></A>(<code>int,</nobr> SslCertificate<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.ctor_changed(int, java.security.cert.X509Certificate)"></A>
+ <nobr><A HREF="../../../../reference/android/net/http/SslError.html#SslError(int, java.security.cert.X509Certificate)" target="_top"><code>SslError</code></A>(<code>int,</nobr> X509Certificate<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.getUrl_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/net/http/SslError.html#getUrl()" target="_top"><code>getUrl</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.SSL_DATE_INVALID"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/net/http/SslError.html#SSL_DATE_INVALID" target="_top"><code>SSL_DATE_INVALID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.SSL_INVALID"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/net/http/SslError.html#SSL_INVALID" target="_top"><code>SSL_INVALID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http.SslError.SSL_MAX_ERROR"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/net/http/SslError.html#SSL_MAX_ERROR" target="_top"><code>SSL_MAX_ERROR</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Changed in value from 4 to 6. <b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html b/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
new file mode 100644
index 0000000..d4e2168
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.wifi.WifiManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.net.wifi.<A HREF="../../../../reference/android/net/wifi/WifiManager.html" target="_top"><font size="+2"><code>WifiManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.wifi.WifiManager.EXTRA_WIFI_INFO"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/net/wifi/WifiManager.html#EXTRA_WIFI_INFO" target="_top"><code>EXTRA_WIFI_INFO</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html b/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
new file mode 100644
index 0000000..8fea7bb
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.NdefRecord
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.<A HREF="../../../../reference/android/nfc/NdefRecord.html" target="_top"><font size="+2"><code>NdefRecord</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NdefRecord.createApplicationRecord_added(java.lang.String)"></A>
+ <nobr><code>NdefRecord</code> <A HREF="../../../../reference/android/nfc/NdefRecord.html#createApplicationRecord(java.lang.String)" target="_top"><code>createApplicationRecord</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NdefRecord.createUri_added(android.net.Uri)"></A>
+ <nobr><code>NdefRecord</code> <A HREF="../../../../reference/android/nfc/NdefRecord.html#createUri(android.net.Uri)" target="_top"><code>createUri</code></A>(<code>Uri</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NdefRecord.createUri_added(java.lang.String)"></A>
+ <nobr><code>NdefRecord</code> <A HREF="../../../../reference/android/nfc/NdefRecord.html#createUri(java.lang.String)" target="_top"><code>createUri</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html b/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
new file mode 100644
index 0000000..ef09aa0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.NfcAdapter
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.<A HREF="../../../../reference/android/nfc/NfcAdapter.html" target="_top"><font size="+2"><code>NfcAdapter</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NfcAdapter.setNdefPushMessage_added(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/NfcAdapter.html#setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...)" target="_top"><code>setNdefPushMessage</code></A>(<code>NdefMessage,</nobr> Activity<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NfcAdapter.setNdefPushMessageCallback_added(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/NfcAdapter.html#setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...)" target="_top"><code>setNdefPushMessageCallback</code></A>(<code>CreateNdefMessageCallback,</nobr> Activity<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NfcAdapter.setOnNdefPushCompleteCallback_added(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/NfcAdapter.html#setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...)" target="_top"><code>setOnNdefPushCompleteCallback</code></A>(<code>OnNdefPushCompleteCallback,</nobr> Activity<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NfcAdapter.disableForegroundNdefPush_changed(android.app.Activity)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/NfcAdapter.html#disableForegroundNdefPush(android.app.Activity)" target="_top"><code>disableForegroundNdefPush</code></A>(<code>Activity</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.NfcAdapter.enableForegroundNdefPush_changed(android.app.Activity, android.nfc.NdefMessage)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/NfcAdapter.html#enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage)" target="_top"><code>enableForegroundNdefPush</code></A>(<code>Activity,</nobr> NdefMessage<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
new file mode 100644
index 0000000..2966854
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.IsoDep
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/IsoDep.html" target="_top"><font size="+2"><code>IsoDep</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.IsoDep.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/IsoDep.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.IsoDep.getTimeout_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/IsoDep.html#getTimeout()" target="_top"><code>getTimeout</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
new file mode 100644
index 0000000..c682df0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.MifareClassic
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/MifareClassic.html" target="_top"><font size="+2"><code>MifareClassic</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.MifareClassic.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/MifareClassic.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.MifareClassic.getTimeout_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/MifareClassic.html#getTimeout()" target="_top"><code>getTimeout</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.MifareClassic.setTimeout_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/tech/MifareClassic.html#setTimeout(int)" target="_top"><code>setTimeout</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
new file mode 100644
index 0000000..31e0903
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.MifareUltralight
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/MifareUltralight.html" target="_top"><font size="+2"><code>MifareUltralight</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.MifareUltralight.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/MifareUltralight.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.MifareUltralight.getTimeout_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/MifareUltralight.html#getTimeout()" target="_top"><code>getTimeout</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.MifareUltralight.setTimeout_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/tech/MifareUltralight.html#setTimeout(int)" target="_top"><code>setTimeout</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
new file mode 100644
index 0000000..7213d86
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.NfcA
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/NfcA.html" target="_top"><font size="+2"><code>NfcA</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcA.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/NfcA.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcA.getTimeout_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/NfcA.html#getTimeout()" target="_top"><code>getTimeout</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcA.setTimeout_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/tech/NfcA.html#setTimeout(int)" target="_top"><code>setTimeout</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
new file mode 100644
index 0000000..188e4ff
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.NfcB
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/NfcB.html" target="_top"><font size="+2"><code>NfcB</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcB.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/NfcB.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
new file mode 100644
index 0000000..0b4cd91
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.NfcF
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/NfcF.html" target="_top"><font size="+2"><code>NfcF</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcF.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/NfcF.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcF.getTimeout_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/NfcF.html#getTimeout()" target="_top"><code>getTimeout</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcF.setTimeout_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/nfc/tech/NfcF.html#setTimeout(int)" target="_top"><code>setTimeout</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
new file mode 100644
index 0000000..d7cc5b8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech.NfcV
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.nfc.tech.<A HREF="../../../../reference/android/nfc/tech/NfcV.html" target="_top"><font size="+2"><code>NfcV</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech.NfcV.getMaxTransceiveLength_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/nfc/tech/NfcV.html#getMaxTransceiveLength()" target="_top"><code>getMaxTransceiveLength</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html b/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html
new file mode 100644
index 0000000..def8913
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.opengl.GLUtils
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.opengl.<A HREF="../../../../reference/android/opengl/GLUtils.html" target="_top"><font size="+2"><code>GLUtils</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.opengl.GLUtils.getEGLErrorString_added(int)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/opengl/GLUtils.html#getEGLErrorString(int)" target="_top"><code>getEGLErrorString</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html b/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html
new file mode 100644
index 0000000..82d7990
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.opengl.Matrix
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.opengl.<A HREF="../../../../reference/android/opengl/Matrix.html" target="_top"><font size="+2"><code>Matrix</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.opengl.Matrix.perspectiveM_added(float[], int, float, float, float, float)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/opengl/Matrix.html#perspectiveM(float[], int, float, float, float, float)" target="_top"><code>perspectiveM</code></A>(<code>float[],</nobr> int<nobr>,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> float<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
new file mode 100644
index 0000000..79e8983
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Build.VERSION_CODES
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Build.VERSION_CODES.html" target="_top"><font size="+2"><code>Build.VERSION_CODES</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/os/Build.VERSION_CODES.html#ICE_CREAM_SANDWICH" target="_top"><code>ICE_CREAM_SANDWICH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Build.html b/docs/html/sdk/api_diff/14/changes/android.os.Build.html
new file mode 100644
index 0000000..6b5d7e3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Build.html
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Build
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Build.html" target="_top"><font size="+2"><code>Build</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Build.getRadioVersion_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/os/Build.html#getRadioVersion()" target="_top"><code>getRadioVersion</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Build.RADIO"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/os/Build.html#RADIO" target="_top"><code>RADIO</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html b/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
new file mode 100644
index 0000000..0b13977
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Debug.MemoryInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Debug.MemoryInfo.html" target="_top"><font size="+2"><code>Debug.MemoryInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Debug.MemoryInfo.getOtherLabel_added(int)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/os/Debug.MemoryInfo.html#getOtherLabel(int)" target="_top"><code>getOtherLabel</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Debug.MemoryInfo.getOtherPrivateDirty_added(int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/os/Debug.MemoryInfo.html#getOtherPrivateDirty(int)" target="_top"><code>getOtherPrivateDirty</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Debug.MemoryInfo.getOtherPss_added(int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/os/Debug.MemoryInfo.html#getOtherPss(int)" target="_top"><code>getOtherPss</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Debug.MemoryInfo.getOtherSharedDirty_added(int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/os/Debug.MemoryInfo.html#getOtherSharedDirty(int)" target="_top"><code>getOtherSharedDirty</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Debug.html b/docs/html/sdk/api_diff/14/changes/android.os.Debug.html
new file mode 100644
index 0000000..24e8933
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Debug.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Debug
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Debug.html" target="_top"><font size="+2"><code>Debug</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Debug.getPss_added()"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/os/Debug.html#getPss()" target="_top"><code>getPss</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Handler.html b/docs/html/sdk/api_diff/14/changes/android.os.Handler.html
new file mode 100644
index 0000000..6dbd8d8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Handler.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Handler
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Handler.html" target="_top"><font size="+2"><code>Handler</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Handler.getMessageName_added(android.os.Message)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/os/Handler.html#getMessageName(android.os.Message)" target="_top"><code>getMessageName</code></A>(<code>Message</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Looper.html b/docs/html/sdk/api_diff/14/changes/android.os.Looper.html
new file mode 100644
index 0000000..fb617b2
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Looper.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Looper
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Looper.html" target="_top"><font size="+2"><code>Looper</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Looper.getMainLooper_changed()"></A>
+ <nobr><code>Looper</code> <A HREF="../../../../reference/android/os/Looper.html#getMainLooper()" target="_top"><code>getMainLooper</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change from final to non-final.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Looper.loop_changed()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/os/Looper.html#loop()" target="_top"><code>loop</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change from final to non-final.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Looper.myLooper_changed()"></A>
+ <nobr><code>Looper</code> <A HREF="../../../../reference/android/os/Looper.html#myLooper()" target="_top"><code>myLooper</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change from final to non-final.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Looper.myQueue_changed()"></A>
+ <nobr><code>MessageQueue</code> <A HREF="../../../../reference/android/os/Looper.html#myQueue()" target="_top"><code>myQueue</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change from final to non-final.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Looper.prepare_changed()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/os/Looper.html#prepare()" target="_top"><code>prepare</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change from final to non-final.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Looper.prepareMainLooper_changed()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/os/Looper.html#prepareMainLooper()" target="_top"><code>prepareMainLooper</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change from final to non-final.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
new file mode 100644
index 0000000..aec382d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.ParcelFileDescriptor
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/ParcelFileDescriptor.html" target="_top"><font size="+2"><code>ParcelFileDescriptor</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.ParcelFileDescriptor.dup_added()"></A>
+ <nobr><code>ParcelFileDescriptor</code> <A HREF="../../../../reference/android/os/ParcelFileDescriptor.html#dup()" target="_top"><code>dup</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.ParcelFileDescriptor.fromDatagramSocket_added(java.net.DatagramSocket)"></A>
+ <nobr><code>ParcelFileDescriptor</code> <A HREF="../../../../reference/android/os/ParcelFileDescriptor.html#fromDatagramSocket(java.net.DatagramSocket)" target="_top"><code>fromDatagramSocket</code></A>(<code>DatagramSocket</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Process.html b/docs/html/sdk/api_diff/14/changes/android.os.Process.html
new file mode 100644
index 0000000..e3a0add
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Process.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Process
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Process.html" target="_top"><font size="+2"><code>Process</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Process.supportsProcesses_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/os/Process.html#supportsProcesses()" target="_top"><code>supportsProcesses</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html b/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html
new file mode 100644
index 0000000..38a5f5d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.RecoverySystem
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/RecoverySystem.html" target="_top"><font size="+2"><code>RecoverySystem</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.RecoverySystem.rebootWipeCache_added(android.content.Context)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/os/RecoverySystem.html#rebootWipeCache(android.content.Context)" target="_top"><code>rebootWipeCache</code></A>(<code>Context</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html b/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
new file mode 100644
index 0000000..70f62de
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.preference.CheckBoxPreference
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.preference.<A HREF="../../../../reference/android/preference/CheckBoxPreference.html" target="_top"><font size="+2"><code>CheckBoxPreference</code></font></A>
+</H2>
+<p><font xsize="+1">The superclass changed from <code>android.preference.Preference</code> to <code>android.preference.TwoStatePreference</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.setSummaryOff_removed(int)"></A>
+ <nobr><code>void</code> setSummaryOff(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.setSummaryOff_removed(java.lang.CharSequence)"></A>
+ <nobr><code>void</code> setSummaryOff(<code>CharSequence</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.setSummaryOn_removed(int)"></A>
+ <nobr><code>void</code> setSummaryOn(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.setSummaryOn_removed(java.lang.CharSequence)"></A>
+ <nobr><code>void</code> setSummaryOn(<code>CharSequence</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.getDisableDependentsState_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/preference/TwoStatePreference.html#getDisableDependentsState()" target="_top"><code>getDisableDependentsState</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/preference/TwoStatePreference.html#getDisableDependentsState()" target="_top"><code>TwoStatePreference</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.getSummaryOff_changed()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/preference/TwoStatePreference.html#getSummaryOff()" target="_top"><code>getSummaryOff</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/preference/TwoStatePreference.html#getSummaryOff()" target="_top"><code>TwoStatePreference</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.getSummaryOn_changed()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/preference/TwoStatePreference.html#getSummaryOn()" target="_top"><code>getSummaryOn</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/preference/TwoStatePreference.html#getSummaryOn()" target="_top"><code>TwoStatePreference</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.isChecked_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/preference/TwoStatePreference.html#isChecked()" target="_top"><code>isChecked</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/preference/TwoStatePreference.html#isChecked()" target="_top"><code>TwoStatePreference</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.setChecked_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/preference/TwoStatePreference.html#setChecked(boolean)" target="_top"><code>setChecked</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/preference/TwoStatePreference.html#setChecked(boolean)" target="_top"><code>TwoStatePreference</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.CheckBoxPreference.setDisableDependentsState_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/preference/TwoStatePreference.html#setDisableDependentsState(boolean)" target="_top"><code>setDisableDependentsState</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/preference/TwoStatePreference.html#setDisableDependentsState(boolean)" target="_top"><code>TwoStatePreference</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html b/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html
new file mode 100644
index 0000000..28f0b436
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.preference.Preference
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.preference.<A HREF="../../../../reference/android/preference/Preference.html" target="_top"><font size="+2"><code>Preference</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.Preference.getTitleRes_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/preference/Preference.html#getTitleRes()" target="_top"><code>getTitleRes</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html b/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
new file mode 100644
index 0000000..e1938cb
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.preference.PreferenceActivity
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.preference.<A HREF="../../../../reference/android/preference/PreferenceActivity.html" target="_top"><font size="+2"><code>PreferenceActivity</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.PreferenceActivity.onBuildStartFragmentIntent_added(java.lang.String, android.os.Bundle, int, int)"></A>
+ <nobr><code>Intent</code> <A HREF="../../../../reference/android/preference/PreferenceActivity.html#onBuildStartFragmentIntent(java.lang.String, android.os.Bundle, int, int)" target="_top"><code>onBuildStartFragmentIntent</code></A>(<code>String,</nobr> Bundle<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.PreferenceActivity.startWithFragment_added(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/preference/PreferenceActivity.html#startWithFragment(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int)" target="_top"><code>startWithFragment</code></A>(<code>String,</nobr> Bundle<nobr>,</nobr> Fragment<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_SHORT_TITLE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT_SHORT_TITLE" target="_top"><code>EXTRA_SHOW_FRAGMENT_SHORT_TITLE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT_TITLE" target="_top"><code>EXTRA_SHOW_FRAGMENT_TITLE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html b/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
new file mode 100644
index 0000000..a0223f8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.CallLog.Calls
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/CallLog.Calls.html" target="_top"><font size="+2"><code>CallLog.Calls</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.CallLog.Calls.IS_READ"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/CallLog.Calls.html#IS_READ" target="_top"><code>IS_READ</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
new file mode 100644
index 0000000..5e4921a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.CommonDataKinds.Photo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.CommonDataKinds.Photo.html" target="_top"><font size="+2"><code>ContactsContract.CommonDataKinds.Photo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.CommonDataKinds.Photo.html#PHOTO_FILE_ID" target="_top"><code>PHOTO_FILE_ID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
new file mode 100644
index 0000000..e94ed8c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.Contacts.Photo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.Contacts.Photo.html" target="_top"><font size="+2"><code>ContactsContract.Contacts.Photo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.Contacts.Photo.DISPLAY_PHOTO"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.Contacts.Photo.html#DISPLAY_PHOTO" target="_top"><code>DISPLAY_PHOTO</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.Contacts.Photo.PHOTO_FILE_ID"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.Contacts.Photo.html#PHOTO_FILE_ID" target="_top"><code>PHOTO_FILE_ID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
new file mode 100644
index 0000000..08d7c36
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.Contacts
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.Contacts.html" target="_top"><font size="+2"><code>ContactsContract.Contacts</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.Contacts.openContactPhotoInputStream_added(android.content.ContentResolver, android.net.Uri, boolean)"></A>
+ <nobr><code>InputStream</code> <A HREF="../../../../reference/android/provider/ContactsContract.Contacts.html#openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri, boolean)" target="_top"><code>openContactPhotoInputStream</code></A>(<code>ContentResolver,</nobr> Uri<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
new file mode 100644
index 0000000..ab4775b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.ContactsColumns
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.ContactsColumns.html" target="_top"><font size="+2"><code>ContactsContract.ContactsColumns</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.ContactsColumns.IS_USER_PROFILE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.ContactsColumns.html#IS_USER_PROFILE" target="_top"><code>IS_USER_PROFILE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.ContactsColumns.PHOTO_FILE_ID"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.ContactsColumns.html#PHOTO_FILE_ID" target="_top"><code>PHOTO_FILE_ID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
new file mode 100644
index 0000000..58381c2
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.GroupsColumns
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.GroupsColumns.html" target="_top"><font size="+2"><code>ContactsContract.GroupsColumns</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.GroupsColumns.DATA_SET"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.GroupsColumns.html#DATA_SET" target="_top"><code>DATA_SET</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
new file mode 100644
index 0000000..aef0030
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.Intents
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.Intents.html" target="_top"><font size="+2"><code>ContactsContract.Intents</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.Intents.INVITE_CONTACT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.Intents.html#INVITE_CONTACT" target="_top"><code>INVITE_CONTACT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
new file mode 100644
index 0000000..b98d1b1
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.RawContactsColumns
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.RawContactsColumns.html" target="_top"><font size="+2"><code>ContactsContract.RawContactsColumns</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.RawContactsColumns.DATA_SET"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.RawContactsColumns.html#DATA_SET" target="_top"><code>DATA_SET</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.RawContactsColumns.RAW_CONTACT_IS_USER_PROFILE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.RawContactsColumns.html#RAW_CONTACT_IS_USER_PROFILE" target="_top"><code>RAW_CONTACT_IS_USER_PROFILE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
new file mode 100644
index 0000000..a63d728
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.RawContactsEntity
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.RawContactsEntity.html" target="_top"><font size="+2"><code>ContactsContract.RawContactsEntity</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.RawContactsEntity.PROFILE_CONTENT_URI"></A>
+ <nobr><code>Uri</code> <A HREF="../../../../reference/android/provider/ContactsContract.RawContactsEntity.html#PROFILE_CONTENT_URI" target="_top"><code>PROFILE_CONTENT_URI</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
new file mode 100644
index 0000000..3f02f5f2
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.SettingsColumns
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.SettingsColumns.html" target="_top"><font size="+2"><code>ContactsContract.SettingsColumns</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.SettingsColumns.DATA_SET"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.SettingsColumns.html#DATA_SET" target="_top"><code>DATA_SET</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
new file mode 100644
index 0000000..ff069b0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract.StatusUpdates
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.StatusUpdates.html" target="_top"><font size="+2"><code>ContactsContract.StatusUpdates</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.StatusUpdates.PROFILE_CONTENT_URI"></A>
+ <nobr><code>Uri</code> <A HREF="../../../../reference/android/provider/ContactsContract.StatusUpdates.html#PROFILE_CONTENT_URI" target="_top"><code>PROFILE_CONTENT_URI</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html
new file mode 100644
index 0000000..f635b59
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.ContactsContract
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/ContactsContract.html" target="_top"><font size="+2"><code>ContactsContract</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.isProfileId_added(long)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/provider/ContactsContract.html#isProfileId(long)" target="_top"><code>isProfileId</code></A>(<code>long</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.PRIMARY_ACCOUNT_NAME"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.html#PRIMARY_ACCOUNT_NAME" target="_top"><code>PRIMARY_ACCOUNT_NAME</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.ContactsContract.PRIMARY_ACCOUNT_TYPE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/ContactsContract.html#PRIMARY_ACCOUNT_TYPE" target="_top"><code>PRIMARY_ACCOUNT_TYPE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html b/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html
new file mode 100644
index 0000000..3db447e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.LiveFolders
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/LiveFolders.html" target="_top"><font size="+2"><code>LiveFolders</code></font></A>
+</H2>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
new file mode 100644
index 0000000..765bdb7
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.MediaStore.Audio.AudioColumns
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.provider.<A HREF="../../../../reference/android/provider/MediaStore.Audio.AudioColumns.html" target="_top"><font size="+2"><code>MediaStore.Audio.AudioColumns</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.MediaStore.Audio.AudioColumns.ALBUM_ART"></A>
+ <code>String</code> ALBUM_ART
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
new file mode 100644
index 0000000..7cf1983
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.Settings.Secure
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/Settings.Secure.html" target="_top"><font size="+2"><code>Settings.Secure</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.TOUCH_EXPLORATION_ENABLED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#TOUCH_EXPLORATION_ENABLED" target="_top"><code>TOUCH_EXPLORATION_ENABLED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.BACKGROUND_DATA"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#BACKGROUND_DATA" target="_top"><code>BACKGROUND_DATA</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#TTS_DEFAULT_COUNTRY" target="_top"><code>TTS_DEFAULT_COUNTRY</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.TTS_DEFAULT_LANG"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#TTS_DEFAULT_LANG" target="_top"><code>TTS_DEFAULT_LANG</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.TTS_DEFAULT_VARIANT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#TTS_DEFAULT_VARIANT" target="_top"><code>TTS_DEFAULT_VARIANT</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.TTS_USE_DEFAULTS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#TTS_USE_DEFAULTS" target="_top"><code>TTS_USE_DEFAULTS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" target="_top"><code>WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_AP_COUNT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_AP_COUNT" target="_top"><code>WIFI_WATCHDOG_AP_COUNT</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" target="_top"><code>WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" target="_top"><code>WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" target="_top"><code>WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" target="_top"><code>WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_MAX_AP_CHECKS" target="_top"><code>WIFI_WATCHDOG_MAX_AP_CHECKS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_PING_COUNT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_PING_COUNT" target="_top"><code>WIFI_WATCHDOG_PING_COUNT</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_PING_DELAY_MS" target="_top"><code>WIFI_WATCHDOG_PING_DELAY_MS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_PING_TIMEOUT_MS" target="_top"><code>WIFI_WATCHDOG_PING_TIMEOUT_MS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.Secure.WIFI_WATCHDOG_WATCH_LIST"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.Secure.html#WIFI_WATCHDOG_WATCH_LIST" target="_top"><code>WIFI_WATCHDOG_WATCH_LIST</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html
new file mode 100644
index 0000000..4705790
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.Settings.System
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/Settings.System.html" target="_top"><font size="+2"><code>Settings.System</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.System.RADIO_NFC"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.System.html#RADIO_NFC" target="_top"><code>RADIO_NFC</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html
new file mode 100644
index 0000000..7ff39a8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider.Settings
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.provider.<A HREF="../../../../reference/android/provider/Settings.html" target="_top"><font size="+2"><code>Settings</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider.Settings.ACTION_NFCSHARING_SETTINGS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS" target="_top"><code>ACTION_NFCSHARING_SETTINGS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html
new file mode 100644
index 0000000..4a3f6e3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Allocation
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Allocation.html" target="_top"><font size="+2"><code>Allocation</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Allocation.copy1DRangeFrom_added(int, int, android.renderscript.Allocation, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/Allocation.html#copy1DRangeFrom(int, int, android.renderscript.Allocation, int)" target="_top"><code>copy1DRangeFrom</code></A>(<code>int,</nobr> int<nobr>,</nobr> Allocation<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Allocation.copy2DRangeFrom_added(int, int, int, int, android.renderscript.Allocation, int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/Allocation.html#copy2DRangeFrom(int, int, int, int, android.renderscript.Allocation, int, int)" target="_top"><code>copy2DRangeFrom</code></A>(<code>int,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> Allocation<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Allocation.USAGE_GRAPHICS_RENDER_TARGET"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/renderscript/Allocation.html#USAGE_GRAPHICS_RENDER_TARGET" target="_top"><code>USAGE_GRAPHICS_RENDER_TARGET</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
new file mode 100644
index 0000000..74682a6
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
@@ -0,0 +1,200 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.AllocationAdapter
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/AllocationAdapter.html" target="_top"><font size="+2"><code>AllocationAdapter</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.readData_removed(float[])"></A>
+ <nobr><code>void</code> readData(<code>float[]</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.readData_removed(int[])"></A>
+ <nobr><code>void</code> readData(<code>int[]</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData_removed(int, android.renderscript.FieldPacker)"></A>
+ <nobr><code>void</code> subData(<code>int,</nobr> FieldPacker<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData1D_removed(int, int, byte[])"></A>
+ <nobr><code>void</code> subData1D(<code>int,</nobr> int<nobr>,</nobr> byte[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData1D_removed(int, int, float[])"></A>
+ <nobr><code>void</code> subData1D(<code>int,</nobr> int<nobr>,</nobr> float[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData1D_removed(int, int, int[])"></A>
+ <nobr><code>void</code> subData1D(<code>int,</nobr> int<nobr>,</nobr> int[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData1D_removed(int, int, short[])"></A>
+ <nobr><code>void</code> subData1D(<code>int,</nobr> int<nobr>,</nobr> short[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, float[])"></A>
+ <nobr><code>void</code> subData2D(<code>int,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> float[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, int[])"></A>
+ <nobr><code>void</code> subData2D(<code>int,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.subElementData_removed(int, int, android.renderscript.FieldPacker)"></A>
+ <nobr><code>void</code> subElementData(<code>int,</nobr> int<nobr>,</nobr> FieldPacker<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.AllocationAdapter.create1D_added(android.renderscript.RenderScript, android.renderscript.Allocation)"></A>
+ <nobr><code>AllocationAdapter</code> <A HREF="../../../../reference/android/renderscript/AllocationAdapter.html#create1D(android.renderscript.RenderScript, android.renderscript.Allocation)" target="_top"><code>create1D</code></A>(<code>RenderScript,</nobr> Allocation<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
new file mode 100644
index 0000000..67c4380
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.BaseObj
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/BaseObj.html" target="_top"><font size="+2"><code>BaseObj</code></font></A>
+</H2>
+<p>Change of visibility from to public.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.BaseObj.getName_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/renderscript/BaseObj.html#getName()" target="_top"><code>getName</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html
new file mode 100644
index 0000000..bf81390
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Byte2
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Byte2.html" target="_top"><font size="+2"><code>Byte2</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Byte2.ctor_added(byte, byte)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Byte2.html#Byte2(byte, byte)" target="_top"><code>Byte2</code></A>(<code>byte,</nobr> byte<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html
new file mode 100644
index 0000000..89988ac
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Byte3
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Byte3.html" target="_top"><font size="+2"><code>Byte3</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Byte3.ctor_added(byte, byte, byte)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Byte3.html#Byte3(byte, byte, byte)" target="_top"><code>Byte3</code></A>(<code>byte,</nobr> byte<nobr>,</nobr> byte<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html
new file mode 100644
index 0000000..0317a2a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Byte4
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Byte4.html" target="_top"><font size="+2"><code>Byte4</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Byte4.ctor_added(byte, byte, byte, byte)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Byte4.html#Byte4(byte, byte, byte, byte)" target="_top"><code>Byte4</code></A>(<code>byte,</nobr> byte<nobr>,</nobr> byte<nobr>,</nobr> byte<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html
new file mode 100644
index 0000000..b2bb1a0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Element
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Element.html" target="_top"><font size="+2"><code>Element</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.F64_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#F64_2(android.renderscript.RenderScript)" target="_top"><code>F64_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.F64_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#F64_3(android.renderscript.RenderScript)" target="_top"><code>F64_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.F64_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#F64_4(android.renderscript.RenderScript)" target="_top"><code>F64_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I16_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I16_2(android.renderscript.RenderScript)" target="_top"><code>I16_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I16_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I16_3(android.renderscript.RenderScript)" target="_top"><code>I16_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I16_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I16_4(android.renderscript.RenderScript)" target="_top"><code>I16_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I32_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I32_2(android.renderscript.RenderScript)" target="_top"><code>I32_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I32_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I32_3(android.renderscript.RenderScript)" target="_top"><code>I32_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I32_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I32_4(android.renderscript.RenderScript)" target="_top"><code>I32_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I64_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I64_2(android.renderscript.RenderScript)" target="_top"><code>I64_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I64_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I64_3(android.renderscript.RenderScript)" target="_top"><code>I64_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I64_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I64_4(android.renderscript.RenderScript)" target="_top"><code>I64_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I8_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I8_2(android.renderscript.RenderScript)" target="_top"><code>I8_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I8_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I8_3(android.renderscript.RenderScript)" target="_top"><code>I8_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.I8_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#I8_4(android.renderscript.RenderScript)" target="_top"><code>I8_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U16_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U16_2(android.renderscript.RenderScript)" target="_top"><code>U16_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U16_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U16_3(android.renderscript.RenderScript)" target="_top"><code>U16_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U16_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U16_4(android.renderscript.RenderScript)" target="_top"><code>U16_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U32_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U32_2(android.renderscript.RenderScript)" target="_top"><code>U32_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U32_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U32_3(android.renderscript.RenderScript)" target="_top"><code>U32_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U32_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U32_4(android.renderscript.RenderScript)" target="_top"><code>U32_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U64_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U64_2(android.renderscript.RenderScript)" target="_top"><code>U64_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U64_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U64_3(android.renderscript.RenderScript)" target="_top"><code>U64_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U64_4_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U64_4(android.renderscript.RenderScript)" target="_top"><code>U64_4</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U8_2_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U8_2(android.renderscript.RenderScript)" target="_top"><code>U8_2</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.U8_3_added(android.renderscript.RenderScript)"></A>
+ <nobr><code>Element</code> <A HREF="../../../../reference/android/renderscript/Element.html#U8_3(android.renderscript.RenderScript)" target="_top"><code>U8_3</code></A>(<code>RenderScript</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Element.isCompatible_added(android.renderscript.Element)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/renderscript/Element.html#isCompatible(android.renderscript.Element)" target="_top"><code>isCompatible</code></A>(<code>Element</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
new file mode 100644
index 0000000..b770687
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.FieldPacker
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/FieldPacker.html" target="_top"><font size="+2"><code>FieldPacker</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addF64_added(android.renderscript.Double2)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addF64(android.renderscript.Double2)" target="_top"><code>addF64</code></A>(<code>Double2</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addF64_added(android.renderscript.Double3)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addF64(android.renderscript.Double3)" target="_top"><code>addF64</code></A>(<code>Double3</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addF64_added(android.renderscript.Double4)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addF64(android.renderscript.Double4)" target="_top"><code>addF64</code></A>(<code>Double4</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addI64_added(android.renderscript.Long2)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addI64(android.renderscript.Long2)" target="_top"><code>addI64</code></A>(<code>Long2</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addI64_added(android.renderscript.Long3)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addI64(android.renderscript.Long3)" target="_top"><code>addI64</code></A>(<code>Long3</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addI64_added(android.renderscript.Long4)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addI64(android.renderscript.Long4)" target="_top"><code>addI64</code></A>(<code>Long4</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addU64_added(android.renderscript.Long2)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addU64(android.renderscript.Long2)" target="_top"><code>addU64</code></A>(<code>Long2</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addU64_added(android.renderscript.Long3)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addU64(android.renderscript.Long3)" target="_top"><code>addU64</code></A>(<code>Long3</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.FieldPacker.addU64_added(android.renderscript.Long4)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/FieldPacker.html#addU64(android.renderscript.Long4)" target="_top"><code>addU64</code></A>(<code>Long4</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html
new file mode 100644
index 0000000..9338626
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Int2
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Int2.html" target="_top"><font size="+2"><code>Int2</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Int2.ctor_added(int, int)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Int2.html#Int2(int, int)" target="_top"><code>Int2</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html
new file mode 100644
index 0000000..dd2929d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Int3
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Int3.html" target="_top"><font size="+2"><code>Int3</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Int3.ctor_added(int, int, int)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Int3.html#Int3(int, int, int)" target="_top"><code>Int3</code></A>(<code>int,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html
new file mode 100644
index 0000000..c7feb7c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Int4
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Int4.html" target="_top"><font size="+2"><code>Int4</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Int4.ctor_added(int, int, int, int)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Int4.html#Int4(int, int, int, int)" target="_top"><code>Int4</code></A>(<code>int,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html
new file mode 100644
index 0000000..b70a7b9
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Long2
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Long2.html" target="_top"><font size="+2"><code>Long2</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Long2.ctor_added(long, long)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Long2.html#Long2(long, long)" target="_top"><code>Long2</code></A>(<code>long,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html
new file mode 100644
index 0000000..8f79513
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Long3
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Long3.html" target="_top"><font size="+2"><code>Long3</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Long3.ctor_added(long, long, long)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Long3.html#Long3(long, long, long)" target="_top"><code>Long3</code></A>(<code>long,</nobr> long<nobr>,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html
new file mode 100644
index 0000000..75e5c1c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Long4
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Long4.html" target="_top"><font size="+2"><code>Long4</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Long4.ctor_added(long, long, long, long)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Long4.html#Long4(long, long, long, long)" target="_top"><code>Long4</code></A>(<code>long,</nobr> long<nobr>,</nobr> long<nobr>,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
new file mode 100644
index 0000000..c95df17
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.RenderScriptGL
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/RenderScriptGL.html" target="_top"><font size="+2"><code>RenderScriptGL</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.RenderScriptGL.setSurfaceTexture_added(android.graphics.SurfaceTexture, int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/RenderScriptGL.html#setSurfaceTexture(android.graphics.SurfaceTexture, int, int)" target="_top"><code>setSurfaceTexture</code></A>(<code>SurfaceTexture,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html
new file mode 100644
index 0000000..e758f56
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Script
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Script.html" target="_top"><font size="+2"><code>Script</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Script.forEach_added(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/renderscript/Script.html#forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker)" target="_top"><code>forEach</code></A>(<code>int,</nobr> Allocation<nobr>,</nobr> Allocation<nobr>,</nobr> FieldPacker<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html
new file mode 100644
index 0000000..29bcabc
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Short2
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Short2.html" target="_top"><font size="+2"><code>Short2</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Short2.ctor_added(short, short)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Short2.html#Short2(short, short)" target="_top"><code>Short2</code></A>(<code>short,</nobr> short<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html
new file mode 100644
index 0000000..b2c0790
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Short3
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Short3.html" target="_top"><font size="+2"><code>Short3</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Short3.ctor_added(short, short, short)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Short3.html#Short3(short, short, short)" target="_top"><code>Short3</code></A>(<code>short,</nobr> short<nobr>,</nobr> short<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html
new file mode 100644
index 0000000..1b295f9
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript.Short4
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.renderscript.<A HREF="../../../../reference/android/renderscript/Short4.html" target="_top"><font size="+2"><code>Short4</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript.Short4.ctor_added(short, short, short, short)"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Short4.html#Short4(short, short, short, short)" target="_top"><code>Short4</code></A>(<code>short,</nobr> short<nobr>,</nobr> short<nobr>,</nobr> short<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html b/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
new file mode 100644
index 0000000..16d0d11
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.service.wallpaper.WallpaperService.Engine
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.service.wallpaper.<A HREF="../../../../reference/android/service/wallpaper/WallpaperService.Engine.html" target="_top"><font size="+2"><code>WallpaperService.Engine</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.service.wallpaper.WallpaperService.Engine.dump_added(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/service/wallpaper/WallpaperService.Engine.html#dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])" target="_top"><code>dump</code></A>(<code>String,</nobr> FileDescriptor<nobr>,</nobr> PrintWriter<nobr>,</nobr> String[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
new file mode 100644
index 0000000..11ec629
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.speech.RecognizerIntent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.speech.<A HREF="../../../../reference/android/speech/RecognizerIntent.html" target="_top"><font size="+2"><code>RecognizerIntent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.RecognizerIntent.EXTRA_CONFIDENCE_SCORES"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/speech/RecognizerIntent.html#EXTRA_CONFIDENCE_SCORES" target="_top"><code>EXTRA_CONFIDENCE_SCORES</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.RecognizerIntent.EXTRA_ORIGIN"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/speech/RecognizerIntent.html#EXTRA_ORIGIN" target="_top"><code>EXTRA_ORIGIN</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html b/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
new file mode 100644
index 0000000..b668613
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.speech.SpeechRecognizer
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.speech.<A HREF="../../../../reference/android/speech/SpeechRecognizer.html" target="_top"><font size="+2"><code>SpeechRecognizer</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.SpeechRecognizer.CONFIDENCE_SCORES"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/speech/SpeechRecognizer.html#CONFIDENCE_SCORES" target="_top"><code>CONFIDENCE_SCORES</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
new file mode 100644
index 0000000..bb0b4ac
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.speech.tts.TextToSpeech.Engine
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.speech.tts.<A HREF="../../../../reference/android/speech/tts/TextToSpeech.Engine.html" target="_top"><font size="+2"><code>TextToSpeech.Engine</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.tts.TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/speech/tts/TextToSpeech.Engine.html#INTENT_ACTION_TTS_SERVICE" target="_top"><code>INTENT_ACTION_TTS_SERVICE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.tts.TextToSpeech.Engine.SERVICE_META_DATA"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/speech/tts/TextToSpeech.Engine.html#SERVICE_META_DATA" target="_top"><code>SERVICE_META_DATA</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
new file mode 100644
index 0000000..24de846
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.speech.tts.TextToSpeech
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.speech.tts.<A HREF="../../../../reference/android/speech/tts/TextToSpeech.html" target="_top"><font size="+2"><code>TextToSpeech</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)"></A>
+ <nobr><A HREF="../../../../reference/android/speech/tts/TextToSpeech.html#TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" target="_top"><code>TextToSpeech</code></A>(<code>Context,</nobr> OnInitListener<nobr>,</nobr> String<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.tts.TextToSpeech.getEngines_added()"></A>
+ <nobr><code>List<EngineInfo></code> <A HREF="../../../../reference/android/speech/tts/TextToSpeech.html#getEngines()" target="_top"><code>getEngines</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.tts.TextToSpeech.setEngineByPackageName_changed(java.lang.String)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/speech/tts/TextToSpeech.html#setEngineByPackageName(java.lang.String)" target="_top"><code>setEngineByPackageName</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
new file mode 100644
index 0000000..5dcf841
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.test.mock.MockPackageManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.test.mock.<A HREF="../../../../reference/android/test/mock/MockPackageManager.html" target="_top"><font size="+2"><code>MockPackageManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.test.mock.MockPackageManager.verifyPendingInstall_added(int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/test/mock/MockPackageManager.html#verifyPendingInstall(int, int)" target="_top"><code>verifyPendingInstall</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.text.Layout.html b/docs/html/sdk/api_diff/14/changes/android.text.Layout.html
new file mode 100644
index 0000000..81cc608
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.text.Layout.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.text.Layout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.text.<A HREF="../../../../reference/android/text/Layout.html" target="_top"><font size="+2"><code>Layout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.text.Layout.isRtlCharAt_added(int)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/text/Layout.html#isRtlCharAt(int)" target="_top"><code>isRtlCharAt</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.Config.html b/docs/html/sdk/api_diff/14/changes/android.util.Config.html
new file mode 100644
index 0000000..4d1cfe4
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.util.Config.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.util.Config
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.util.<A HREF="../../../../reference/android/util/Config.html" target="_top"><font size="+2"><code>Config</code></font></A>
+</H2>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util.Config.DEBUG"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/util/Config.html#DEBUG" target="_top"><code>DEBUG</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html b/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html
new file mode 100644
index 0000000..c5c0367
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.util.Patterns
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.util.<A HREF="../../../../reference/android/util/Patterns.html" target="_top"><font size="+2"><code>Patterns</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util.Patterns.TOP_LEVEL_DOMAIN_STR"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/util/Patterns.html#TOP_LEVEL_DOMAIN_STR" target="_top"><code>TOP_LEVEL_DOMAIN_STR</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Changed in value from "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(biz|b[abdefghijmnorstvwyz])|(cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(edu|e[cegrstu])|f[ijkmor]|(gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(info|int|i[delmnoqrst])|(jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(name|net|n[acefgilopruz])|(org|om)|(pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-80akhbyknj4f|xn\\-\\-9t4b11yi5a|xn\\-\\-deba0ad|xn\\-\\-g6w251d|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-mgbaam7a8h|xn\\-\\-mgberp4a5d4ar|xn\\-\\-wgbh1c|xn\\-\\-zckzah)|y[et]|z[amw])" to "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(biz|b[abdefghijmnorstvwyz])|(cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(edu|e[cegrstu])|f[ijkmor]|(gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(info|int|i[delmnoqrst])|(jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(name|net|n[acefgilopruz])|(org|om)|(pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw])".
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util.Patterns.TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/util/Patterns.html#TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" target="_top"><code>TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Changed in value from "(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-80akhbyknj4f|xn\\-\\-9t4b11yi5a|xn\\-\\-deba0ad|xn\\-\\-g6w251d|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-mgbaam7a8h|xn\\-\\-mgberp4a5d4ar|xn\\-\\-wgbh1c|xn\\-\\-zckzah)|y[et]|z[amw]))" to "(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw]))".
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html b/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html
new file mode 100644
index 0000000..be509fa
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.util.SparseArray
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.util.<A HREF="../../../../reference/android/util/SparseArray.html" target="_top"><font size="+2"><code>SparseArray</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>java.lang.Cloneable</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util.SparseArray.clone_changed()"></A>
+ <nobr><code>SparseArray<E></code> <A HREF="../../../../reference/android/util/SparseArray.html#clone()" target="_top"><code>clone</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in return type from <code>Object</code> to <code>SparseArray<E></code>.<br>
+ Change in exceptions thrown from <code>java.lang.CloneNotSupportedException</code> to no exceptions.<br>
+ Method was inherited from <code>java.lang.Object</code>, but is now defined locally. Change of visibility from protected to public.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html b/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
new file mode 100644
index 0000000..3b6a853
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.util.SparseBooleanArray
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.util.<A HREF="../../../../reference/android/util/SparseBooleanArray.html" target="_top"><font size="+2"><code>SparseBooleanArray</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>java.lang.Cloneable</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util.SparseBooleanArray.clone_changed()"></A>
+ <nobr><code>SparseBooleanArray</code> <A HREF="../../../../reference/android/util/SparseBooleanArray.html#clone()" target="_top"><code>clone</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in return type from <code>Object</code> to <code>SparseBooleanArray</code>.<br>
+ Change in exceptions thrown from <code>java.lang.CloneNotSupportedException</code> to no exceptions.<br>
+ Method was inherited from <code>java.lang.Object</code>, but is now defined locally. Change of visibility from protected to public.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html b/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html
new file mode 100644
index 0000000..63577a3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.util.SparseIntArray
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.util.<A HREF="../../../../reference/android/util/SparseIntArray.html" target="_top"><font size="+2"><code>SparseIntArray</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>java.lang.Cloneable</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util.SparseIntArray.clone_changed()"></A>
+ <nobr><code>SparseIntArray</code> <A HREF="../../../../reference/android/util/SparseIntArray.html#clone()" target="_top"><code>clone</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in return type from <code>Object</code> to <code>SparseIntArray</code>.<br>
+ Change in exceptions thrown from <code>java.lang.CloneNotSupportedException</code> to no exceptions.<br>
+ Method was inherited from <code>java.lang.Object</code>, but is now defined locally. Change of visibility from protected to public.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html b/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html
new file mode 100644
index 0000000..f0b1252
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.ActionMode
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/ActionMode.html" target="_top"><font size="+2"><code>ActionMode</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ActionMode.getTag_added()"></A>
+ <nobr><code>Object</code> <A HREF="../../../../reference/android/view/ActionMode.html#getTag()" target="_top"><code>getTag</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ActionMode.setTag_added(java.lang.Object)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/ActionMode.html#setTag(java.lang.Object)" target="_top"><code>setTag</code></A>(<code>Object</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html b/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html
new file mode 100644
index 0000000..12aa839
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.Gravity
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/Gravity.html" target="_top"><font size="+2"><code>Gravity</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Gravity.getAbsoluteGravity_added(int, int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/Gravity.html#getAbsoluteGravity(int, int)" target="_top"><code>getAbsoluteGravity</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Gravity.END"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/Gravity.html#END" target="_top"><code>END</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/Gravity.html#RELATIVE_HORIZONTAL_GRAVITY_MASK" target="_top"><code>RELATIVE_HORIZONTAL_GRAVITY_MASK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Gravity.RELATIVE_LAYOUT_DIRECTION"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/Gravity.html#RELATIVE_LAYOUT_DIRECTION" target="_top"><code>RELATIVE_LAYOUT_DIRECTION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Gravity.START"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/Gravity.html#START" target="_top"><code>START</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html b/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html
new file mode 100644
index 0000000..4636c47
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.InputDevice
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/InputDevice.html" target="_top"><font size="+2"><code>InputDevice</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.InputDevice.SOURCE_STYLUS"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/InputDevice.html#SOURCE_STYLUS" target="_top"><code>SOURCE_STYLUS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html
new file mode 100644
index 0000000..df18feb
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.KeyEvent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/KeyEvent.html" target="_top"><font size="+2"><code>KeyEvent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.KeyEvent.KEYCODE_3D_MODE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/KeyEvent.html#KEYCODE_3D_MODE" target="_top"><code>KEYCODE_3D_MODE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.KeyEvent.KEYCODE_LANGUAGE_SWITCH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/KeyEvent.html#KEYCODE_LANGUAGE_SWITCH" target="_top"><code>KEYCODE_LANGUAGE_SWITCH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.KeyEvent.KEYCODE_MANNER_MODE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/KeyEvent.html#KEYCODE_MANNER_MODE" target="_top"><code>KEYCODE_MANNER_MODE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html b/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html
new file mode 100644
index 0000000..4b72464
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.MenuItem
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.view.<A HREF="../../../../reference/android/view/MenuItem.html" target="_top"><font size="+2"><code>MenuItem</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.collapseActionView_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/MenuItem.html#collapseActionView()" target="_top"><code>collapseActionView</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.expandActionView_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/MenuItem.html#expandActionView()" target="_top"><code>expandActionView</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.getActionProvider_added()"></A>
+ <nobr><code>ActionProvider</code> <A HREF="../../../../reference/android/view/MenuItem.html#getActionProvider()" target="_top"><code>getActionProvider</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.isActionViewExpanded_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/MenuItem.html#isActionViewExpanded()" target="_top"><code>isActionViewExpanded</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.setActionProvider_added(android.view.ActionProvider)"></A>
+ <nobr><code>MenuItem</code> <A HREF="../../../../reference/android/view/MenuItem.html#setActionProvider(android.view.ActionProvider)" target="_top"><code>setActionProvider</code></A>(<code>ActionProvider</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.setOnActionExpandListener_added(android.view.MenuItem.OnActionExpandListener)"></A>
+ <nobr><code>MenuItem</code> <A HREF="../../../../reference/android/view/MenuItem.html#setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener)" target="_top"><code>setOnActionExpandListener</code></A>(<code>OnActionExpandListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.setShowAsActionFlags_added(int)"></A>
+ <nobr><code>MenuItem</code> <A HREF="../../../../reference/android/view/MenuItem.html#setShowAsActionFlags(int)" target="_top"><code>setShowAsActionFlags</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MenuItem.html#SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" target="_top"><code>SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html
new file mode 100644
index 0000000..1ab1946
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html
@@ -0,0 +1,278 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.MotionEvent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/MotionEvent.html" target="_top"><font size="+2"><code>MotionEvent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.obtain_removed(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)"></A>
+ <nobr><code>MotionEvent</code> obtain(<code>long,</nobr> long<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int[]<nobr>,</nobr> PointerCoords[]<nobr>,</nobr> int<nobr>,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.getButtonState_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#getButtonState()" target="_top"><code>getButtonState</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.getPointerProperties_added(int, android.view.MotionEvent.PointerProperties)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/MotionEvent.html#getPointerProperties(int, android.view.MotionEvent.PointerProperties)" target="_top"><code>getPointerProperties</code></A>(<code>int,</nobr> PointerProperties<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.getToolType_added(int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#getToolType(int)" target="_top"><code>getToolType</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.obtain_added(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int)"></A>
+ <nobr><code>MotionEvent</code> <A HREF="../../../../reference/android/view/MotionEvent.html#obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int)" target="_top"><code>obtain</code></A>(<code>long,</nobr> long<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> PointerProperties[]<nobr>,</nobr> PointerCoords[]<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.obtain_added(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)"></A>
+ <nobr><code>MotionEvent</code> <A HREF="../../../../reference/android/view/MotionEvent.html#obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" target="_top"><code>obtain</code></A>(<code>long,</nobr> long<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int[]<nobr>,</nobr> PointerCoords[]<nobr>,</nobr> int<nobr>,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.ACTION_HOVER_ENTER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#ACTION_HOVER_ENTER" target="_top"><code>ACTION_HOVER_ENTER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.ACTION_HOVER_EXIT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#ACTION_HOVER_EXIT" target="_top"><code>ACTION_HOVER_EXIT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.AXIS_DISTANCE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#AXIS_DISTANCE" target="_top"><code>AXIS_DISTANCE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.AXIS_TILT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#AXIS_TILT" target="_top"><code>AXIS_TILT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.BUTTON_BACK"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#BUTTON_BACK" target="_top"><code>BUTTON_BACK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.BUTTON_FORWARD"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#BUTTON_FORWARD" target="_top"><code>BUTTON_FORWARD</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.BUTTON_PRIMARY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#BUTTON_PRIMARY" target="_top"><code>BUTTON_PRIMARY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.BUTTON_SECONDARY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#BUTTON_SECONDARY" target="_top"><code>BUTTON_SECONDARY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.BUTTON_TERTIARY"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#BUTTON_TERTIARY" target="_top"><code>BUTTON_TERTIARY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.INVALID_POINTER_ID"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#INVALID_POINTER_ID" target="_top"><code>INVALID_POINTER_ID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.TOOL_TYPE_ERASER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#TOOL_TYPE_ERASER" target="_top"><code>TOOL_TYPE_ERASER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.TOOL_TYPE_FINGER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#TOOL_TYPE_FINGER" target="_top"><code>TOOL_TYPE_FINGER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.TOOL_TYPE_MOUSE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#TOOL_TYPE_MOUSE" target="_top"><code>TOOL_TYPE_MOUSE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.TOOL_TYPE_STYLUS"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#TOOL_TYPE_STYLUS" target="_top"><code>TOOL_TYPE_STYLUS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.MotionEvent.TOOL_TYPE_UNKNOWN"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/MotionEvent.html#TOOL_TYPE_UNKNOWN" target="_top"><code>TOOL_TYPE_UNKNOWN</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.Surface.html b/docs/html/sdk/api_diff/14/changes/android.view.Surface.html
new file mode 100644
index 0000000..d6d496b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.Surface.html
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.Surface
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/Surface.html" target="_top"><font size="+2"><code>Surface</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.ctor_added(android.graphics.SurfaceTexture)"></A>
+ <nobr><A HREF="../../../../reference/android/view/Surface.html#Surface(android.graphics.SurfaceTexture)" target="_top"><code>Surface</code></A>(<code>SurfaceTexture</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.freeze_removed()"></A>
+ <nobr><code>void</code> freeze()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.hide_removed()"></A>
+ <nobr><code>void</code> hide()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setAlpha_removed(float)"></A>
+ <nobr><code>void</code> setAlpha(<code>float</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setFlags_removed(int, int)"></A>
+ <nobr><code>void</code> setFlags(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setFreezeTint_removed(int)"></A>
+ <nobr><code>void</code> setFreezeTint(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setLayer_removed(int)"></A>
+ <nobr><code>void</code> setLayer(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setMatrix_removed(float, float, float, float)"></A>
+ <nobr><code>void</code> setMatrix(<code>float,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> float<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setOrientation_removed(int, int)"></A>
+ <nobr><code>void</code> setOrientation(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setPosition_removed(int, int)"></A>
+ <nobr><code>void</code> setPosition(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setSize_removed(int, int)"></A>
+ <nobr><code>void</code> setSize(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.setTransparentRegionHint_removed(android.graphics.Region)"></A>
+ <nobr><code>void</code> setTransparentRegionHint(<code>Region</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.show_removed()"></A>
+ <nobr><code>void</code> show()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.unfreeze_removed()"></A>
+ <nobr><code>void</code> unfreeze()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.release_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/Surface.html#release()" target="_top"><code>release</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.FX_SURFACE_BLUR"></A>
+ <code>int</code> FX_SURFACE_BLUR
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.FX_SURFACE_DIM"></A>
+ <code>int</code> FX_SURFACE_DIM
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.FX_SURFACE_MASK"></A>
+ <code>int</code> FX_SURFACE_MASK
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.FX_SURFACE_NORMAL"></A>
+ <code>int</code> FX_SURFACE_NORMAL
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.GPU"></A>
+ <code>int</code> GPU
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.HARDWARE"></A>
+ <code>int</code> HARDWARE
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.HIDDEN"></A>
+ <code>int</code> HIDDEN
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.NON_PREMULTIPLIED"></A>
+ <code>int</code> NON_PREMULTIPLIED
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.PUSH_BUFFERS"></A>
+ <code>int</code> PUSH_BUFFERS
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.SECURE"></A>
+ <code>int</code> SECURE
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.SURACE_FROZEN"></A>
+ <code>int</code> SURACE_FROZEN
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.SURFACE_BLUR_FREEZE"></A>
+ <code>int</code> SURFACE_BLUR_FREEZE
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.SURFACE_DITHER"></A>
+ <code>int</code> SURFACE_DITHER
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.SURFACE_FROZEN"></A>
+ <code>int</code> SURFACE_FROZEN
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Surface.SURFACE_HIDDEN"></A>
+ <code>int</code> SURFACE_HIDDEN
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.View.html b/docs/html/sdk/api_diff/14/changes/android.view.View.html
new file mode 100644
index 0000000..38a21f7
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.View.html
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.View
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/View.html" target="_top"><font size="+2"><code>View</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.canScrollHorizontally_added(int)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#canScrollHorizontally(int)" target="_top"><code>canScrollHorizontally</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.canScrollVertically_added(int)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#canScrollVertically(int)" target="_top"><code>canScrollVertically</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.createAccessibilityNodeInfo_added()"></A>
+ <nobr><code>AccessibilityNodeInfo</code> <A HREF="../../../../reference/android/view/View.html#createAccessibilityNodeInfo()" target="_top"><code>createAccessibilityNodeInfo</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.dispatchGenericFocusedEvent_added(android.view.MotionEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#dispatchGenericFocusedEvent(android.view.MotionEvent)" target="_top"><code>dispatchGenericFocusedEvent</code></A>(<code>MotionEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.dispatchGenericPointerEvent_added(android.view.MotionEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#dispatchGenericPointerEvent(android.view.MotionEvent)" target="_top"><code>dispatchGenericPointerEvent</code></A>(<code>MotionEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.dispatchHoverEvent_added(android.view.MotionEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#dispatchHoverEvent(android.view.MotionEvent)" target="_top"><code>dispatchHoverEvent</code></A>(<code>MotionEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.findViewsWithText_added(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#findViewsWithText(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int)" target="_top"><code>findViewsWithText</code></A>(<code>ArrayList<View>,</nobr> CharSequence<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.fitsSystemWindows_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#fitsSystemWindows()" target="_top"><code>fitsSystemWindows</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.isHovered_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#isHovered()" target="_top"><code>isHovered</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.onHoverChanged_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#onHoverChanged(boolean)" target="_top"><code>onHoverChanged</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.onHoverEvent_added(android.view.MotionEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#onHoverEvent(android.view.MotionEvent)" target="_top"><code>onHoverEvent</code></A>(<code>MotionEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.onInitializeAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent)" target="_top"><code>onInitializeAccessibilityEvent</code></A>(<code>AccessibilityEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.onInitializeAccessibilityNodeInfo_added(android.view.accessibility.AccessibilityNodeInfo)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo)" target="_top"><code>onInitializeAccessibilityNodeInfo</code></A>(<code>AccessibilityNodeInfo</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.onPopulateAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent)" target="_top"><code>onPopulateAccessibilityEvent</code></A>(<code>AccessibilityEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.setAccessibilityDelegate_added(android.view.View.AccessibilityDelegate)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)" target="_top"><code>setAccessibilityDelegate</code></A>(<code>AccessibilityDelegate</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.setFitsSystemWindows_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#setFitsSystemWindows(boolean)" target="_top"><code>setFitsSystemWindows</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.setHovered_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#setHovered(boolean)" target="_top"><code>setHovered</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.setOnHoverListener_added(android.view.View.OnHoverListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#setOnHoverListener(android.view.View.OnHoverListener)" target="_top"><code>setOnHoverListener</code></A>(<code>OnHoverListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.setScrollX_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#setScrollX(int)" target="_top"><code>setScrollX</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.setScrollY_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#setScrollY(int)" target="_top"><code>setScrollY</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.ALPHA"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#ALPHA" target="_top"><code>ALPHA</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#FIND_VIEWS_WITH_CONTENT_DESCRIPTION" target="_top"><code>FIND_VIEWS_WITH_CONTENT_DESCRIPTION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.FIND_VIEWS_WITH_TEXT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#FIND_VIEWS_WITH_TEXT" target="_top"><code>FIND_VIEWS_WITH_TEXT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.ROTATION"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#ROTATION" target="_top"><code>ROTATION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.ROTATION_X"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#ROTATION_X" target="_top"><code>ROTATION_X</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.ROTATION_Y"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#ROTATION_Y" target="_top"><code>ROTATION_Y</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.SCALE_X"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#SCALE_X" target="_top"><code>SCALE_X</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.SCALE_Y"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#SCALE_Y" target="_top"><code>SCALE_Y</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#SYSTEM_UI_FLAG_HIDE_NAVIGATION" target="_top"><code>SYSTEM_UI_FLAG_HIDE_NAVIGATION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.SYSTEM_UI_FLAG_LOW_PROFILE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#SYSTEM_UI_FLAG_LOW_PROFILE" target="_top"><code>SYSTEM_UI_FLAG_LOW_PROFILE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.SYSTEM_UI_FLAG_VISIBLE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#SYSTEM_UI_FLAG_VISIBLE" target="_top"><code>SYSTEM_UI_FLAG_VISIBLE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.TRANSLATION_X"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#TRANSLATION_X" target="_top"><code>TRANSLATION_X</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.TRANSLATION_Y"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#TRANSLATION_Y" target="_top"><code>TRANSLATION_Y</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.X"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#X" target="_top"><code>X</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.Y"></A>
+ <nobr><code>Property</code> <A HREF="../../../../reference/android/view/View.html#Y" target="_top"><code>Y</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.STATUS_BAR_HIDDEN"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#STATUS_BAR_HIDDEN" target="_top"><code>STATUS_BAR_HIDDEN</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.STATUS_BAR_VISIBLE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/View.html#STATUS_BAR_VISIBLE" target="_top"><code>STATUS_BAR_VISIBLE</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
new file mode 100644
index 0000000..18025b0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.ViewConfiguration
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/ViewConfiguration.html" target="_top"><font size="+2"><code>ViewConfiguration</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewConfiguration.hasPermanentMenuKey_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewConfiguration.html#hasPermanentMenuKey()" target="_top"><code>hasPermanentMenuKey</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html
new file mode 100644
index 0000000..b869fb4
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.ViewGroup
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/ViewGroup.html" target="_top"><font size="+2"><code>ViewGroup</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.onInterceptHoverEvent_added(android.view.MotionEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewGroup.html#onInterceptHoverEvent(android.view.MotionEvent)" target="_top"><code>onInterceptHoverEvent</code></A>(<code>MotionEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.onRequestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewGroup.html#onRequestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent)" target="_top"><code>onRequestSendAccessibilityEvent</code></A>(<code>View,</nobr> AccessibilityEvent<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewGroup.html#requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent)" target="_top"><code>requestSendAccessibilityEvent</code></A>(<code>View,</nobr> AccessibilityEvent<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.resetResolvedLayoutDirection_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/ViewGroup.html#resetResolvedLayoutDirection()" target="_top"><code>resetResolvedLayoutDirection</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.resetResolvedTextDirection_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/ViewGroup.html#resetResolvedTextDirection()" target="_top"><code>resetResolvedTextDirection</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.shouldDelayChildPressedState_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewGroup.html#shouldDelayChildPressedState()" target="_top"><code>shouldDelayChildPressedState</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html
new file mode 100644
index 0000000..6cb3c63
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.ViewParent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.view.<A HREF="../../../../reference/android/view/ViewParent.html" target="_top"><font size="+2"><code>ViewParent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewParent.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewParent.html#requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent)" target="_top"><code>requestSendAccessibilityEvent</code></A>(<code>View,</nobr> AccessibilityEvent<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
new file mode 100644
index 0000000..30e0734
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.ViewPropertyAnimator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/ViewPropertyAnimator.html" target="_top"><font size="+2"><code>ViewPropertyAnimator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewPropertyAnimator.cancel_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/ViewPropertyAnimator.html#cancel()" target="_top"><code>cancel</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewPropertyAnimator.getDuration_added()"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/view/ViewPropertyAnimator.html#getDuration()" target="_top"><code>getDuration</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewPropertyAnimator.getStartDelay_added()"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/view/ViewPropertyAnimator.html#getStartDelay()" target="_top"><code>getStartDelay</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewPropertyAnimator.setStartDelay_added(long)"></A>
+ <nobr><code>ViewPropertyAnimator</code> <A HREF="../../../../reference/android/view/ViewPropertyAnimator.html#setStartDelay(long)" target="_top"><code>setStartDelay</code></A>(<code>long</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewPropertyAnimator.start_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/ViewPropertyAnimator.html#start()" target="_top"><code>start</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.Window.html b/docs/html/sdk/api_diff/14/changes/android.view.Window.html
new file mode 100644
index 0000000..5c044fe
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.Window.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.Window
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/Window.html" target="_top"><font size="+2"><code>Window</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Window.setDimAmount_added(float)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/Window.html#setDimAmount(float)" target="_top"><code>setDimAmount</code></A>(<code>float</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Window.setUiOptions_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/Window.html#setUiOptions(int)" target="_top"><code>setUiOptions</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.Window.setUiOptions_added(int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/Window.html#setUiOptions(int, int)" target="_top"><code>setUiOptions</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
new file mode 100644
index 0000000..ef0bf07
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.WindowManager.LayoutParams
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/WindowManager.LayoutParams.html" target="_top"><font size="+2"><code>WindowManager.LayoutParams</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.WindowManager.LayoutParams.FLAG_BLUR_BEHIND"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/WindowManager.LayoutParams.html#FLAG_BLUR_BEHIND" target="_top"><code>FLAG_BLUR_BEHIND</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
new file mode 100644
index 0000000..1b712e3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
@@ -0,0 +1,513 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.accessibility.AccessibilityEvent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.accessibility.<A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html" target="_top"><font size="+2"><code>AccessibilityEvent</code></font></A>
+</H2>
+<p><font xsize="+1">The superclass changed from <code>java.lang.Object</code> to <code>android.view.accessibility.AccessibilityRecord</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.appendRecord_added(android.view.accessibility.AccessibilityRecord)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#appendRecord(android.view.accessibility.AccessibilityRecord)" target="_top"><code>appendRecord</code></A>(<code>AccessibilityRecord</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.eventTypeToString_added(int)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#eventTypeToString(int)" target="_top"><code>eventTypeToString</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getRecord_added(int)"></A>
+ <nobr><code>AccessibilityRecord</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#getRecord(int)" target="_top"><code>getRecord</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getRecordCount_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#getRecordCount()" target="_top"><code>getRecordCount</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.obtain_added(android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>AccessibilityEvent</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#obtain(android.view.accessibility.AccessibilityEvent)" target="_top"><code>obtain</code></A>(<code>AccessibilityEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getAddedCount_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getAddedCount()" target="_top"><code>getAddedCount</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getAddedCount()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getBeforeText_changed()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getBeforeText()" target="_top"><code>getBeforeText</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getBeforeText()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getClassName_changed()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getClassName()" target="_top"><code>getClassName</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getClassName()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getContentDescription_changed()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getContentDescription()" target="_top"><code>getContentDescription</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getContentDescription()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getCurrentItemIndex_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getCurrentItemIndex()" target="_top"><code>getCurrentItemIndex</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getCurrentItemIndex()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getFromIndex_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getFromIndex()" target="_top"><code>getFromIndex</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getFromIndex()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getItemCount_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getItemCount()" target="_top"><code>getItemCount</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getItemCount()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getParcelableData_changed()"></A>
+ <nobr><code>Parcelable</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getParcelableData()" target="_top"><code>getParcelableData</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getParcelableData()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getRemovedCount_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getRemovedCount()" target="_top"><code>getRemovedCount</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getRemovedCount()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.getText_changed()"></A>
+ <nobr><code>List<CharSequence></code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getText()" target="_top"><code>getText</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#getText()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.isChecked_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isChecked()" target="_top"><code>isChecked</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isChecked()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.isEnabled_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isEnabled()" target="_top"><code>isEnabled</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isEnabled()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.isFullScreen_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isFullScreen()" target="_top"><code>isFullScreen</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isFullScreen()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.isPassword_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isPassword()" target="_top"><code>isPassword</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#isPassword()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.recycle_changed()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#recycle()" target="_top"><code>recycle</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#recycle()" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setAddedCount_changed(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setAddedCount(int)" target="_top"><code>setAddedCount</code></A>(<code>int</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setAddedCount(int)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setBeforeText_changed(java.lang.CharSequence)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setBeforeText(java.lang.CharSequence)" target="_top"><code>setBeforeText</code></A>(<code>CharSequence</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setBeforeText(java.lang.CharSequence)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setChecked_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setChecked(boolean)" target="_top"><code>setChecked</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setChecked(boolean)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setClassName_changed(java.lang.CharSequence)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setClassName(java.lang.CharSequence)" target="_top"><code>setClassName</code></A>(<code>CharSequence</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setClassName(java.lang.CharSequence)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setContentDescription_changed(java.lang.CharSequence)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setContentDescription(java.lang.CharSequence)" target="_top"><code>setContentDescription</code></A>(<code>CharSequence</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setContentDescription(java.lang.CharSequence)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setCurrentItemIndex_changed(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setCurrentItemIndex(int)" target="_top"><code>setCurrentItemIndex</code></A>(<code>int</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setCurrentItemIndex(int)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setEnabled_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setEnabled(boolean)" target="_top"><code>setEnabled</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setEnabled(boolean)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setFromIndex_changed(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setFromIndex(int)" target="_top"><code>setFromIndex</code></A>(<code>int</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setFromIndex(int)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setFullScreen_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setFullScreen(boolean)" target="_top"><code>setFullScreen</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setFullScreen(boolean)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setItemCount_changed(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setItemCount(int)" target="_top"><code>setItemCount</code></A>(<code>int</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setItemCount(int)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setParcelableData_changed(android.os.Parcelable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setParcelableData(android.os.Parcelable)" target="_top"><code>setParcelableData</code></A>(<code>Parcelable</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setParcelableData(android.os.Parcelable)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setPassword_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setPassword(boolean)" target="_top"><code>setPassword</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setPassword(boolean)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.setRemovedCount_changed(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setRemovedCount(int)" target="_top"><code>setRemovedCount</code></A>(<code>int</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/android/view/accessibility/AccessibilityRecord.html#setRemovedCount(int)" target="_top"><code>AccessibilityRecord</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_TOUCH_EXPLORATION_GESTURE_END" target="_top"><code>TYPE_TOUCH_EXPLORATION_GESTURE_END</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_TOUCH_EXPLORATION_GESTURE_START" target="_top"><code>TYPE_TOUCH_EXPLORATION_GESTURE_START</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_VIEW_HOVER_ENTER" target="_top"><code>TYPE_VIEW_HOVER_ENTER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_VIEW_HOVER_EXIT" target="_top"><code>TYPE_VIEW_HOVER_EXIT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_VIEW_SCROLLED" target="_top"><code>TYPE_VIEW_SCROLLED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_VIEW_TEXT_SELECTION_CHANGED" target="_top"><code>TYPE_VIEW_TEXT_SELECTION_CHANGED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#TYPE_WINDOW_CONTENT_CHANGED" target="_top"><code>TYPE_WINDOW_CONTENT_CHANGED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityEvent.html#MAX_TEXT_LENGTH" target="_top"><code>MAX_TEXT_LENGTH</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
new file mode 100644
index 0000000..6a072f7
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.accessibility.AccessibilityManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.accessibility.<A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html" target="_top"><font size="+2"><code>AccessibilityManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityManager.addAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html#addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" target="_top"><code>addAccessibilityStateChangeListener</code></A>(<code>AccessibilityStateChangeListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityManager.getEnabledAccessibilityServiceList_added(int)"></A>
+ <nobr><code>List<AccessibilityServiceInfo></code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html#getEnabledAccessibilityServiceList(int)" target="_top"><code>getEnabledAccessibilityServiceList</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityManager.getInstalledAccessibilityServiceList_added()"></A>
+ <nobr><code>List<AccessibilityServiceInfo></code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html#getInstalledAccessibilityServiceList()" target="_top"><code>getInstalledAccessibilityServiceList</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityManager.isTouchExplorationEnabled_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html#isTouchExplorationEnabled()" target="_top"><code>isTouchExplorationEnabled</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityManager.removeAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html#removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" target="_top"><code>removeAccessibilityStateChangeListener</code></A>(<code>AccessibilityStateChangeListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility.AccessibilityManager.getAccessibilityServiceList_changed()"></A>
+ <nobr><code>List<ServiceInfo></code> <A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.html#getAccessibilityServiceList()" target="_top"><code>getAccessibilityServiceList</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
new file mode 100644
index 0000000..ae39429
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.inputmethod.InputMethodManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.inputmethod.<A HREF="../../../../reference/android/view/inputmethod/InputMethodManager.html" target="_top"><font size="+2"><code>InputMethodManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodManager.getLastInputMethodSubtype_added()"></A>
+ <nobr><code>InputMethodSubtype</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodManager.html#getLastInputMethodSubtype()" target="_top"><code>getLastInputMethodSubtype</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodManager.setAdditionalInputMethodSubtypes_added(java.lang.String, android.view.inputmethod.InputMethodSubtype[])"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodManager.html#setAdditionalInputMethodSubtypes(java.lang.String, android.view.inputmethod.InputMethodSubtype[])" target="_top"><code>setAdditionalInputMethodSubtypes</code></A>(<code>String,</nobr> InputMethodSubtype[]<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodManager.viewClicked_added(android.view.View)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodManager.html#viewClicked(android.view.View)" target="_top"><code>viewClicked</code></A>(<code>View</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
new file mode 100644
index 0000000..c1ff358
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.inputmethod.InputMethodSession
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Interface android.view.inputmethod.<A HREF="../../../../reference/android/view/inputmethod/InputMethodSession.html" target="_top"><font size="+2"><code>InputMethodSession</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodSession.html#viewClicked(boolean)" target="_top"><code>viewClicked</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
new file mode 100644
index 0000000..f8e18fa
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.inputmethod.InputMethodSubtype
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.inputmethod.<A HREF="../../../../reference/android/view/inputmethod/InputMethodSubtype.html" target="_top"><font size="+2"><code>InputMethodSubtype</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodSubtype.ctor_added(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)"></A>
+ <nobr><A HREF="../../../../reference/android/view/inputmethod/InputMethodSubtype.html#InputMethodSubtype(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)" target="_top"><code>InputMethodSubtype</code></A>(<code>int,</nobr> int<nobr>,</nobr> String<nobr>,</nobr> String<nobr>,</nobr> String<nobr>,</nobr> boolean<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodSubtype.getDisplayName_added(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo)"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodSubtype.html#getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo)" target="_top"><code>getDisplayName</code></A>(<code>Context,</nobr> String<nobr>,</nobr> ApplicationInfo<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodSubtype.isAuxiliary_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodSubtype.html#isAuxiliary()" target="_top"><code>isAuxiliary</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod.InputMethodSubtype.overridesImplicitlyEnabledSubtype_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/inputmethod/InputMethodSubtype.html#overridesImplicitlyEnabledSubtype()" target="_top"><code>overridesImplicitlyEnabledSubtype</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
new file mode 100644
index 0000000..d88e6c9
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebChromeClient
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebChromeClient.html" target="_top"><font size="+2"><code>WebChromeClient</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onShowCustomView(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback)" target="_top"><code>onShowCustomView</code></A>(<code>View,</nobr> int<nobr>,</nobr> CustomViewCallback<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
new file mode 100644
index 0000000..5555034
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebSettings.TextSize
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebSettings.TextSize.html" target="_top"><font size="+2"><code>WebSettings.TextSize</code></font></A>
+</H2>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html
new file mode 100644
index 0000000..2966bb8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebSettings
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebSettings.html" target="_top"><font size="+2"><code>WebSettings</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.getTextZoom_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#getTextZoom()" target="_top"><code>getTextZoom</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setTextZoom_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setTextZoom(int)" target="_top"><code>setTextZoom</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.getTextSize_changed()"></A>
+ <nobr><code>TextSize</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#getTextSize()" target="_top"><code>getTextSize</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setTextSize_changed(android.webkit.WebSettings.TextSize)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setTextSize(android.webkit.WebSettings.TextSize)" target="_top"><code>setTextSize</code></A>(<code>TextSize</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
new file mode 100644
index 0000000..7778856
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebView.HitTestResult
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebView.HitTestResult.html" target="_top"><font size="+2"><code>WebView.HitTestResult</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebView.HitTestResult.ANCHOR_TYPE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/webkit/WebView.HitTestResult.html#ANCHOR_TYPE" target="_top"><code>ANCHOR_TYPE</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebView.HitTestResult.IMAGE_ANCHOR_TYPE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/webkit/WebView.HitTestResult.html#IMAGE_ANCHOR_TYPE" target="_top"><code>IMAGE_ANCHOR_TYPE</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html b/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html
new file mode 100644
index 0000000..c11c111
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.AbsListView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/AbsListView.html" target="_top"><font size="+2"><code>AbsListView</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.AbsListView.deferNotifyDataSetChanged_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/AbsListView.html#deferNotifyDataSetChanged()" target="_top"><code>deferNotifyDataSetChanged</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html b/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
new file mode 100644
index 0000000..0d1bccd
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.AdapterViewAnimator
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/AdapterViewAnimator.html" target="_top"><font size="+2"><code>AdapterViewAnimator</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.AdapterViewAnimator.ctor_added(android.content.Context, android.util.AttributeSet, int)"></A>
+ <nobr><A HREF="../../../../reference/android/widget/AdapterViewAnimator.html#AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int)" target="_top"><code>AdapterViewAnimator</code></A>(<code>Context,</nobr> AttributeSet<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.AdapterViewAnimator.deferNotifyDataSetChanged_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/AdapterViewAnimator.html#deferNotifyDataSetChanged()" target="_top"><code>deferNotifyDataSetChanged</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html b/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
new file mode 100644
index 0000000..71b928a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.ExpandableListView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/ExpandableListView.html" target="_top"><font size="+2"><code>ExpandableListView</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.ExpandableListView.expandGroup_added(int, boolean)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/widget/ExpandableListView.html#expandGroup(int, boolean)" target="_top"><code>expandGroup</code></A>(<code>int,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html b/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html
new file mode 100644
index 0000000..be62cbfc
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.FrameLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/FrameLayout.html" target="_top"><font size="+2"><code>FrameLayout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.FrameLayout.getMeasureAllChildren_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/widget/FrameLayout.html#getMeasureAllChildren()" target="_top"><code>getMeasureAllChildren</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.FrameLayout.getConsiderGoneChildrenWhenMeasuring_changed()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/widget/FrameLayout.html#getConsiderGoneChildrenWhenMeasuring()" target="_top"><code>getConsiderGoneChildrenWhenMeasuring</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html b/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html
new file mode 100644
index 0000000..33de5d1
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.LinearLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/LinearLayout.html" target="_top"><font size="+2"><code>LinearLayout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.LinearLayout.getDividerPadding_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/widget/LinearLayout.html#getDividerPadding()" target="_top"><code>getDividerPadding</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.LinearLayout.setDividerPadding_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/LinearLayout.html#setDividerPadding(int)" target="_top"><code>setDividerPadding</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html b/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html
new file mode 100644
index 0000000..3c902cf
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.OverScroller
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/OverScroller.html" target="_top"><font size="+2"><code>OverScroller</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.OverScroller.getCurrVelocity_added()"></A>
+ <nobr><code>float</code> <A HREF="../../../../reference/android/widget/OverScroller.html#getCurrVelocity()" target="_top"><code>getCurrVelocity</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html b/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html
new file mode 100644
index 0000000..5a82801
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.PopupMenu
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/PopupMenu.html" target="_top"><font size="+2"><code>PopupMenu</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.PopupMenu.inflate_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/PopupMenu.html#inflate(int)" target="_top"><code>inflate</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.PopupMenu.setOnDismissListener_added(android.widget.PopupMenu.OnDismissListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/PopupMenu.html#setOnDismissListener(android.widget.PopupMenu.OnDismissListener)" target="_top"><code>setOnDismissListener</code></A>(<code>OnDismissListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html
new file mode 100644
index 0000000..2750719
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.RemoteViews
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/RemoteViews.html" target="_top"><font size="+2"><code>RemoteViews</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.RemoteViews.setRemoteAdapter_added(int, android.content.Intent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/RemoteViews.html#setRemoteAdapter(int, android.content.Intent)" target="_top"><code>setRemoteAdapter</code></A>(<code>int,</nobr> Intent<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.RemoteViews.setRemoteAdapter_changed(int, int, android.content.Intent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/RemoteViews.html#setRemoteAdapter(int, int, android.content.Intent)" target="_top"><code>setRemoteAdapter</code></A>(<code>int,</nobr> int<nobr>,</nobr> Intent<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html b/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html
new file mode 100644
index 0000000..d586513
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.Scroller
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/Scroller.html" target="_top"><font size="+2"><code>Scroller</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.Scroller.getCurrVelocity_added()"></A>
+ <nobr><code>float</code> <A HREF="../../../../reference/android/widget/Scroller.html#getCurrVelocity()" target="_top"><code>getCurrVelocity</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html b/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html
new file mode 100644
index 0000000..1116d30
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.SearchView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/SearchView.html" target="_top"><font size="+2"><code>SearchView</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.view.CollapsibleActionView</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.SearchView.onActionViewCollapsed_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/SearchView.html#onActionViewCollapsed()" target="_top"><code>onActionViewCollapsed</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.SearchView.onActionViewExpanded_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/SearchView.html#onActionViewExpanded()" target="_top"><code>onActionViewExpanded</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.SearchView.setImeOptions_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/SearchView.html#setImeOptions(int)" target="_top"><code>setImeOptions</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.SearchView.setInputType_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/SearchView.html#setInputType(int)" target="_top"><code>setInputType</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html b/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html
new file mode 100644
index 0000000..6b491d0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.StackView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/StackView.html" target="_top"><font size="+2"><code>StackView</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.StackView.ctor_added(android.content.Context, android.util.AttributeSet, int)"></A>
+ <nobr><A HREF="../../../../reference/android/widget/StackView.html#StackView(android.content.Context, android.util.AttributeSet, int)" target="_top"><code>StackView</code></A>(<code>Context,</nobr> AttributeSet<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html
new file mode 100644
index 0000000..a2909ac
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.TextView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/TextView.html" target="_top"><font size="+2"><code>TextView</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.getOffsetForPosition_added(float, float)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/widget/TextView.html#getOffsetForPosition(float, float)" target="_top"><code>getOffsetForPosition</code></A>(<code>float,</nobr> float<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.isSuggestionsEnabled_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/widget/TextView.html#isSuggestionsEnabled()" target="_top"><code>isSuggestionsEnabled</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.resetResolvedDrawables_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/TextView.html#resetResolvedDrawables()" target="_top"><code>resetResolvedDrawables</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.resetResolvedLayoutDirection_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/TextView.html#resetResolvedLayoutDirection()" target="_top"><code>resetResolvedLayoutDirection</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.resolveDrawables_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/TextView.html#resolveDrawables()" target="_top"><code>resolveDrawables</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.resolveTextDirection_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/TextView.html#resolveTextDirection()" target="_top"><code>resolveTextDirection</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.TextView.setAllCaps_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/TextView.html#setAllCaps(boolean)" target="_top"><code>setAllCaps</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/changes-summary.html b/docs/html/sdk/api_diff/14/changes/changes-summary.html
new file mode 100644
index 0000000..ccb5d26
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/changes-summary.html
@@ -0,0 +1,507 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Android API Differences Report
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<body class="gc-documentation">
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+ <div id="docTitleContainer">
+<h1>Android API Differences Report</h1>
+<p>This report details the changes in the core Android framework API between two <a
+href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a>
+specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields.
+The report also includes general statistics that characterize the extent and type of the differences.</p>
+<p>This report is based a comparison of the Android API specifications
+whose API Level identifiers are given in the upper-right corner of this page. It compares a
+newer "to" API to an older "from" API, noting all changes relative to the
+older API. So, for example, API elements marked as removed are no longer present in the "to"
+API specification.</p>
+<p>To navigate the report, use the "Select a Diffs Index" and "Filter the Index"
+controls on the left. The report uses text formatting to indicate <em>interface names</em>,
+<a href= ><code>links to reference documentation</code></a>, and <a href= >links to change
+description</a>. The statistics are accessible from the "Statistics" link in the upper-right corner.</p>
+<p>For more information about the Android framework API and SDK,
+see the <a href="http://developer.android.com/index.html" target="_top">Android Developers site</a>.</p>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.effect"></A>
+ <nobr><A HREF="../../../../reference/android/media/effect/package-summary.html" target="_top"><code>android.media.effect</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.wifi.p2p"></A>
+ <nobr><A HREF="../../../../reference/android/net/wifi/p2p/package-summary.html" target="_top"><code>android.net.wifi.p2p</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.security"></A>
+ <nobr><A HREF="../../../../reference/android/security/package-summary.html" target="_top"><code>android.security</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.service.textservice"></A>
+ <nobr><A HREF="../../../../reference/android/service/textservice/package-summary.html" target="_top"><code>android.service.textservice</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.textservice"></A>
+ <nobr><A HREF="../../../../reference/android/view/textservice/package-summary.html" target="_top"><code>android.view.textservice</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android"></A>
+ <nobr><A HREF="pkg_android.html">android</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accessibilityservice"></A>
+ <nobr><A HREF="pkg_android.accessibilityservice.html">android.accessibilityservice</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.accounts"></A>
+ <nobr><A HREF="pkg_android.accounts.html">android.accounts</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.animation"></A>
+ <nobr><A HREF="pkg_android.animation.html">android.animation</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app"></A>
+ <nobr><A HREF="pkg_android.app.html">android.app</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.admin"></A>
+ <nobr><A HREF="pkg_android.app.admin.html">android.app.admin</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.backup"></A>
+ <nobr><A HREF="pkg_android.app.backup.html">android.app.backup</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.appwidget"></A>
+ <nobr><A HREF="pkg_android.appwidget.html">android.appwidget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.bluetooth"></A>
+ <nobr><A HREF="pkg_android.bluetooth.html">android.bluetooth</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content"></A>
+ <nobr><A HREF="pkg_android.content.html">android.content</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm"></A>
+ <nobr><A HREF="pkg_android.content.pm.html">android.content.pm</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.database.sqlite"></A>
+ <nobr><A HREF="pkg_android.database.sqlite.html">android.database.sqlite</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics"></A>
+ <nobr><A HREF="pkg_android.graphics.html">android.graphics</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.hardware"></A>
+ <nobr><A HREF="pkg_android.hardware.html">android.hardware</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.inputmethodservice"></A>
+ <nobr><A HREF="pkg_android.inputmethodservice.html">android.inputmethodservice</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media"></A>
+ <nobr><A HREF="pkg_android.media.html">android.media</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net"></A>
+ <nobr><A HREF="pkg_android.net.html">android.net</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.http"></A>
+ <nobr><A HREF="pkg_android.net.http.html">android.net.http</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.net.wifi"></A>
+ <nobr><A HREF="pkg_android.net.wifi.html">android.net.wifi</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc"></A>
+ <nobr><A HREF="pkg_android.nfc.html">android.nfc</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.nfc.tech"></A>
+ <nobr><A HREF="pkg_android.nfc.tech.html">android.nfc.tech</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.opengl"></A>
+ <nobr><A HREF="pkg_android.opengl.html">android.opengl</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os"></A>
+ <nobr><A HREF="pkg_android.os.html">android.os</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.preference"></A>
+ <nobr><A HREF="pkg_android.preference.html">android.preference</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.provider"></A>
+ <nobr><A HREF="pkg_android.provider.html">android.provider</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.renderscript"></A>
+ <nobr><A HREF="pkg_android.renderscript.html">android.renderscript</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.service.wallpaper"></A>
+ <nobr><A HREF="pkg_android.service.wallpaper.html">android.service.wallpaper</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech"></A>
+ <nobr><A HREF="pkg_android.speech.html">android.speech</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.speech.tts"></A>
+ <nobr><A HREF="pkg_android.speech.tts.html">android.speech.tts</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.test.mock"></A>
+ <nobr><A HREF="pkg_android.test.mock.html">android.test.mock</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.text"></A>
+ <nobr><A HREF="pkg_android.text.html">android.text</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.text.style"></A>
+ <nobr><A HREF="pkg_android.text.style.html">android.text.style</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.util"></A>
+ <nobr><A HREF="pkg_android.util.html">android.util</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view"></A>
+ <nobr><A HREF="pkg_android.view.html">android.view</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.accessibility"></A>
+ <nobr><A HREF="pkg_android.view.accessibility.html">android.view.accessibility</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.inputmethod"></A>
+ <nobr><A HREF="pkg_android.view.inputmethod.html">android.view.inputmethod</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit"></A>
+ <nobr><A HREF="pkg_android.webkit.html">android.webkit</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget"></A>
+ <nobr><A HREF="pkg_android.widget.html">android.widget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="dalvik.annotation"></A>
+ <nobr><A HREF="pkg_dalvik.annotation.html">dalvik.annotation</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="dalvik.system"></A>
+ <nobr><A HREF="pkg_dalvik.system.html">dalvik.system</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.io"></A>
+ <nobr><A HREF="pkg_java.io.html">java.io</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang"></A>
+ <nobr><A HREF="pkg_java.lang.html">java.lang</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.ref"></A>
+ <nobr><A HREF="pkg_java.lang.ref.html">java.lang.ref</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.reflect"></A>
+ <nobr><A HREF="pkg_java.lang.reflect.html">java.lang.reflect</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.net"></A>
+ <nobr><A HREF="pkg_java.net.html">java.net</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security"></A>
+ <nobr><A HREF="pkg_java.security.html">java.security</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.util.logging"></A>
+ <nobr><A HREF="pkg_java.util.logging.html">java.util.logging</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="javax.security.auth"></A>
+ <nobr><A HREF="pkg_javax.security.auth.html">javax.security.auth</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<!-- End of API section -->
+<!-- Start of packages section -->
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_additions.html b/docs/html/sdk/api_diff/14/changes/classes_index_additions.html
new file mode 100644
index 0000000..72461ce
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_additions.html
@@ -0,0 +1,421 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.view.accessibility.html#AccessibilityManager.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManager.AccessibilityStateChangeListener</i></b></A><br>
+<A HREF="pkg_android.view.accessibility.html#AccessibilityNodeInfo" class="hiddenlink" target="rightframe"><b>AccessibilityNodeInfo</b></A><br>
+<A HREF="pkg_android.view.accessibility.html#AccessibilityRecord" class="hiddenlink" target="rightframe"><b>AccessibilityRecord</b></A><br>
+<A HREF="pkg_android.view.html#ActionProvider" class="hiddenlink" target="rightframe"><b>ActionProvider</b></A><br>
+<A HREF="pkg_android.app.html#Application.ActivityLifecycleCallbacks" class="hiddenlink" target="rightframe"><b><i>Application.ActivityLifecycleCallbacks</i></b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.AnrInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.AnrInfo</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.BatteryInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.BatteryInfo</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.CrashInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.CrashInfo</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.RunningServiceInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.RunningServiceInfo</b></A><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_dalvik.system.html#BaseDexClassLoader" class="hiddenlink" target="rightframe"><b>BaseDexClassLoader</b></A><br>
+<A HREF="pkg_android.bluetooth.html#BluetoothHealth" class="hiddenlink" target="rightframe"><b>BluetoothHealth</b></A><br>
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthAppConfiguration" class="hiddenlink" target="rightframe"><b>BluetoothHealthAppConfiguration</b></A><br>
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthCallback" class="hiddenlink" target="rightframe"><b>BluetoothHealthCallback</b></A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.provider.html#CalendarContract" class="hiddenlink" target="rightframe"><b>CalendarContract</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Attendees" class="hiddenlink" target="rightframe"><b>CalendarContract.Attendees</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.AttendeesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.AttendeesColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlerts" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarAlerts</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlertsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarAlertsColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCache" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarCache</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCacheColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarCacheColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarEntity</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Calendars" class="hiddenlink" target="rightframe"><b>CalendarContract.Calendars</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarSyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarSyncColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventDays" class="hiddenlink" target="rightframe"><b>CalendarContract.EventDays</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventDaysColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventDaysColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Events" class="hiddenlink" target="rightframe"><b>CalendarContract.Events</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventsColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventsEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.EventsEntity</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedProperties" class="hiddenlink" target="rightframe"><b>CalendarContract.ExtendedProperties</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedPropertiesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.ExtendedPropertiesColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Instances" class="hiddenlink" target="rightframe"><b>CalendarContract.Instances</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Reminders" class="hiddenlink" target="rightframe"><b>CalendarContract.Reminders</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.RemindersColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.RemindersColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.SyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.SyncColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.SyncState" class="hiddenlink" target="rightframe"><b>CalendarContract.SyncState</b></A><br>
+<A HREF="pkg_android.hardware.html#Camera.Area" class="hiddenlink" target="rightframe"><b>Camera.Area</b></A><br>
+<A HREF="pkg_android.hardware.html#Camera.Face" class="hiddenlink" target="rightframe"><b>Camera.Face</b></A><br>
+<A HREF="pkg_android.hardware.html#Camera.FaceDetectionListener" class="hiddenlink" target="rightframe"><b><i>Camera.FaceDetectionListener</i></b></A><br>
+<A HREF="pkg_android.view.html#CollapsibleActionView" class="hiddenlink" target="rightframe"><b><i>CollapsibleActionView</i></b></A><br>
+<A HREF="pkg_android.content.html#ComponentCallbacks2" class="hiddenlink" target="rightframe"><b><i>ComponentCallbacks2</i></b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.CommonDataKinds.Identity" class="hiddenlink" target="rightframe"><b>ContactsContract.CommonDataKinds.Identity</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.DataUsageFeedback" class="hiddenlink" target="rightframe"><b>ContactsContract.DataUsageFeedback</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.DisplayPhoto</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.Profile" class="hiddenlink" target="rightframe"><b>ContactsContract.Profile</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.ProfileSyncState" class="hiddenlink" target="rightframe"><b>ContactsContract.ProfileSyncState</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.RawContacts.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.RawContacts.DisplayPhoto</b></A><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.renderscript.html#Double2" class="hiddenlink" target="rightframe"><b>Double2</b></A><br>
+<A HREF="pkg_android.renderscript.html#Double3" class="hiddenlink" target="rightframe"><b>Double3</b></A><br>
+<A HREF="pkg_android.renderscript.html#Double4" class="hiddenlink" target="rightframe"><b>Double4</b></A><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.text.style.html#EasyEditSpan" class="hiddenlink" target="rightframe"><b>EasyEditSpan</b></A><br>
+<A HREF="pkg_android.widget.html#EdgeEffect" class="hiddenlink" target="rightframe"><b>EdgeEffect</b></A><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.app.backup.html#FullBackupDataOutput" class="hiddenlink" target="rightframe"><b>FullBackupDataOutput</b></A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<A HREF="pkg_android.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<A HREF="pkg_android.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<A HREF="pkg_android.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.view.html#MenuItem.OnActionExpandListener" class="hiddenlink" target="rightframe"><b><i>MenuItem.OnActionExpandListener</i></b></A><br>
+<A HREF="pkg_android.view.html#MotionEvent.PointerProperties" class="hiddenlink" target="rightframe"><b>MotionEvent.PointerProperties</b></A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.nfc.html#NfcAdapter.CreateNdefMessageCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.CreateNdefMessageCallback</i></b></A><br>
+<A HREF="pkg_android.nfc.html#NfcAdapter.OnNdefPushCompleteCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.OnNdefPushCompleteCallback</i></b></A><br>
+<A HREF="pkg_android.nfc.html#NfcEvent" class="hiddenlink" target="rightframe"><b>NfcEvent</b></A><br>
+<A HREF="pkg_android.util.html#NoSuchPropertyException" class="hiddenlink" target="rightframe"><b>NoSuchPropertyException</b></A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<A HREF="pkg_android.util.html#Property" class="hiddenlink" target="rightframe"><b>Property</b></A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.media.html#RemoteControlClient" class="hiddenlink" target="rightframe"><b>RemoteControlClient</b></A><br>
+<A HREF="pkg_android.media.html#RemoteControlClient.MetadataEditor" class="hiddenlink" target="rightframe"><b>RemoteControlClient.MetadataEditor</b></A><br>
+<A HREF="pkg_android.renderscript.html#RSTextureView" class="hiddenlink" target="rightframe"><b>RSTextureView</b></A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<A HREF="pkg_android.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<A HREF="pkg_android.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<A HREF="pkg_android.text.style.html#SuggestionSpan" class="hiddenlink" target="rightframe"><b>SuggestionSpan</b></A><br>
+<A HREF="pkg_android.widget.html#Switch" class="hiddenlink" target="rightframe"><b>Switch</b></A><br>
+<A HREF="pkg_android.preference.html#SwitchPreference" class="hiddenlink" target="rightframe"><b>SwitchPreference</b></A><br>
+<A HREF="pkg_android.speech.tts.html#SynthesisCallback" class="hiddenlink" target="rightframe"><b><i>SynthesisCallback</i></b></A><br>
+<A HREF="pkg_android.speech.tts.html#SynthesisRequest" class="hiddenlink" target="rightframe"><b>SynthesisRequest</b></A><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.speech.tts.html#TextToSpeech.EngineInfo" class="hiddenlink" target="rightframe"><b>TextToSpeech.EngineInfo</b></A><br>
+<A HREF="pkg_android.speech.tts.html#TextToSpeechService" class="hiddenlink" target="rightframe"><b>TextToSpeechService</b></A><br>
+<A HREF="pkg_android.view.html#TextureView" class="hiddenlink" target="rightframe"><b>TextureView</b></A><br>
+<A HREF="pkg_android.view.html#TextureView.SurfaceTextureListener" class="hiddenlink" target="rightframe"><b><i>TextureView.SurfaceTextureListener</i></b></A><br>
+<A HREF="pkg_android.preference.html#TwoStatePreference" class="hiddenlink" target="rightframe"><b>TwoStatePreference</b></A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.view.html#View.AccessibilityDelegate" class="hiddenlink" target="rightframe"><b>View.AccessibilityDelegate</b></A><br>
+<A HREF="pkg_android.view.html#View.OnHoverListener" class="hiddenlink" target="rightframe"><b><i>View.OnHoverListener</i></b></A><br>
+<A HREF="pkg_android.provider.html#VoicemailContract" class="hiddenlink" target="rightframe"><b>VoicemailContract</b></A><br>
+<A HREF="pkg_android.provider.html#VoicemailContract.Status" class="hiddenlink" target="rightframe"><b>VoicemailContract.Status</b></A><br>
+<A HREF="pkg_android.provider.html#VoicemailContract.Voicemails" class="hiddenlink" target="rightframe"><b>VoicemailContract.Voicemails</b></A><br>
+<A HREF="pkg_android.net.html#VpnService" class="hiddenlink" target="rightframe"><b>VpnService</b></A><br>
+<A HREF="pkg_android.net.html#VpnService.Builder" class="hiddenlink" target="rightframe"><b>VpnService.Builder</b></A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.net.wifi.html#WpsInfo" class="hiddenlink" target="rightframe"><b>WpsInfo</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_all.html b/docs/html/sdk/api_diff/14/changes/classes_index_all.html
new file mode 100644
index 0000000..ef8ccca
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_all.html
@@ -0,0 +1,848 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Classes</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.widget.AbsListView.html" class="hiddenlink" target="rightframe">AbsListView</A><br>
+<A HREF="android.view.accessibility.AccessibilityEvent.html" class="hiddenlink" target="rightframe">AccessibilityEvent</A><br>
+<A HREF="android.view.accessibility.AccessibilityManager.html" class="hiddenlink" target="rightframe">AccessibilityManager</A><br>
+<A HREF="pkg_android.view.accessibility.html#AccessibilityManager.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManager.AccessibilityStateChangeListener</i></b></A><br>
+<A HREF="pkg_android.view.accessibility.html#AccessibilityNodeInfo" class="hiddenlink" target="rightframe"><b>AccessibilityNodeInfo</b></A><br>
+<A HREF="pkg_android.view.accessibility.html#AccessibilityRecord" class="hiddenlink" target="rightframe"><b>AccessibilityRecord</b></A><br>
+<A HREF="android.accessibilityservice.AccessibilityService.html" class="hiddenlink" target="rightframe">AccessibilityService</A><br>
+<A HREF="android.accessibilityservice.AccessibilityServiceInfo.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfo</A><br>
+<A HREF="java.lang.reflect.AccessibleObject.html" class="hiddenlink" target="rightframe">AccessibleObject</A><br>
+<A HREF="android.accounts.AccountManager.html" class="hiddenlink" target="rightframe">AccountManager</A><br>
+<A HREF="android.app.ActionBar.html" class="hiddenlink" target="rightframe">ActionBar</A><br>
+<A HREF="android.app.ActionBar.Tab.html" class="hiddenlink" target="rightframe">ActionBar.Tab</A><br>
+<A HREF="android.view.ActionMode.html" class="hiddenlink" target="rightframe">ActionMode</A><br>
+<A HREF="pkg_android.view.html#ActionProvider" class="hiddenlink" target="rightframe"><b>ActionProvider</b></A><br>
+<A HREF="android.app.Activity.html" class="hiddenlink" target="rightframe">Activity</A><br>
+<A HREF="android.content.pm.ActivityInfo.html" class="hiddenlink" target="rightframe">ActivityInfo</A><br>
+<A HREF="android.widget.AdapterViewAnimator.html" class="hiddenlink" target="rightframe">AdapterViewAnimator</A><br>
+<A HREF="android.app.AlertDialog.html" class="hiddenlink" target="rightframe">AlertDialog</A><br>
+<A HREF="android.renderscript.Allocation.html" class="hiddenlink" target="rightframe">Allocation</A><br>
+<A HREF="android.renderscript.AllocationAdapter.html" class="hiddenlink" target="rightframe">AllocationAdapter</A><br>
+<A HREF="java.security.AllPermission.html" class="hiddenlink" target="rightframe">AllPermission</A><br>
+<A HREF="android.animation.Animator.html" class="hiddenlink" target="rightframe">Animator</A><br>
+<A HREF="android.app.Application.html" class="hiddenlink" target="rightframe">Application</A><br>
+<A HREF="pkg_android.app.html#Application.ActivityLifecycleCallbacks" class="hiddenlink" target="rightframe"><b><i>Application.ActivityLifecycleCallbacks</i></b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.AnrInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.AnrInfo</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.BatteryInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.BatteryInfo</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.CrashInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.CrashInfo</b></A><br>
+<A HREF="pkg_android.app.html#ApplicationErrorReport.RunningServiceInfo" class="hiddenlink" target="rightframe"><b>ApplicationErrorReport.RunningServiceInfo</b></A><br>
+<A HREF="android.content.pm.ApplicationInfo.html" class="hiddenlink" target="rightframe">ApplicationInfo</A><br>
+<A HREF="android.appwidget.AppWidgetProviderInfo.html" class="hiddenlink" target="rightframe">AppWidgetProviderInfo</A><br>
+<A HREF="android.media.AudioManager.html" class="hiddenlink" target="rightframe">AudioManager</A><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.backup.BackupAgent.html" class="hiddenlink" target="rightframe">BackupAgent</A><br>
+<A HREF="pkg_dalvik.system.html#BaseDexClassLoader" class="hiddenlink" target="rightframe"><b>BaseDexClassLoader</b></A><br>
+<A HREF="android.renderscript.BaseObj.html" class="hiddenlink" target="rightframe">BaseObj</A><br>
+<A HREF="java.security.BasicPermission.html" class="hiddenlink" target="rightframe">BasicPermission</A><br>
+<A HREF="android.bluetooth.BluetoothAdapter.html" class="hiddenlink" target="rightframe">BluetoothAdapter</A><br>
+<A HREF="pkg_android.bluetooth.html#BluetoothHealth" class="hiddenlink" target="rightframe"><b>BluetoothHealth</b></A><br>
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthAppConfiguration" class="hiddenlink" target="rightframe"><b>BluetoothHealthAppConfiguration</b></A><br>
+<A HREF="pkg_android.bluetooth.html#BluetoothHealthCallback" class="hiddenlink" target="rightframe"><b>BluetoothHealthCallback</b></A><br>
+<A HREF="android.bluetooth.BluetoothProfile.html" class="hiddenlink" target="rightframe"><i>BluetoothProfile</i></A><br>
+<A HREF="android.bluetooth.BluetoothSocket.html" class="hiddenlink" target="rightframe">BluetoothSocket</A><br>
+<A HREF="android.os.Build.html" class="hiddenlink" target="rightframe">Build</A><br>
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<A HREF="android.renderscript.Byte2.html" class="hiddenlink" target="rightframe">Byte2</A><br>
+<A HREF="android.renderscript.Byte3.html" class="hiddenlink" target="rightframe">Byte3</A><br>
+<A HREF="android.renderscript.Byte4.html" class="hiddenlink" target="rightframe">Byte4</A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.provider.html#CalendarContract" class="hiddenlink" target="rightframe"><b>CalendarContract</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Attendees" class="hiddenlink" target="rightframe"><b>CalendarContract.Attendees</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.AttendeesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.AttendeesColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlerts" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarAlerts</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarAlertsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarAlertsColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCache" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarCache</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarCacheColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarCacheColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.CalendarEntity</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Calendars" class="hiddenlink" target="rightframe"><b>CalendarContract.Calendars</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.CalendarSyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.CalendarSyncColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventDays" class="hiddenlink" target="rightframe"><b>CalendarContract.EventDays</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventDaysColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventDaysColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Events" class="hiddenlink" target="rightframe"><b>CalendarContract.Events</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventsColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.EventsColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.EventsEntity" class="hiddenlink" target="rightframe"><b>CalendarContract.EventsEntity</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedProperties" class="hiddenlink" target="rightframe"><b>CalendarContract.ExtendedProperties</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.ExtendedPropertiesColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.ExtendedPropertiesColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Instances" class="hiddenlink" target="rightframe"><b>CalendarContract.Instances</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.Reminders" class="hiddenlink" target="rightframe"><b>CalendarContract.Reminders</b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.RemindersColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.RemindersColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.SyncColumns" class="hiddenlink" target="rightframe"><b><i>CalendarContract.SyncColumns</i></b></A><br>
+<A HREF="pkg_android.provider.html#CalendarContract.SyncState" class="hiddenlink" target="rightframe"><b>CalendarContract.SyncState</b></A><br>
+<A HREF="android.provider.CallLog.Calls.html" class="hiddenlink" target="rightframe">CallLog.Calls</A><br>
+<A HREF="android.hardware.Camera.html" class="hiddenlink" target="rightframe">Camera</A><br>
+<A HREF="pkg_android.hardware.html#Camera.Area" class="hiddenlink" target="rightframe"><b>Camera.Area</b></A><br>
+<A HREF="pkg_android.hardware.html#Camera.Face" class="hiddenlink" target="rightframe"><b>Camera.Face</b></A><br>
+<A HREF="pkg_android.hardware.html#Camera.FaceDetectionListener" class="hiddenlink" target="rightframe"><b><i>Camera.FaceDetectionListener</i></b></A><br>
+<A HREF="android.hardware.Camera.Parameters.html" class="hiddenlink" target="rightframe">Camera.Parameters</A><br>
+<A HREF="android.graphics.Canvas.html" class="hiddenlink" target="rightframe">Canvas</A><br>
+<A HREF="android.preference.CheckBoxPreference.html" class="hiddenlink" target="rightframe">CheckBoxPreference</A><br>
+<A HREF="java.lang.Class.html" class="hiddenlink" target="rightframe">Class</A><br>
+<A HREF="pkg_android.view.html#CollapsibleActionView" class="hiddenlink" target="rightframe"><b><i>CollapsibleActionView</i></b></A><br>
+<A HREF="pkg_android.content.html#ComponentCallbacks2" class="hiddenlink" target="rightframe"><b><i>ComponentCallbacks2</i></b></A><br>
+<A HREF="android.util.Config.html" class="hiddenlink" target="rightframe">Config</A><br>
+<A HREF="android.net.ConnectivityManager.html" class="hiddenlink" target="rightframe">ConnectivityManager</A><br>
+<A HREF="java.lang.reflect.Constructor.html" class="hiddenlink" target="rightframe">Constructor</A><br>
+<A HREF="android.provider.ContactsContract.html" class="hiddenlink" target="rightframe">ContactsContract</A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.CommonDataKinds.Identity" class="hiddenlink" target="rightframe"><b>ContactsContract.CommonDataKinds.Identity</b></A><br>
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.CommonDataKinds.Photo</A><br>
+<A HREF="android.provider.ContactsContract.Contacts.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts</A><br>
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts.Photo</A><br>
+<A HREF="android.provider.ContactsContract.ContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.ContactsColumns</i></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.DataUsageFeedback" class="hiddenlink" target="rightframe"><b>ContactsContract.DataUsageFeedback</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.DisplayPhoto</b></A><br>
+<A HREF="android.provider.ContactsContract.GroupsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.GroupsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.Intents.html" class="hiddenlink" target="rightframe">ContactsContract.Intents</A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.Profile" class="hiddenlink" target="rightframe"><b>ContactsContract.Profile</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.ProfileSyncState" class="hiddenlink" target="rightframe"><b>ContactsContract.ProfileSyncState</b></A><br>
+<A HREF="pkg_android.provider.html#ContactsContract.RawContacts.DisplayPhoto" class="hiddenlink" target="rightframe"><b>ContactsContract.RawContacts.DisplayPhoto</b></A><br>
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.RawContactsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html" class="hiddenlink" target="rightframe">ContactsContract.RawContactsEntity</A><br>
+<A HREF="android.provider.ContactsContract.SettingsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.SettingsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.StatusUpdates.html" class="hiddenlink" target="rightframe">ContactsContract.StatusUpdates</A><br>
+<A HREF="android.content.ContentProvider.html" class="hiddenlink" target="rightframe">ContentProvider</A><br>
+<A HREF="android.content.Context.html" class="hiddenlink" target="rightframe">Context</A><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.os.Debug.html" class="hiddenlink" target="rightframe">Debug</A><br>
+<A HREF="android.os.Debug.MemoryInfo.html" class="hiddenlink" target="rightframe">Debug.MemoryInfo</A><br>
+<A HREF="android.app.admin.DeviceAdminInfo.html" class="hiddenlink" target="rightframe">DeviceAdminInfo</A><br>
+<A HREF="android.app.admin.DevicePolicyManager.html" class="hiddenlink" target="rightframe">DevicePolicyManager</A><br>
+<A HREF="dalvik.system.DexClassLoader.html" class="hiddenlink" target="rightframe">DexClassLoader</A><br>
+<A HREF="pkg_android.renderscript.html#Double2" class="hiddenlink" target="rightframe"><b>Double2</b></A><br>
+<A HREF="pkg_android.renderscript.html#Double3" class="hiddenlink" target="rightframe"><b>Double3</b></A><br>
+<A HREF="pkg_android.renderscript.html#Double4" class="hiddenlink" target="rightframe"><b>Double4</b></A><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.text.style.html#EasyEditSpan" class="hiddenlink" target="rightframe"><b>EasyEditSpan</b></A><br>
+<A HREF="pkg_android.widget.html#EdgeEffect" class="hiddenlink" target="rightframe"><b>EdgeEffect</b></A><br>
+<A HREF="android.renderscript.Element.html" class="hiddenlink" target="rightframe">Element</A><br>
+<A HREF="android.widget.ExpandableListView.html" class="hiddenlink" target="rightframe">ExpandableListView</A><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="java.lang.reflect.Field.html" class="hiddenlink" target="rightframe">Field</A><br>
+<A HREF="android.renderscript.FieldPacker.html" class="hiddenlink" target="rightframe">FieldPacker</A><br>
+<A HREF="java.io.FilePermission.html" class="hiddenlink" target="rightframe">FilePermission</A><br>
+<A HREF="android.animation.FloatEvaluator.html" class="hiddenlink" target="rightframe">FloatEvaluator</A><br>
+<A HREF="android.app.Fragment.html" class="hiddenlink" target="rightframe">Fragment</A><br>
+<A HREF="android.app.FragmentManager.html" class="hiddenlink" target="rightframe">FragmentManager</A><br>
+<A HREF="android.app.FragmentManager.BackStackEntry.html" class="hiddenlink" target="rightframe"><i>FragmentManager.BackStackEntry</i></A><br>
+<A HREF="android.widget.FrameLayout.html" class="hiddenlink" target="rightframe">FrameLayout</A><br>
+<A HREF="pkg_android.app.backup.html#FullBackupDataOutput" class="hiddenlink" target="rightframe"><b>FullBackupDataOutput</b></A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.opengl.GLUtils.html" class="hiddenlink" target="rightframe">GLUtils</A><br>
+<A HREF="android.view.Gravity.html" class="hiddenlink" target="rightframe">Gravity</A><br>
+<A HREF="pkg_android.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<A HREF="pkg_android.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<A HREF="pkg_android.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<A HREF="pkg_android.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>Handler</i><br>
+ <A HREF="android.os.Handler.html" class="hiddenlink" target="rightframe">android.os</A><br>
+ <A HREF="java.util.logging.Handler.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.InputDevice.html" class="hiddenlink" target="rightframe">InputDevice</A><br>
+<A HREF="android.view.inputmethod.InputMethodManager.html" class="hiddenlink" target="rightframe">InputMethodManager</A><br>
+<A HREF="android.inputmethodservice.InputMethodService.html" class="hiddenlink" target="rightframe">InputMethodService</A><br>
+<A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html" class="hiddenlink" target="rightframe">InputMethodService.InputMethodSessionImpl</A><br>
+<A HREF="android.view.inputmethod.InputMethodSession.html" class="hiddenlink" target="rightframe"><i>InputMethodSession</i></A><br>
+<A HREF="android.view.inputmethod.InputMethodSubtype.html" class="hiddenlink" target="rightframe">InputMethodSubtype</A><br>
+<A HREF="android.renderscript.Int2.html" class="hiddenlink" target="rightframe">Int2</A><br>
+<A HREF="android.renderscript.Int3.html" class="hiddenlink" target="rightframe">Int3</A><br>
+<A HREF="android.renderscript.Int4.html" class="hiddenlink" target="rightframe">Int4</A><br>
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<A HREF="android.content.IntentSender.html" class="hiddenlink" target="rightframe">IntentSender</A><br>
+<A HREF="android.animation.IntEvaluator.html" class="hiddenlink" target="rightframe">IntEvaluator</A><br>
+<A HREF="android.nfc.tech.IsoDep.html" class="hiddenlink" target="rightframe">IsoDep</A><br>
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.KeyEvent.html" class="hiddenlink" target="rightframe">KeyEvent</A><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.text.Layout.html" class="hiddenlink" target="rightframe">Layout</A><br>
+<A HREF="android.animation.LayoutTransition.html" class="hiddenlink" target="rightframe">LayoutTransition</A><br>
+<A HREF="android.widget.LinearLayout.html" class="hiddenlink" target="rightframe">LinearLayout</A><br>
+<A HREF="android.provider.LiveFolders.html" class="hiddenlink" target="rightframe">LiveFolders</A><br>
+<A HREF="android.renderscript.Long2.html" class="hiddenlink" target="rightframe">Long2</A><br>
+<A HREF="android.renderscript.Long3.html" class="hiddenlink" target="rightframe">Long3</A><br>
+<A HREF="android.renderscript.Long4.html" class="hiddenlink" target="rightframe">Long4</A><br>
+<A HREF="android.os.Looper.html" class="hiddenlink" target="rightframe">Looper</A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<A HREF="android.opengl.Matrix.html" class="hiddenlink" target="rightframe">Matrix</A><br>
+<A HREF="android.media.MediaMetadataRetriever.html" class="hiddenlink" target="rightframe">MediaMetadataRetriever</A><br>
+<A HREF="android.media.MediaPlayer.html" class="hiddenlink" target="rightframe">MediaPlayer</A><br>
+<A HREF="android.media.MediaRecorder.html" class="hiddenlink" target="rightframe">MediaRecorder</A><br>
+<A HREF="android.provider.MediaStore.Audio.AudioColumns.html" class="hiddenlink" target="rightframe"><i>MediaStore.Audio.AudioColumns</i></A><br>
+<A HREF="android.view.MenuItem.html" class="hiddenlink" target="rightframe"><i>MenuItem</i></A><br>
+<A HREF="pkg_android.view.html#MenuItem.OnActionExpandListener" class="hiddenlink" target="rightframe"><b><i>MenuItem.OnActionExpandListener</i></b></A><br>
+<A HREF="java.lang.reflect.Method.html" class="hiddenlink" target="rightframe">Method</A><br>
+<A HREF="android.nfc.tech.MifareClassic.html" class="hiddenlink" target="rightframe">MifareClassic</A><br>
+<A HREF="android.nfc.tech.MifareUltralight.html" class="hiddenlink" target="rightframe">MifareUltralight</A><br>
+<A HREF="android.test.mock.MockPackageManager.html" class="hiddenlink" target="rightframe">MockPackageManager</A><br>
+<A HREF="android.view.MotionEvent.html" class="hiddenlink" target="rightframe">MotionEvent</A><br>
+<A HREF="pkg_android.view.html#MotionEvent.PointerProperties" class="hiddenlink" target="rightframe"><b>MotionEvent.PointerProperties</b></A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.nfc.NdefRecord.html" class="hiddenlink" target="rightframe">NdefRecord</A><br>
+<A HREF="android.nfc.tech.NfcA.html" class="hiddenlink" target="rightframe">NfcA</A><br>
+<A HREF="android.nfc.NfcAdapter.html" class="hiddenlink" target="rightframe">NfcAdapter</A><br>
+<A HREF="pkg_android.nfc.html#NfcAdapter.CreateNdefMessageCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.CreateNdefMessageCallback</i></b></A><br>
+<A HREF="pkg_android.nfc.html#NfcAdapter.OnNdefPushCompleteCallback" class="hiddenlink" target="rightframe"><b><i>NfcAdapter.OnNdefPushCompleteCallback</i></b></A><br>
+<A HREF="android.nfc.tech.NfcB.html" class="hiddenlink" target="rightframe">NfcB</A><br>
+<A HREF="pkg_android.nfc.html#NfcEvent" class="hiddenlink" target="rightframe"><b>NfcEvent</b></A><br>
+<A HREF="android.nfc.tech.NfcF.html" class="hiddenlink" target="rightframe">NfcF</A><br>
+<A HREF="android.nfc.tech.NfcV.html" class="hiddenlink" target="rightframe">NfcV</A><br>
+<A HREF="pkg_android.util.html#NoSuchPropertyException" class="hiddenlink" target="rightframe"><b>NoSuchPropertyException</b></A><br>
+<A HREF="android.app.Notification.Builder.html" class="hiddenlink" target="rightframe">Notification.Builder</A><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.animation.ObjectAnimator.html" class="hiddenlink" target="rightframe">ObjectAnimator</A><br>
+<A HREF="java.io.ObjectInputStream.html" class="hiddenlink" target="rightframe">ObjectInputStream</A><br>
+<A HREF="java.io.ObjectOutputStream.html" class="hiddenlink" target="rightframe">ObjectOutputStream</A><br>
+<A HREF="android.widget.OverScroller.html" class="hiddenlink" target="rightframe">OverScroller</A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<A HREF="android.content.pm.PackageStats.html" class="hiddenlink" target="rightframe">PackageStats</A><br>
+<A HREF="android.graphics.Paint.html" class="hiddenlink" target="rightframe">Paint</A><br>
+<A HREF="android.os.ParcelFileDescriptor.html" class="hiddenlink" target="rightframe">ParcelFileDescriptor</A><br>
+<A HREF="dalvik.system.PathClassLoader.html" class="hiddenlink" target="rightframe">PathClassLoader</A><br>
+<A HREF="android.util.Patterns.html" class="hiddenlink" target="rightframe">Patterns</A><br>
+<A HREF="android.app.PendingIntent.html" class="hiddenlink" target="rightframe">PendingIntent</A><br>
+<A HREF="java.security.Permission.html" class="hiddenlink" target="rightframe">Permission</A><br>
+<A HREF="android.widget.PopupMenu.html" class="hiddenlink" target="rightframe">PopupMenu</A><br>
+<A HREF="pkg_android.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<A HREF="android.preference.Preference.html" class="hiddenlink" target="rightframe">Preference</A><br>
+<A HREF="android.preference.PreferenceActivity.html" class="hiddenlink" target="rightframe">PreferenceActivity</A><br>
+<A HREF="javax.security.auth.PrivateCredentialPermission.html" class="hiddenlink" target="rightframe">PrivateCredentialPermission</A><br>
+<A HREF="android.os.Process.html" class="hiddenlink" target="rightframe">Process</A><br>
+<A HREF="pkg_android.util.html#Property" class="hiddenlink" target="rightframe"><b>Property</b></A><br>
+<A HREF="android.animation.PropertyValuesHolder.html" class="hiddenlink" target="rightframe">PropertyValuesHolder</A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<A HREF="android.R.color.html" class="hiddenlink" target="rightframe">R.color</A><br>
+<A HREF="android.R.integer.html" class="hiddenlink" target="rightframe">R.integer</A><br>
+<A HREF="android.R.string.html" class="hiddenlink" target="rightframe">R.string</A><br>
+<A HREF="android.R.style.html" class="hiddenlink" target="rightframe">R.style</A><br>
+<A HREF="android.speech.RecognizerIntent.html" class="hiddenlink" target="rightframe">RecognizerIntent</A><br>
+<A HREF="android.os.RecoverySystem.html" class="hiddenlink" target="rightframe">RecoverySystem</A><br>
+<A HREF="android.graphics.RectF.html" class="hiddenlink" target="rightframe">RectF</A><br>
+<A HREF="java.lang.ref.ReferenceQueue.html" class="hiddenlink" target="rightframe">ReferenceQueue</A><br>
+<A HREF="pkg_android.media.html#RemoteControlClient" class="hiddenlink" target="rightframe"><b>RemoteControlClient</b></A><br>
+<A HREF="pkg_android.media.html#RemoteControlClient.MetadataEditor" class="hiddenlink" target="rightframe"><b>RemoteControlClient.MetadataEditor</b></A><br>
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<A HREF="android.renderscript.RenderScriptGL.html" class="hiddenlink" target="rightframe">RenderScriptGL</A><br>
+<A HREF="pkg_android.renderscript.html#RSTextureView" class="hiddenlink" target="rightframe"><b>RSTextureView</b></A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.renderscript.Script.html" class="hiddenlink" target="rightframe">Script</A><br>
+<A HREF="android.widget.Scroller.html" class="hiddenlink" target="rightframe">Scroller</A><br>
+<A HREF="android.app.SearchManager.html" class="hiddenlink" target="rightframe">SearchManager</A><br>
+<A HREF="android.widget.SearchView.html" class="hiddenlink" target="rightframe">SearchView</A><br>
+<A HREF="android.hardware.Sensor.html" class="hiddenlink" target="rightframe">Sensor</A><br>
+<A HREF="android.app.Service.html" class="hiddenlink" target="rightframe">Service</A><br>
+<A HREF="android.content.pm.ServiceInfo.html" class="hiddenlink" target="rightframe">ServiceInfo</A><br>
+<A HREF="android.provider.Settings.html" class="hiddenlink" target="rightframe">Settings</A><br>
+<A HREF="android.provider.Settings.Secure.html" class="hiddenlink" target="rightframe">Settings.Secure</A><br>
+<A HREF="android.provider.Settings.System.html" class="hiddenlink" target="rightframe">Settings.System</A><br>
+<A HREF="pkg_android.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<A HREF="pkg_android.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<A HREF="android.renderscript.Short2.html" class="hiddenlink" target="rightframe">Short2</A><br>
+<A HREF="android.renderscript.Short3.html" class="hiddenlink" target="rightframe">Short3</A><br>
+<A HREF="android.renderscript.Short4.html" class="hiddenlink" target="rightframe">Short4</A><br>
+<A HREF="java.net.SocketPermission.html" class="hiddenlink" target="rightframe">SocketPermission</A><br>
+<A HREF="pkg_android.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<A HREF="android.util.SparseArray.html" class="hiddenlink" target="rightframe">SparseArray</A><br>
+<A HREF="android.util.SparseBooleanArray.html" class="hiddenlink" target="rightframe">SparseBooleanArray</A><br>
+<A HREF="android.util.SparseIntArray.html" class="hiddenlink" target="rightframe">SparseIntArray</A><br>
+<A HREF="android.speech.SpeechRecognizer.html" class="hiddenlink" target="rightframe">SpeechRecognizer</A><br>
+<A HREF="android.database.sqlite.SQLiteOpenHelper.html" class="hiddenlink" target="rightframe">SQLiteOpenHelper</A><br>
+<A HREF="android.database.sqlite.SQLiteQueryBuilder.html" class="hiddenlink" target="rightframe">SQLiteQueryBuilder</A><br>
+<A HREF="android.net.SSLCertificateSocketFactory.html" class="hiddenlink" target="rightframe">SSLCertificateSocketFactory</A><br>
+<A HREF="android.net.http.SslError.html" class="hiddenlink" target="rightframe">SslError</A><br>
+<A HREF="android.widget.StackView.html" class="hiddenlink" target="rightframe">StackView</A><br>
+<A HREF="pkg_android.text.style.html#SuggestionSpan" class="hiddenlink" target="rightframe"><b>SuggestionSpan</b></A><br>
+<A HREF="android.view.Surface.html" class="hiddenlink" target="rightframe">Surface</A><br>
+<A HREF="android.graphics.SurfaceTexture.html" class="hiddenlink" target="rightframe">SurfaceTexture</A><br>
+<A HREF="pkg_android.widget.html#Switch" class="hiddenlink" target="rightframe"><b>Switch</b></A><br>
+<A HREF="pkg_android.preference.html#SwitchPreference" class="hiddenlink" target="rightframe"><b>SwitchPreference</b></A><br>
+<A HREF="android.content.SyncAdapterType.html" class="hiddenlink" target="rightframe">SyncAdapterType</A><br>
+<A HREF="pkg_android.speech.tts.html#SynthesisCallback" class="hiddenlink" target="rightframe"><b><i>SynthesisCallback</i></b></A><br>
+<A HREF="pkg_android.speech.tts.html#SynthesisRequest" class="hiddenlink" target="rightframe"><b>SynthesisRequest</b></A><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="dalvik.annotation.TestTarget.html" class="hiddenlink" target="rightframe">TestTarget</A><br>
+<A HREF="dalvik.annotation.TestTargetClass.html" class="hiddenlink" target="rightframe">TestTargetClass</A><br>
+<A HREF="android.speech.tts.TextToSpeech.html" class="hiddenlink" target="rightframe">TextToSpeech</A><br>
+<A HREF="android.speech.tts.TextToSpeech.Engine.html" class="hiddenlink" target="rightframe">TextToSpeech.Engine</A><br>
+<A HREF="pkg_android.speech.tts.html#TextToSpeech.EngineInfo" class="hiddenlink" target="rightframe"><b>TextToSpeech.EngineInfo</b></A><br>
+<A HREF="pkg_android.speech.tts.html#TextToSpeechService" class="hiddenlink" target="rightframe"><b>TextToSpeechService</b></A><br>
+<A HREF="pkg_android.view.html#TextureView" class="hiddenlink" target="rightframe"><b>TextureView</b></A><br>
+<A HREF="pkg_android.view.html#TextureView.SurfaceTextureListener" class="hiddenlink" target="rightframe"><b><i>TextureView.SurfaceTextureListener</i></b></A><br>
+<A HREF="android.widget.TextView.html" class="hiddenlink" target="rightframe">TextView</A><br>
+<A HREF="android.net.TrafficStats.html" class="hiddenlink" target="rightframe">TrafficStats</A><br>
+<A HREF="pkg_android.preference.html#TwoStatePreference" class="hiddenlink" target="rightframe"><b>TwoStatePreference</b></A><br>
+<A HREF="android.animation.TypeEvaluator.html" class="hiddenlink" target="rightframe"><i>TypeEvaluator</i></A><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="java.security.UnresolvedPermission.html" class="hiddenlink" target="rightframe">UnresolvedPermission</A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<A HREF="pkg_android.view.html#View.AccessibilityDelegate" class="hiddenlink" target="rightframe"><b>View.AccessibilityDelegate</b></A><br>
+<A HREF="pkg_android.view.html#View.OnHoverListener" class="hiddenlink" target="rightframe"><b><i>View.OnHoverListener</i></b></A><br>
+<A HREF="android.view.ViewConfiguration.html" class="hiddenlink" target="rightframe">ViewConfiguration</A><br>
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<A HREF="android.view.ViewParent.html" class="hiddenlink" target="rightframe"><i>ViewParent</i></A><br>
+<A HREF="android.view.ViewPropertyAnimator.html" class="hiddenlink" target="rightframe">ViewPropertyAnimator</A><br>
+<A HREF="pkg_android.provider.html#VoicemailContract" class="hiddenlink" target="rightframe"><b>VoicemailContract</b></A><br>
+<A HREF="pkg_android.provider.html#VoicemailContract.Status" class="hiddenlink" target="rightframe"><b>VoicemailContract.Status</b></A><br>
+<A HREF="pkg_android.provider.html#VoicemailContract.Voicemails" class="hiddenlink" target="rightframe"><b>VoicemailContract.Voicemails</b></A><br>
+<A HREF="pkg_android.net.html#VpnService" class="hiddenlink" target="rightframe"><b>VpnService</b></A><br>
+<A HREF="pkg_android.net.html#VpnService.Builder" class="hiddenlink" target="rightframe"><b>VpnService.Builder</b></A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<A HREF="android.service.wallpaper.WallpaperService.Engine.html" class="hiddenlink" target="rightframe">WallpaperService.Engine</A><br>
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<A HREF="android.webkit.WebSettings.TextSize.html" class="hiddenlink" target="rightframe">WebSettings.TextSize</A><br>
+<A HREF="android.webkit.WebView.HitTestResult.html" class="hiddenlink" target="rightframe">WebView.HitTestResult</A><br>
+<A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
+<A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
+<A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
+<A HREF="pkg_android.net.wifi.html#WpsInfo" class="hiddenlink" target="rightframe"><b>WpsInfo</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_changes.html b/docs/html/sdk/api_diff/14/changes/classes_index_changes.html
new file mode 100644
index 0000000..0710892
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_changes.html
@@ -0,0 +1,758 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.widget.AbsListView.html" class="hiddenlink" target="rightframe">AbsListView</A><br>
+<A HREF="android.view.accessibility.AccessibilityEvent.html" class="hiddenlink" target="rightframe">AccessibilityEvent</A><br>
+<A HREF="android.view.accessibility.AccessibilityManager.html" class="hiddenlink" target="rightframe">AccessibilityManager</A><br>
+<A HREF="android.accessibilityservice.AccessibilityService.html" class="hiddenlink" target="rightframe">AccessibilityService</A><br>
+<A HREF="android.accessibilityservice.AccessibilityServiceInfo.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfo</A><br>
+<A HREF="java.lang.reflect.AccessibleObject.html" class="hiddenlink" target="rightframe">AccessibleObject</A><br>
+<A HREF="android.accounts.AccountManager.html" class="hiddenlink" target="rightframe">AccountManager</A><br>
+<A HREF="android.app.ActionBar.html" class="hiddenlink" target="rightframe">ActionBar</A><br>
+<A HREF="android.app.ActionBar.Tab.html" class="hiddenlink" target="rightframe">ActionBar.Tab</A><br>
+<A HREF="android.view.ActionMode.html" class="hiddenlink" target="rightframe">ActionMode</A><br>
+<A HREF="android.app.Activity.html" class="hiddenlink" target="rightframe">Activity</A><br>
+<A HREF="android.content.pm.ActivityInfo.html" class="hiddenlink" target="rightframe">ActivityInfo</A><br>
+<A HREF="android.widget.AdapterViewAnimator.html" class="hiddenlink" target="rightframe">AdapterViewAnimator</A><br>
+<A HREF="android.app.AlertDialog.html" class="hiddenlink" target="rightframe">AlertDialog</A><br>
+<A HREF="android.renderscript.Allocation.html" class="hiddenlink" target="rightframe">Allocation</A><br>
+<A HREF="android.renderscript.AllocationAdapter.html" class="hiddenlink" target="rightframe">AllocationAdapter</A><br>
+<A HREF="java.security.AllPermission.html" class="hiddenlink" target="rightframe">AllPermission</A><br>
+<A HREF="android.animation.Animator.html" class="hiddenlink" target="rightframe">Animator</A><br>
+<A HREF="android.app.Application.html" class="hiddenlink" target="rightframe">Application</A><br>
+<A HREF="android.content.pm.ApplicationInfo.html" class="hiddenlink" target="rightframe">ApplicationInfo</A><br>
+<A HREF="android.appwidget.AppWidgetProviderInfo.html" class="hiddenlink" target="rightframe">AppWidgetProviderInfo</A><br>
+<A HREF="android.media.AudioManager.html" class="hiddenlink" target="rightframe">AudioManager</A><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.backup.BackupAgent.html" class="hiddenlink" target="rightframe">BackupAgent</A><br>
+<A HREF="android.renderscript.BaseObj.html" class="hiddenlink" target="rightframe">BaseObj</A><br>
+<A HREF="java.security.BasicPermission.html" class="hiddenlink" target="rightframe">BasicPermission</A><br>
+<A HREF="android.bluetooth.BluetoothAdapter.html" class="hiddenlink" target="rightframe">BluetoothAdapter</A><br>
+<A HREF="android.bluetooth.BluetoothProfile.html" class="hiddenlink" target="rightframe"><i>BluetoothProfile</i></A><br>
+<A HREF="android.bluetooth.BluetoothSocket.html" class="hiddenlink" target="rightframe">BluetoothSocket</A><br>
+<A HREF="android.os.Build.html" class="hiddenlink" target="rightframe">Build</A><br>
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<A HREF="android.renderscript.Byte2.html" class="hiddenlink" target="rightframe">Byte2</A><br>
+<A HREF="android.renderscript.Byte3.html" class="hiddenlink" target="rightframe">Byte3</A><br>
+<A HREF="android.renderscript.Byte4.html" class="hiddenlink" target="rightframe">Byte4</A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.provider.CallLog.Calls.html" class="hiddenlink" target="rightframe">CallLog.Calls</A><br>
+<A HREF="android.hardware.Camera.html" class="hiddenlink" target="rightframe">Camera</A><br>
+<A HREF="android.hardware.Camera.Parameters.html" class="hiddenlink" target="rightframe">Camera.Parameters</A><br>
+<A HREF="android.graphics.Canvas.html" class="hiddenlink" target="rightframe">Canvas</A><br>
+<A HREF="android.preference.CheckBoxPreference.html" class="hiddenlink" target="rightframe">CheckBoxPreference</A><br>
+<A HREF="java.lang.Class.html" class="hiddenlink" target="rightframe">Class</A><br>
+<A HREF="android.util.Config.html" class="hiddenlink" target="rightframe">Config</A><br>
+<A HREF="android.net.ConnectivityManager.html" class="hiddenlink" target="rightframe">ConnectivityManager</A><br>
+<A HREF="java.lang.reflect.Constructor.html" class="hiddenlink" target="rightframe">Constructor</A><br>
+<A HREF="android.provider.ContactsContract.html" class="hiddenlink" target="rightframe">ContactsContract</A><br>
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.CommonDataKinds.Photo</A><br>
+<A HREF="android.provider.ContactsContract.Contacts.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts</A><br>
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html" class="hiddenlink" target="rightframe">ContactsContract.Contacts.Photo</A><br>
+<A HREF="android.provider.ContactsContract.ContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.ContactsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.GroupsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.GroupsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.Intents.html" class="hiddenlink" target="rightframe">ContactsContract.Intents</A><br>
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.RawContactsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html" class="hiddenlink" target="rightframe">ContactsContract.RawContactsEntity</A><br>
+<A HREF="android.provider.ContactsContract.SettingsColumns.html" class="hiddenlink" target="rightframe"><i>ContactsContract.SettingsColumns</i></A><br>
+<A HREF="android.provider.ContactsContract.StatusUpdates.html" class="hiddenlink" target="rightframe">ContactsContract.StatusUpdates</A><br>
+<A HREF="android.content.ContentProvider.html" class="hiddenlink" target="rightframe">ContentProvider</A><br>
+<A HREF="android.content.Context.html" class="hiddenlink" target="rightframe">Context</A><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.os.Debug.html" class="hiddenlink" target="rightframe">Debug</A><br>
+<A HREF="android.os.Debug.MemoryInfo.html" class="hiddenlink" target="rightframe">Debug.MemoryInfo</A><br>
+<A HREF="android.app.admin.DeviceAdminInfo.html" class="hiddenlink" target="rightframe">DeviceAdminInfo</A><br>
+<A HREF="android.app.admin.DevicePolicyManager.html" class="hiddenlink" target="rightframe">DevicePolicyManager</A><br>
+<A HREF="dalvik.system.DexClassLoader.html" class="hiddenlink" target="rightframe">DexClassLoader</A><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.renderscript.Element.html" class="hiddenlink" target="rightframe">Element</A><br>
+<A HREF="android.widget.ExpandableListView.html" class="hiddenlink" target="rightframe">ExpandableListView</A><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="java.lang.reflect.Field.html" class="hiddenlink" target="rightframe">Field</A><br>
+<A HREF="android.renderscript.FieldPacker.html" class="hiddenlink" target="rightframe">FieldPacker</A><br>
+<A HREF="java.io.FilePermission.html" class="hiddenlink" target="rightframe">FilePermission</A><br>
+<A HREF="android.animation.FloatEvaluator.html" class="hiddenlink" target="rightframe">FloatEvaluator</A><br>
+<A HREF="android.app.Fragment.html" class="hiddenlink" target="rightframe">Fragment</A><br>
+<A HREF="android.app.FragmentManager.html" class="hiddenlink" target="rightframe">FragmentManager</A><br>
+<A HREF="android.app.FragmentManager.BackStackEntry.html" class="hiddenlink" target="rightframe"><i>FragmentManager.BackStackEntry</i></A><br>
+<A HREF="android.widget.FrameLayout.html" class="hiddenlink" target="rightframe">FrameLayout</A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.opengl.GLUtils.html" class="hiddenlink" target="rightframe">GLUtils</A><br>
+<A HREF="android.view.Gravity.html" class="hiddenlink" target="rightframe">Gravity</A><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>Handler</i><br>
+ <A HREF="android.os.Handler.html" class="hiddenlink" target="rightframe">android.os</A><br>
+ <A HREF="java.util.logging.Handler.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.InputDevice.html" class="hiddenlink" target="rightframe">InputDevice</A><br>
+<A HREF="android.view.inputmethod.InputMethodManager.html" class="hiddenlink" target="rightframe">InputMethodManager</A><br>
+<A HREF="android.inputmethodservice.InputMethodService.html" class="hiddenlink" target="rightframe">InputMethodService</A><br>
+<A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html" class="hiddenlink" target="rightframe">InputMethodService.InputMethodSessionImpl</A><br>
+<A HREF="android.view.inputmethod.InputMethodSession.html" class="hiddenlink" target="rightframe"><i>InputMethodSession</i></A><br>
+<A HREF="android.view.inputmethod.InputMethodSubtype.html" class="hiddenlink" target="rightframe">InputMethodSubtype</A><br>
+<A HREF="android.renderscript.Int2.html" class="hiddenlink" target="rightframe">Int2</A><br>
+<A HREF="android.renderscript.Int3.html" class="hiddenlink" target="rightframe">Int3</A><br>
+<A HREF="android.renderscript.Int4.html" class="hiddenlink" target="rightframe">Int4</A><br>
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<A HREF="android.content.IntentSender.html" class="hiddenlink" target="rightframe">IntentSender</A><br>
+<A HREF="android.animation.IntEvaluator.html" class="hiddenlink" target="rightframe">IntEvaluator</A><br>
+<A HREF="android.nfc.tech.IsoDep.html" class="hiddenlink" target="rightframe">IsoDep</A><br>
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.KeyEvent.html" class="hiddenlink" target="rightframe">KeyEvent</A><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.text.Layout.html" class="hiddenlink" target="rightframe">Layout</A><br>
+<A HREF="android.animation.LayoutTransition.html" class="hiddenlink" target="rightframe">LayoutTransition</A><br>
+<A HREF="android.widget.LinearLayout.html" class="hiddenlink" target="rightframe">LinearLayout</A><br>
+<A HREF="android.provider.LiveFolders.html" class="hiddenlink" target="rightframe">LiveFolders</A><br>
+<A HREF="android.renderscript.Long2.html" class="hiddenlink" target="rightframe">Long2</A><br>
+<A HREF="android.renderscript.Long3.html" class="hiddenlink" target="rightframe">Long3</A><br>
+<A HREF="android.renderscript.Long4.html" class="hiddenlink" target="rightframe">Long4</A><br>
+<A HREF="android.os.Looper.html" class="hiddenlink" target="rightframe">Looper</A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<A HREF="android.opengl.Matrix.html" class="hiddenlink" target="rightframe">Matrix</A><br>
+<A HREF="android.media.MediaMetadataRetriever.html" class="hiddenlink" target="rightframe">MediaMetadataRetriever</A><br>
+<A HREF="android.media.MediaPlayer.html" class="hiddenlink" target="rightframe">MediaPlayer</A><br>
+<A HREF="android.media.MediaRecorder.html" class="hiddenlink" target="rightframe">MediaRecorder</A><br>
+<A HREF="android.provider.MediaStore.Audio.AudioColumns.html" class="hiddenlink" target="rightframe"><i>MediaStore.Audio.AudioColumns</i></A><br>
+<A HREF="android.view.MenuItem.html" class="hiddenlink" target="rightframe"><i>MenuItem</i></A><br>
+<A HREF="java.lang.reflect.Method.html" class="hiddenlink" target="rightframe">Method</A><br>
+<A HREF="android.nfc.tech.MifareClassic.html" class="hiddenlink" target="rightframe">MifareClassic</A><br>
+<A HREF="android.nfc.tech.MifareUltralight.html" class="hiddenlink" target="rightframe">MifareUltralight</A><br>
+<A HREF="android.test.mock.MockPackageManager.html" class="hiddenlink" target="rightframe">MockPackageManager</A><br>
+<A HREF="android.view.MotionEvent.html" class="hiddenlink" target="rightframe">MotionEvent</A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.nfc.NdefRecord.html" class="hiddenlink" target="rightframe">NdefRecord</A><br>
+<A HREF="android.nfc.tech.NfcA.html" class="hiddenlink" target="rightframe">NfcA</A><br>
+<A HREF="android.nfc.NfcAdapter.html" class="hiddenlink" target="rightframe">NfcAdapter</A><br>
+<A HREF="android.nfc.tech.NfcB.html" class="hiddenlink" target="rightframe">NfcB</A><br>
+<A HREF="android.nfc.tech.NfcF.html" class="hiddenlink" target="rightframe">NfcF</A><br>
+<A HREF="android.nfc.tech.NfcV.html" class="hiddenlink" target="rightframe">NfcV</A><br>
+<A HREF="android.app.Notification.Builder.html" class="hiddenlink" target="rightframe">Notification.Builder</A><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.animation.ObjectAnimator.html" class="hiddenlink" target="rightframe">ObjectAnimator</A><br>
+<A HREF="java.io.ObjectInputStream.html" class="hiddenlink" target="rightframe">ObjectInputStream</A><br>
+<A HREF="java.io.ObjectOutputStream.html" class="hiddenlink" target="rightframe">ObjectOutputStream</A><br>
+<A HREF="android.widget.OverScroller.html" class="hiddenlink" target="rightframe">OverScroller</A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<A HREF="android.content.pm.PackageStats.html" class="hiddenlink" target="rightframe">PackageStats</A><br>
+<A HREF="android.graphics.Paint.html" class="hiddenlink" target="rightframe">Paint</A><br>
+<A HREF="android.os.ParcelFileDescriptor.html" class="hiddenlink" target="rightframe">ParcelFileDescriptor</A><br>
+<A HREF="dalvik.system.PathClassLoader.html" class="hiddenlink" target="rightframe">PathClassLoader</A><br>
+<A HREF="android.util.Patterns.html" class="hiddenlink" target="rightframe">Patterns</A><br>
+<A HREF="android.app.PendingIntent.html" class="hiddenlink" target="rightframe">PendingIntent</A><br>
+<A HREF="java.security.Permission.html" class="hiddenlink" target="rightframe">Permission</A><br>
+<A HREF="android.widget.PopupMenu.html" class="hiddenlink" target="rightframe">PopupMenu</A><br>
+<A HREF="android.preference.Preference.html" class="hiddenlink" target="rightframe">Preference</A><br>
+<A HREF="android.preference.PreferenceActivity.html" class="hiddenlink" target="rightframe">PreferenceActivity</A><br>
+<A HREF="javax.security.auth.PrivateCredentialPermission.html" class="hiddenlink" target="rightframe">PrivateCredentialPermission</A><br>
+<A HREF="android.os.Process.html" class="hiddenlink" target="rightframe">Process</A><br>
+<A HREF="android.animation.PropertyValuesHolder.html" class="hiddenlink" target="rightframe">PropertyValuesHolder</A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<A HREF="android.R.color.html" class="hiddenlink" target="rightframe">R.color</A><br>
+<A HREF="android.R.integer.html" class="hiddenlink" target="rightframe">R.integer</A><br>
+<A HREF="android.R.string.html" class="hiddenlink" target="rightframe">R.string</A><br>
+<A HREF="android.R.style.html" class="hiddenlink" target="rightframe">R.style</A><br>
+<A HREF="android.speech.RecognizerIntent.html" class="hiddenlink" target="rightframe">RecognizerIntent</A><br>
+<A HREF="android.os.RecoverySystem.html" class="hiddenlink" target="rightframe">RecoverySystem</A><br>
+<A HREF="android.graphics.RectF.html" class="hiddenlink" target="rightframe">RectF</A><br>
+<A HREF="java.lang.ref.ReferenceQueue.html" class="hiddenlink" target="rightframe">ReferenceQueue</A><br>
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<A HREF="android.renderscript.RenderScriptGL.html" class="hiddenlink" target="rightframe">RenderScriptGL</A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.renderscript.Script.html" class="hiddenlink" target="rightframe">Script</A><br>
+<A HREF="android.widget.Scroller.html" class="hiddenlink" target="rightframe">Scroller</A><br>
+<A HREF="android.app.SearchManager.html" class="hiddenlink" target="rightframe">SearchManager</A><br>
+<A HREF="android.widget.SearchView.html" class="hiddenlink" target="rightframe">SearchView</A><br>
+<A HREF="android.hardware.Sensor.html" class="hiddenlink" target="rightframe">Sensor</A><br>
+<A HREF="android.app.Service.html" class="hiddenlink" target="rightframe">Service</A><br>
+<A HREF="android.content.pm.ServiceInfo.html" class="hiddenlink" target="rightframe">ServiceInfo</A><br>
+<A HREF="android.provider.Settings.html" class="hiddenlink" target="rightframe">Settings</A><br>
+<A HREF="android.provider.Settings.Secure.html" class="hiddenlink" target="rightframe">Settings.Secure</A><br>
+<A HREF="android.provider.Settings.System.html" class="hiddenlink" target="rightframe">Settings.System</A><br>
+<A HREF="android.renderscript.Short2.html" class="hiddenlink" target="rightframe">Short2</A><br>
+<A HREF="android.renderscript.Short3.html" class="hiddenlink" target="rightframe">Short3</A><br>
+<A HREF="android.renderscript.Short4.html" class="hiddenlink" target="rightframe">Short4</A><br>
+<A HREF="java.net.SocketPermission.html" class="hiddenlink" target="rightframe">SocketPermission</A><br>
+<A HREF="android.util.SparseArray.html" class="hiddenlink" target="rightframe">SparseArray</A><br>
+<A HREF="android.util.SparseBooleanArray.html" class="hiddenlink" target="rightframe">SparseBooleanArray</A><br>
+<A HREF="android.util.SparseIntArray.html" class="hiddenlink" target="rightframe">SparseIntArray</A><br>
+<A HREF="android.speech.SpeechRecognizer.html" class="hiddenlink" target="rightframe">SpeechRecognizer</A><br>
+<A HREF="android.database.sqlite.SQLiteOpenHelper.html" class="hiddenlink" target="rightframe">SQLiteOpenHelper</A><br>
+<A HREF="android.database.sqlite.SQLiteQueryBuilder.html" class="hiddenlink" target="rightframe">SQLiteQueryBuilder</A><br>
+<A HREF="android.net.SSLCertificateSocketFactory.html" class="hiddenlink" target="rightframe">SSLCertificateSocketFactory</A><br>
+<A HREF="android.net.http.SslError.html" class="hiddenlink" target="rightframe">SslError</A><br>
+<A HREF="android.widget.StackView.html" class="hiddenlink" target="rightframe">StackView</A><br>
+<A HREF="android.view.Surface.html" class="hiddenlink" target="rightframe">Surface</A><br>
+<A HREF="android.graphics.SurfaceTexture.html" class="hiddenlink" target="rightframe">SurfaceTexture</A><br>
+<A HREF="android.content.SyncAdapterType.html" class="hiddenlink" target="rightframe">SyncAdapterType</A><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="dalvik.annotation.TestTarget.html" class="hiddenlink" target="rightframe">TestTarget</A><br>
+<A HREF="dalvik.annotation.TestTargetClass.html" class="hiddenlink" target="rightframe">TestTargetClass</A><br>
+<A HREF="android.speech.tts.TextToSpeech.html" class="hiddenlink" target="rightframe">TextToSpeech</A><br>
+<A HREF="android.speech.tts.TextToSpeech.Engine.html" class="hiddenlink" target="rightframe">TextToSpeech.Engine</A><br>
+<A HREF="android.widget.TextView.html" class="hiddenlink" target="rightframe">TextView</A><br>
+<A HREF="android.net.TrafficStats.html" class="hiddenlink" target="rightframe">TrafficStats</A><br>
+<A HREF="android.animation.TypeEvaluator.html" class="hiddenlink" target="rightframe"><i>TypeEvaluator</i></A><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="java.security.UnresolvedPermission.html" class="hiddenlink" target="rightframe">UnresolvedPermission</A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<A HREF="android.view.ViewConfiguration.html" class="hiddenlink" target="rightframe">ViewConfiguration</A><br>
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<A HREF="android.view.ViewParent.html" class="hiddenlink" target="rightframe"><i>ViewParent</i></A><br>
+<A HREF="android.view.ViewPropertyAnimator.html" class="hiddenlink" target="rightframe">ViewPropertyAnimator</A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<A HREF="android.service.wallpaper.WallpaperService.Engine.html" class="hiddenlink" target="rightframe">WallpaperService.Engine</A><br>
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<A HREF="android.webkit.WebSettings.TextSize.html" class="hiddenlink" target="rightframe">WebSettings.TextSize</A><br>
+<A HREF="android.webkit.WebView.HitTestResult.html" class="hiddenlink" target="rightframe">WebView.HitTestResult</A><br>
+<A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
+<A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
+<A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_removals.html b/docs/html/sdk/api_diff/14/changes/classes_index_removals.html
new file mode 100644
index 0000000..e6da73f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html
new file mode 100644
index 0000000..6d53ade
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="constructors_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>AdapterViewAnimator</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Byte2.html#android.renderscript.Byte2.ctor_added(byte, byte)" class="hiddenlink" target="rightframe"><b>Byte2</b>
+(<code>byte, byte</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Byte3.html#android.renderscript.Byte3.ctor_added(byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte3</b>
+(<code>byte, byte, byte</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Byte4.html#android.renderscript.Byte4.ctor_added(byte, byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte4</b>
+(<code>byte, byte, byte, byte</code>)</A></nobr> constructor<br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.ctor_added(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)" class="hiddenlink" target="rightframe"><b>InputMethodSubtype</b>
+(<code>int, int, String, String, String, boolean, boolean</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Int2.html#android.renderscript.Int2.ctor_added(int, int)" class="hiddenlink" target="rightframe"><b>Int2</b>
+(<code>int, int</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Int3.html#android.renderscript.Int3.ctor_added(int, int, int)" class="hiddenlink" target="rightframe"><b>Int3</b>
+(<code>int, int, int</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Int4.html#android.renderscript.Int4.ctor_added(int, int, int, int)" class="hiddenlink" target="rightframe"><b>Int4</b>
+(<code>int, int, int, int</code>)</A></nobr> constructor<br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Long2.html#android.renderscript.Long2.ctor_added(long, long)" class="hiddenlink" target="rightframe"><b>Long2</b>
+(<code>long, long</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Long3.html#android.renderscript.Long3.ctor_added(long, long, long)" class="hiddenlink" target="rightframe"><b>Long3</b>
+(<code>long, long, long</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Long4.html#android.renderscript.Long4.ctor_added(long, long, long, long)" class="hiddenlink" target="rightframe"><b>Long4</b>
+(<code>long, long, long, long</code>)</A></nobr> constructor<br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Short2.html#android.renderscript.Short2.ctor_added(short, short)" class="hiddenlink" target="rightframe"><b>Short2</b>
+(<code>short, short</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Short3.html#android.renderscript.Short3.ctor_added(short, short, short)" class="hiddenlink" target="rightframe"><b>Short3</b>
+(<code>short, short, short</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Short4.html#android.renderscript.Short4.ctor_added(short, short, short, short)" class="hiddenlink" target="rightframe"><b>Short4</b>
+(<code>short, short, short, short</code>)</A></nobr> constructor<br>
+<i>SslError</i><br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, android.net.http.SslCertificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, SslCertificate, String</code>)</A></nobr> constructor<br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, java.security.cert.X509Certificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, X509Certificate, String</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.widget.StackView.html#android.widget.StackView.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>StackView</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.ctor_added(android.graphics.SurfaceTexture)" class="hiddenlink" target="rightframe"><b>Surface</b>
+(<code>SurfaceTexture</code>)</A></nobr> constructor<br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" class="hiddenlink" target="rightframe"><b>TextToSpeech</b>
+(<code>Context, OnInitListener, String</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_all.html b/docs/html/sdk/api_diff/14/changes/constructors_index_all.html
new file mode 100644
index 0000000..46b1d72
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_all.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Constructors</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="constructors_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>AdapterViewAnimator</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Byte2.html#android.renderscript.Byte2.ctor_added(byte, byte)" class="hiddenlink" target="rightframe"><b>Byte2</b>
+(<code>byte, byte</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Byte3.html#android.renderscript.Byte3.ctor_added(byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte3</b>
+(<code>byte, byte, byte</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Byte4.html#android.renderscript.Byte4.ctor_added(byte, byte, byte, byte)" class="hiddenlink" target="rightframe"><b>Byte4</b>
+(<code>byte, byte, byte, byte</code>)</A></nobr> constructor<br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.ctor_added(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)" class="hiddenlink" target="rightframe"><b>InputMethodSubtype</b>
+(<code>int, int, String, String, String, boolean, boolean</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Int2.html#android.renderscript.Int2.ctor_added(int, int)" class="hiddenlink" target="rightframe"><b>Int2</b>
+(<code>int, int</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Int3.html#android.renderscript.Int3.ctor_added(int, int, int)" class="hiddenlink" target="rightframe"><b>Int3</b>
+(<code>int, int, int</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Int4.html#android.renderscript.Int4.ctor_added(int, int, int, int)" class="hiddenlink" target="rightframe"><b>Int4</b>
+(<code>int, int, int, int</code>)</A></nobr> constructor<br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Long2.html#android.renderscript.Long2.ctor_added(long, long)" class="hiddenlink" target="rightframe"><b>Long2</b>
+(<code>long, long</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Long3.html#android.renderscript.Long3.ctor_added(long, long, long)" class="hiddenlink" target="rightframe"><b>Long3</b>
+(<code>long, long, long</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Long4.html#android.renderscript.Long4.ctor_added(long, long, long, long)" class="hiddenlink" target="rightframe"><b>Long4</b>
+(<code>long, long, long, long</code>)</A></nobr> constructor<br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Short2.html#android.renderscript.Short2.ctor_added(short, short)" class="hiddenlink" target="rightframe"><b>Short2</b>
+(<code>short, short</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Short3.html#android.renderscript.Short3.ctor_added(short, short, short)" class="hiddenlink" target="rightframe"><b>Short3</b>
+(<code>short, short, short</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.renderscript.Short4.html#android.renderscript.Short4.ctor_added(short, short, short, short)" class="hiddenlink" target="rightframe"><b>Short4</b>
+(<code>short, short, short, short</code>)</A></nobr> constructor<br>
+<i>SslError</i><br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, android.net.http.SslCertificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, SslCertificate, String</code>)</A></nobr> constructor<br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_added(int, java.security.cert.X509Certificate, java.lang.String)" class="hiddenlink" target="rightframe"><b>SslError</b>
+(<code>int, X509Certificate, String</code>)</A></nobr> constructor<br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, android.net.http.SslCertificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, SslCertificate</code>)</A></nobr> constructor<br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, java.security.cert.X509Certificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, X509Certificate</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.widget.StackView.html#android.widget.StackView.ctor_added(android.content.Context, android.util.AttributeSet, int)" class="hiddenlink" target="rightframe"><b>StackView</b>
+(<code>Context, AttributeSet, int</code>)</A></nobr> constructor<br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.ctor_added(android.graphics.SurfaceTexture)" class="hiddenlink" target="rightframe"><b>Surface</b>
+(<code>SurfaceTexture</code>)</A></nobr> constructor<br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" class="hiddenlink" target="rightframe"><b>TextToSpeech</b>
+(<code>Context, OnInitListener, String</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html
new file mode 100644
index 0000000..ceb631c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>SslError</i><br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, android.net.http.SslCertificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, SslCertificate</code>)</A></nobr> constructor<br>
+ <nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, java.security.cert.X509Certificate)" class="hiddenlink" target="rightframe">SslError
+(<code>int, X509Certificate</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html
new file mode 100644
index 0000000..f1a9952
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="constructors_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
new file mode 100644
index 0000000..d931d2e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+dalvik.annotation.TestTarget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class dalvik.annotation.<A HREF="../../../../reference/dalvik/annotation/TestTarget.html" target="_top"><font size="+2"><code>TestTarget</code></font></A>
+</H2>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
new file mode 100644
index 0000000..eee755b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+dalvik.annotation.TestTargetClass
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class dalvik.annotation.<A HREF="../../../../reference/dalvik/annotation/TestTargetClass.html" target="_top"><font size="+2"><code>TestTargetClass</code></font></A>
+</H2>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html b/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
new file mode 100644
index 0000000..a932a23
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+dalvik.system.DexClassLoader
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class dalvik.system.<A HREF="../../../../reference/dalvik/system/DexClassLoader.html" target="_top"><font size="+2"><code>DexClassLoader</code></font></A>
+</H2>
+<p><font xsize="+1">The superclass changed from <code>java.lang.ClassLoader</code> to <code>dalvik.system.BaseDexClassLoader</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html b/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
new file mode 100644
index 0000000..030cef9
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+dalvik.system.PathClassLoader
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class dalvik.system.<A HREF="../../../../reference/dalvik/system/PathClassLoader.html" target="_top"><font size="+2"><code>PathClassLoader</code></font></A>
+</H2>
+<p><font xsize="+1">The superclass changed from <code>java.lang.ClassLoader</code> to <code>dalvik.system.BaseDexClassLoader</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="dalvik.system.PathClassLoader.findLibrary_changed(java.lang.String)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/dalvik/system/BaseDexClassLoader.html#findLibrary(java.lang.String)" target="_top"><code>findLibrary</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/dalvik/system/BaseDexClassLoader.html#findLibrary(java.lang.String)" target="_top"><code>BaseDexClassLoader</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_additions.html b/docs/html/sdk/api_diff/14/changes/fields_index_additions.html
new file mode 100644
index 0000000..17190f8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_additions.html
@@ -0,0 +1,1445 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<A HREF="fields_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityEventTypes" class="hiddenlink" target="rightframe">accessibilityEventTypes</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFeedbackType" class="hiddenlink" target="rightframe">accessibilityFeedbackType</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFlags" class="hiddenlink" target="rightframe">accessibilityFlags</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_APP_ERROR" class="hiddenlink" target="rightframe">ACTION_APP_ERROR</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_ENTER" class="hiddenlink" target="rightframe">ACTION_HOVER_ENTER</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_EXIT" class="hiddenlink" target="rightframe">ACTION_HOVER_EXIT</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_INSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_INSTALL_PACKAGE</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_MANAGE_NETWORK_USAGE" class="hiddenlink" target="rightframe">ACTION_MANAGE_NETWORK_USAGE</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_PICTURE" class="hiddenlink" target="rightframe">ACTION_NEW_PICTURE</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_VIDEO" class="hiddenlink" target="rightframe">ACTION_NEW_VIDEO</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.html#android.provider.Settings.ACTION_NFCSHARING_SETTINGS" class="hiddenlink" target="rightframe">ACTION_NFCSHARING_SETTINGS</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_FULLY_REMOVED" class="hiddenlink" target="rightframe">ACTION_PACKAGE_FULLY_REMOVED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_NEEDS_VERIFICATION" class="hiddenlink" target="rightframe">ACTION_PACKAGE_NEEDS_VERIFICATION</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_UPDATED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UNINSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_UNINSTALL_PACKAGE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarDivider" class="hiddenlink" target="rightframe">actionBarDivider</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarItemBackground" class="hiddenlink" target="rightframe">actionBarItemBackground</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarSplitStyle" class="hiddenlink" target="rightframe">actionBarSplitStyle</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarWidgetTheme" class="hiddenlink" target="rightframe">actionBarWidgetTheme</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSelectAllDrawable" class="hiddenlink" target="rightframe">actionModeSelectAllDrawable</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSplitBackground" class="hiddenlink" target="rightframe">actionModeSplitBackground</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeStyle" class="hiddenlink" target="rightframe">actionModeStyle</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionProviderClass" class="hiddenlink" target="rightframe">actionProviderClass</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.ADD_VOICEMAIL" class="hiddenlink" target="rightframe">ADD_VOICEMAIL</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.alignmentMode" class="hiddenlink" target="rightframe">alignmentMode</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ALPHA" class="hiddenlink" target="rightframe">ALPHA</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_DISTANCE" class="hiddenlink" target="rightframe">AXIS_DISTANCE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_TILT" class="hiddenlink" target="rightframe">AXIS_TILT</A>
+</nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundSplit" class="hiddenlink" target="rightframe">backgroundSplit</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundStacked" class="hiddenlink" target="rightframe">backgroundStacked</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ABOVE_CLIENT" class="hiddenlink" target="rightframe">BIND_ABOVE_CLIENT</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ADJUST_WITH_ACTIVITY" class="hiddenlink" target="rightframe">BIND_ADJUST_WITH_ACTIVITY</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ALLOW_OOM_MANAGEMENT" class="hiddenlink" target="rightframe">BIND_ALLOW_OOM_MANAGEMENT</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_IMPORTANT" class="hiddenlink" target="rightframe">BIND_IMPORTANT</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_TEXT_SERVICE" class="hiddenlink" target="rightframe">BIND_TEXT_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_VPN_SERVICE" class="hiddenlink" target="rightframe">BIND_VPN_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_WAIVE_PRIORITY" class="hiddenlink" target="rightframe">BIND_WAIVE_PRIORITY</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_BACK" class="hiddenlink" target="rightframe">BUTTON_BACK</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_FORWARD" class="hiddenlink" target="rightframe">BUTTON_FORWARD</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_PRIMARY" class="hiddenlink" target="rightframe">BUTTON_PRIMARY</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_SECONDARY" class="hiddenlink" target="rightframe">BUTTON_SECONDARY</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_TERTIARY" class="hiddenlink" target="rightframe">BUTTON_TERTIARY</A>
+</nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.canRetrieveWindowContent" class="hiddenlink" target="rightframe">canRetrieveWindowContent</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorActivatedHighlight" class="hiddenlink" target="rightframe">colorActivatedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorFocusedHighlight" class="hiddenlink" target="rightframe">colorFocusedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorLongPressedHighlight" class="hiddenlink" target="rightframe">colorLongPressedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorMultiSelectHighlight" class="hiddenlink" target="rightframe">colorMultiSelectHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorPressedHighlight" class="hiddenlink" target="rightframe">colorPressedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnCount" class="hiddenlink" target="rightframe">columnCount</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnOrderPreserved" class="hiddenlink" target="rightframe">columnOrderPreserved</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER" class="hiddenlink" target="rightframe">COMPONENT_ENABLED_STATE_DISABLED_USER</A>
+</nobr><br>
+<nobr><A HREF="android.speech.SpeechRecognizer.html#android.speech.SpeechRecognizer.CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">CONFIDENCE_SCORES</A>
+</nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>DATA_SET</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.GroupsColumns.html#android.provider.ContactsContract.GroupsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.GroupsColumns</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsColumns</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.SettingsColumns.html#android.provider.ContactsContract.SettingsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.SettingsColumns</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar_AlertDialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar_AlertDialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_Light_SegmentedButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_SegmentedButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.directionDescriptions" class="hiddenlink" target="rightframe">directionDescriptions</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.DISPLAY_PHOTO" class="hiddenlink" target="rightframe">DISPLAY_PHOTO</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableEnd" class="hiddenlink" target="rightframe">drawableEnd</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableStart" class="hiddenlink" target="rightframe">drawableStart</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.END" class="hiddenlink" target="rightframe">END</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageStats.html#android.content.pm.PackageStats.externalCodeSize" class="hiddenlink" target="rightframe">externalCodeSize</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_ALLOW_REPLACE" class="hiddenlink" target="rightframe">EXTRA_ALLOW_REPLACE</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_BUG_REPORT" class="hiddenlink" target="rightframe">EXTRA_BUG_REPORT</A>
+</nobr><br>
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">EXTRA_CONFIDENCE_SCORES</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_INSTALLER_PACKAGE_NAME" class="hiddenlink" target="rightframe">EXTRA_INSTALLER_PACKAGE_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_NOT_UNKNOWN_SOURCE" class="hiddenlink" target="rightframe">EXTRA_NOT_UNKNOWN_SOURCE</A>
+</nobr><br>
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_ORIGIN" class="hiddenlink" target="rightframe">EXTRA_ORIGIN</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_RETURN_RESULT" class="hiddenlink" target="rightframe">EXTRA_RETURN_RESULT</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE" class="hiddenlink" target="rightframe">EXTRA_SCO_AUDIO_PREVIOUS_STATE</A>
+</nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_SHORT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_SHORT_TITLE</A>
+</nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_TITLE</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.EXTRA_VERIFICATION_ID" class="hiddenlink" target="rightframe">EXTRA_VERIFICATION_ID</A>
+</nobr><br>
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.EXTRA_WEB_SEARCH_PENDINGINTENT" class="hiddenlink" target="rightframe">EXTRA_WEB_SEARCH_PENDINGINTENT</A>
+</nobr><br>
+<nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.EXTRA_WIFI_INFO" class="hiddenlink" target="rightframe">EXTRA_WIFI_INFO</A>
+</nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_WIFI_DIRECT" class="hiddenlink" target="rightframe">FEATURE_WIFI_DIRECT</A>
+</nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK" class="hiddenlink" target="rightframe">FEEDBACK_ALL_MASK</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_CONTENT_DESCRIPTION</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_TEXT" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_TEXT</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.FLAG_STOP_WITH_TASK" class="hiddenlink" target="rightframe">FLAG_STOP_WITH_TASK</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.flags" class="hiddenlink" target="rightframe">flags</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE" class="hiddenlink" target="rightframe">FOCUS_MODE_CONTINUOUS_PICTURE</A>
+</nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.bluetooth.BluetoothProfile.html#android.bluetooth.BluetoothProfile.HEALTH" class="hiddenlink" target="rightframe">HEALTH</A>
+</nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_OFF" class="hiddenlink" target="rightframe">HINTING_OFF</A>
+</nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_ON" class="hiddenlink" target="rightframe">HINTING_ON</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_bright" class="hiddenlink" target="rightframe">holo_blue_bright</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_dark" class="hiddenlink" target="rightframe">holo_blue_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_light" class="hiddenlink" target="rightframe">holo_blue_light</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_dark" class="hiddenlink" target="rightframe">holo_green_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_light" class="hiddenlink" target="rightframe">holo_green_light</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_dark" class="hiddenlink" target="rightframe">holo_orange_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_light" class="hiddenlink" target="rightframe">holo_orange_light</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_purple" class="hiddenlink" target="rightframe">holo_purple</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_dark" class="hiddenlink" target="rightframe">holo_red_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_light" class="hiddenlink" target="rightframe">holo_red_light</A>
+</nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH" class="hiddenlink" target="rightframe">ICE_CREAM_SANDWICH</A>
+</nobr><br>
+<nobr><A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE" class="hiddenlink" target="rightframe">INTENT_ACTION_TTS_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.INVALID_POINTER_ID" class="hiddenlink" target="rightframe">INVALID_POINTER_ID</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.Intents.html#android.provider.ContactsContract.Intents.INVITE_CONTACT" class="hiddenlink" target="rightframe">INVITE_CONTACT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.CallLog.Calls.html#android.provider.CallLog.Calls.IS_READ" class="hiddenlink" target="rightframe">IS_READ</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.IS_USER_PROFILE" class="hiddenlink" target="rightframe">IS_USER_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.isAuxiliary" class="hiddenlink" target="rightframe">isAuxiliary</A>
+</nobr><br>
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.KEY_ANDROID_PACKAGE_NAME" class="hiddenlink" target="rightframe">KEY_ANDROID_PACKAGE_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_3D_MODE" class="hiddenlink" target="rightframe">KEYCODE_3D_MODE</A>
+</nobr><br>
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_LANGUAGE_SWITCH" class="hiddenlink" target="rightframe">KEYCODE_LANGUAGE_SWITCH</A>
+</nobr><br>
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_MANNER_MODE" class="hiddenlink" target="rightframe">KEYCODE_MANNER_MODE</A>
+</nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_columnSpan" class="hiddenlink" target="rightframe">layout_columnSpan</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_row" class="hiddenlink" target="rightframe">layout_row</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_rowSpan" class="hiddenlink" target="rightframe">layout_rowSpan</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightLarge" class="hiddenlink" target="rightframe">listPreferredItemHeightLarge</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightSmall" class="hiddenlink" target="rightframe">listPreferredItemHeightSmall</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingLeft" class="hiddenlink" target="rightframe">listPreferredItemPaddingLeft</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingRight" class="hiddenlink" target="rightframe">listPreferredItemPaddingRight</A>
+</nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_BITRATE" class="hiddenlink" target="rightframe">METADATA_KEY_BITRATE</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_AUDIO</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_VIDEO</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_HEIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_WIDTH</A>
+</nobr><br>
+<i>minResizeHeight</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeHeight" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeHeight" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<i>minResizeWidth</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeWidth" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeWidth" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.notificationTimeout" class="hiddenlink" target="rightframe">notificationTimeout</A>
+</nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.overridesImplicitlyEnabledSubtype" class="hiddenlink" target="rightframe">overridesImplicitlyEnabledSubtype</A>
+</nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.packageNames" class="hiddenlink" target="rightframe">packageNames</A>
+</nobr><br>
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK" class="hiddenlink" target="rightframe">PASSWORD_QUALITY_BIOMETRIC_WEAK</A>
+</nobr><br>
+<i>PHOTO_FILE_ID</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html#android.provider.ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.CommonDataKinds.Photo</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.Contacts.Photo</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.ContactsColumns</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_NAME" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_TYPE" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_TYPE</A>
+</nobr><br>
+<i>PROFILE_CONTENT_URI</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html#android.provider.ContactsContract.RawContactsEntity.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsEntity</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.StatusUpdates.html#android.provider.ContactsContract.StatusUpdates.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.StatusUpdates</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.publicKey" class="hiddenlink" target="rightframe">publicKey</A>
+</nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.System.html#android.provider.Settings.System.RADIO_NFC" class="hiddenlink" target="rightframe">RADIO_NFC</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.RAW_CONTACT_IS_USER_PROFILE" class="hiddenlink" target="rightframe">RAW_CONTACT_IS_USER_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.READ_PROFILE" class="hiddenlink" target="rightframe">READ_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK" class="hiddenlink" target="rightframe">RELATIVE_HORIZONTAL_GRAVITY_MASK</A>
+</nobr><br>
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_LAYOUT_DIRECTION" class="hiddenlink" target="rightframe">RELATIVE_LAYOUT_DIRECTION</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.requiresFadingEdge" class="hiddenlink" target="rightframe">requiresFadingEdge</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION" class="hiddenlink" target="rightframe">ROTATION</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_X" class="hiddenlink" target="rightframe">ROTATION_X</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_Y" class="hiddenlink" target="rightframe">ROTATION_Y</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowCount" class="hiddenlink" target="rightframe">rowCount</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowOrderPreserved" class="hiddenlink" target="rightframe">rowOrderPreserved</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_X" class="hiddenlink" target="rightframe">SCALE_X</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_Y" class="hiddenlink" target="rightframe">SCALE_Y</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.SCO_AUDIO_STATE_CONNECTING" class="hiddenlink" target="rightframe">SCO_AUDIO_STATE_CONNECTING</A>
+</nobr><br>
+<i>SERVICE_META_DATA</i><br>
+<nobr> in
+<A HREF="android.accessibilityservice.AccessibilityService.html#android.accessibilityservice.AccessibilityService.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.accessibilityservice.AccessibilityService</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.speech.tts.TextToSpeech.Engine</A>
+</nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" class="hiddenlink" target="rightframe">SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW</A>
+</nobr><br>
+<nobr><A HREF="android.view.InputDevice.html#android.view.InputDevice.SOURCE_STYLUS" class="hiddenlink" target="rightframe">SOURCE_STYLUS</A>
+</nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_DATE_INVALID" class="hiddenlink" target="rightframe">SSL_DATE_INVALID</A>
+</nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_INVALID" class="hiddenlink" target="rightframe">SSL_INVALID</A>
+</nobr><br>
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.START" class="hiddenlink" target="rightframe">START</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_can_accept" class="hiddenlink" target="rightframe">state_drag_can_accept</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_hovered" class="hiddenlink" target="rightframe">state_drag_hovered</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_hovered" class="hiddenlink" target="rightframe">state_hovered</A>
+</nobr><br>
+<nobr><A HREF="android.R.integer.html#android.R.integer.status_bar_notification_info_maxnum" class="hiddenlink" target="rightframe">status_bar_notification_info_maxnum</A>
+</nobr><br>
+<nobr><A HREF="android.R.string.html#android.R.string.status_bar_notification_info_overflow" class="hiddenlink" target="rightframe">status_bar_notification_info_overflow</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.stopWithTask" class="hiddenlink" target="rightframe">stopWithTask</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeExtraValue" class="hiddenlink" target="rightframe">subtypeExtraValue</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeLocale" class="hiddenlink" target="rightframe">subtypeLocale</A>
+</nobr><br>
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT" class="hiddenlink" target="rightframe">SUGGEST_COLUMN_LAST_ACCESS_HINT</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchMinWidth" class="hiddenlink" target="rightframe">switchMinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPadding" class="hiddenlink" target="rightframe">switchPadding</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPreferenceStyle" class="hiddenlink" target="rightframe">switchPreferenceStyle</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextAppearance" class="hiddenlink" target="rightframe">switchTextAppearance</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOff" class="hiddenlink" target="rightframe">switchTextOff</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOn" class="hiddenlink" target="rightframe">switchTextOn</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_HIDE_NAVIGATION</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_LOW_PROFILE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_LOW_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_VISIBLE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_VISIBLE</A>
+</nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.targetDescriptions" class="hiddenlink" target="rightframe">targetDescriptions</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.TEXT_SERVICES_MANAGER_SERVICE" class="hiddenlink" target="rightframe">TEXT_SERVICES_MANAGER_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAllCaps" class="hiddenlink" target="rightframe">textAllCaps</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_DialogWindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_DialogWindowTitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Subtitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Menu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_Button" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_Button</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownHint" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownHint</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_EditText" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_EditText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_IconMenu_Item" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_IconMenu_Item</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TabWidget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TabWidget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_WindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_WindowTitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Menu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_SuggestionHighlight" class="hiddenlink" target="rightframe">TextAppearance_SuggestionHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItem" class="hiddenlink" target="rightframe">textAppearanceListItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItemSmall" class="hiddenlink" target="rightframe">textAppearanceListItemSmall</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textEditSuggestionItemLayout" class="hiddenlink" target="rightframe">textEditSuggestionItemLayout</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textSuggestionsWindowStyle" class="hiddenlink" target="rightframe">textSuggestionsWindowStyle</A>
+</nobr><br>
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_DARK</A>
+</nobr><br>
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_LIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault" class="hiddenlink" target="rightframe">Theme_DeviceDefault</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_InputMethod" class="hiddenlink" target="rightframe">Theme_DeviceDefault_InputMethod</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DarkActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar_Fullscreen</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Panel</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar_Fullscreen</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Panel</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper_NoTitleBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper_NoTitleBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_Holo_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_Holo_Light_DarkActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.thumbTextPadding" class="hiddenlink" target="rightframe">thumbTextPadding</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_ERASER" class="hiddenlink" target="rightframe">TOOL_TYPE_ERASER</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_FINGER" class="hiddenlink" target="rightframe">TOOL_TYPE_FINGER</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_MOUSE" class="hiddenlink" target="rightframe">TOOL_TYPE_MOUSE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_STYLUS" class="hiddenlink" target="rightframe">TOOL_TYPE_STYLUS</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_UNKNOWN" class="hiddenlink" target="rightframe">TOOL_TYPE_UNKNOWN</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TOUCH_EXPLORATION_ENABLED" class="hiddenlink" target="rightframe">TOUCH_EXPLORATION_ENABLED</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.track" class="hiddenlink" target="rightframe">track</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_X" class="hiddenlink" target="rightframe">TRANSLATION_X</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_Y" class="hiddenlink" target="rightframe">TRANSLATION_Y</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_AMBIENT_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_AMBIENT_TEMPERATURE</A>
+</nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_DIRECTORY" class="hiddenlink" target="rightframe">TYPE_DIRECTORY</A>
+</nobr><br>
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.TYPE_DUMMY" class="hiddenlink" target="rightframe">TYPE_DUMMY</A>
+</nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_FILE" class="hiddenlink" target="rightframe">TYPE_FILE</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_RELATIVE_HUMIDITY" class="hiddenlink" target="rightframe">TYPE_RELATIVE_HUMIDITY</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_END</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_START</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_ENTER</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_EXIT</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED" class="hiddenlink" target="rightframe">TYPE_VIEW_SCROLLED</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED" class="hiddenlink" target="rightframe">TYPE_VIEW_TEXT_SELECTION_CHANGED</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOW_CONTENT_CHANGED</A>
+</nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" class="hiddenlink" target="rightframe">UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW</A>
+</nobr><br>
+<i>uiOptions</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.uiOptions" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ActivityInfo</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.content.pm.ApplicationInfo.html#android.content.pm.ApplicationInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ApplicationInfo</A>
+</nobr><br>
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.USAGE_GRAPHICS_RENDER_TARGET" class="hiddenlink" target="rightframe">USAGE_GRAPHICS_RENDER_TARGET</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.useDefaultMargins" class="hiddenlink" target="rightframe">useDefaultMargins</A>
+</nobr><br>
+<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_DISABLE_CAMERA" class="hiddenlink" target="rightframe">USES_POLICY_DISABLE_CAMERA</A>
+</nobr><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_ALLOW" class="hiddenlink" target="rightframe">VERIFICATION_ALLOW</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_REJECT" class="hiddenlink" target="rightframe">VERIFICATION_REJECT</A>
+</nobr><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault" class="hiddenlink" target="rightframe">Widget_DeviceDefault</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_CloseMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_Overflow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_TextButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_TextButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_AutoCompleteTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Inset</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Toggle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CalendarView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_CheckBox</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_RadioButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_Star</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DatePicker" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DatePicker</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_EditText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ExpandableListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_GridView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_HorizontalScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ImageButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_CloseMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_Overflow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_AutoCompleteTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Inset</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Toggle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CalendarView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_CheckBox</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_RadioButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_Star</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_EditText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ExpandableListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_GridView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_HorizontalScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ImageButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListPopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView_DropDown</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Horizontal</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Indicator</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_SeekBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Tab</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TabWidget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView_SpinnerItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListPopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView_DropDown</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Horizontal</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Indicator</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_SeekBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Tab</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TabWidget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView_SpinnerItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionMode_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Light_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.WIFI_P2P_SERVICE" class="hiddenlink" target="rightframe">WIFI_P2P_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_PROFILE" class="hiddenlink" target="rightframe">WRITE_PROFILE</A>
+</nobr><br>
+<A NAME="X"></A>
+<br><font size="+2">X</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.X" class="hiddenlink" target="rightframe">X</A>
+</nobr><br>
+<A NAME="Y"></A>
+<br><font size="+2">Y</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_all.html b/docs/html/sdk/api_diff/14/changes/fields_index_all.html
new file mode 100644
index 0000000..7c9cc67
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_all.html
@@ -0,0 +1,1593 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Fields</b>
+ <br>
+<A HREF="fields_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityEventTypes" class="hiddenlink" target="rightframe">accessibilityEventTypes</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFeedbackType" class="hiddenlink" target="rightframe">accessibilityFeedbackType</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.accessibilityFlags" class="hiddenlink" target="rightframe">accessibilityFlags</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_APP_ERROR" class="hiddenlink" target="rightframe">ACTION_APP_ERROR</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_ENTER" class="hiddenlink" target="rightframe">ACTION_HOVER_ENTER</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.ACTION_HOVER_EXIT" class="hiddenlink" target="rightframe">ACTION_HOVER_EXIT</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_INSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_INSTALL_PACKAGE</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_MANAGE_NETWORK_USAGE" class="hiddenlink" target="rightframe">ACTION_MANAGE_NETWORK_USAGE</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_PICTURE" class="hiddenlink" target="rightframe">ACTION_NEW_PICTURE</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.ACTION_NEW_VIDEO" class="hiddenlink" target="rightframe">ACTION_NEW_VIDEO</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.html#android.provider.Settings.ACTION_NFCSHARING_SETTINGS" class="hiddenlink" target="rightframe">ACTION_NFCSHARING_SETTINGS</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_FULLY_REMOVED" class="hiddenlink" target="rightframe">ACTION_PACKAGE_FULLY_REMOVED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_INSTALL" class="hiddenlink" target="rightframe">ACTION_PACKAGE_INSTALL</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_NEEDS_VERIFICATION" class="hiddenlink" target="rightframe">ACTION_PACKAGE_NEEDS_VERIFICATION</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_CHANGED</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_UPDATED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_CONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_CONNECTED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_DISCONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_DISCONNECTED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UNINSTALL_PACKAGE" class="hiddenlink" target="rightframe">ACTION_UNINSTALL_PACKAGE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarDivider" class="hiddenlink" target="rightframe">actionBarDivider</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarItemBackground" class="hiddenlink" target="rightframe">actionBarItemBackground</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarSplitStyle" class="hiddenlink" target="rightframe">actionBarSplitStyle</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionBarWidgetTheme" class="hiddenlink" target="rightframe">actionBarWidgetTheme</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSelectAllDrawable" class="hiddenlink" target="rightframe">actionModeSelectAllDrawable</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeSplitBackground" class="hiddenlink" target="rightframe">actionModeSplitBackground</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionModeStyle" class="hiddenlink" target="rightframe">actionModeStyle</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.actionProviderClass" class="hiddenlink" target="rightframe">actionProviderClass</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.ADD_VOICEMAIL" class="hiddenlink" target="rightframe">ADD_VOICEMAIL</A>
+</nobr><br>
+<nobr><A HREF="android.provider.MediaStore.Audio.AudioColumns.html#android.provider.MediaStore.Audio.AudioColumns.ALBUM_ART" class="hiddenlink" target="rightframe"><strike>ALBUM_ART</strike></A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.alignmentMode" class="hiddenlink" target="rightframe">alignmentMode</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ALPHA" class="hiddenlink" target="rightframe">ALPHA</A>
+</nobr><br>
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.ANCHOR_TYPE" class="hiddenlink" target="rightframe">ANCHOR_TYPE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_DISTANCE" class="hiddenlink" target="rightframe">AXIS_DISTANCE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.AXIS_TILT" class="hiddenlink" target="rightframe">AXIS_TILT</A>
+</nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.BACKGROUND_DATA" class="hiddenlink" target="rightframe">BACKGROUND_DATA</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundSplit" class="hiddenlink" target="rightframe">backgroundSplit</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.backgroundStacked" class="hiddenlink" target="rightframe">backgroundStacked</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ABOVE_CLIENT" class="hiddenlink" target="rightframe">BIND_ABOVE_CLIENT</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ADJUST_WITH_ACTIVITY" class="hiddenlink" target="rightframe">BIND_ADJUST_WITH_ACTIVITY</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_ALLOW_OOM_MANAGEMENT" class="hiddenlink" target="rightframe">BIND_ALLOW_OOM_MANAGEMENT</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_IMPORTANT" class="hiddenlink" target="rightframe">BIND_IMPORTANT</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_TEXT_SERVICE" class="hiddenlink" target="rightframe">BIND_TEXT_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.BIND_VPN_SERVICE" class="hiddenlink" target="rightframe">BIND_VPN_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.BIND_WAIVE_PRIORITY" class="hiddenlink" target="rightframe">BIND_WAIVE_PRIORITY</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_BACK" class="hiddenlink" target="rightframe">BUTTON_BACK</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_FORWARD" class="hiddenlink" target="rightframe">BUTTON_FORWARD</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_PRIMARY" class="hiddenlink" target="rightframe">BUTTON_PRIMARY</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_SECONDARY" class="hiddenlink" target="rightframe">BUTTON_SECONDARY</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.BUTTON_TERTIARY" class="hiddenlink" target="rightframe">BUTTON_TERTIARY</A>
+</nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.canRetrieveWindowContent" class="hiddenlink" target="rightframe">canRetrieveWindowContent</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorActivatedHighlight" class="hiddenlink" target="rightframe">colorActivatedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorFocusedHighlight" class="hiddenlink" target="rightframe">colorFocusedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorLongPressedHighlight" class="hiddenlink" target="rightframe">colorLongPressedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorMultiSelectHighlight" class="hiddenlink" target="rightframe">colorMultiSelectHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.colorPressedHighlight" class="hiddenlink" target="rightframe">colorPressedHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnCount" class="hiddenlink" target="rightframe">columnCount</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.columnOrderPreserved" class="hiddenlink" target="rightframe">columnOrderPreserved</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER" class="hiddenlink" target="rightframe">COMPONENT_ENABLED_STATE_DISABLED_USER</A>
+</nobr><br>
+<nobr><A HREF="android.speech.SpeechRecognizer.html#android.speech.SpeechRecognizer.CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">CONFIDENCE_SCORES</A>
+</nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>DATA_SET</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.GroupsColumns.html#android.provider.ContactsContract.GroupsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.GroupsColumns</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsColumns</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.SettingsColumns.html#android.provider.ContactsContract.SettingsColumns.DATA_SET" class="hiddenlink" target="rightframe">android.provider.ContactsContract.SettingsColumns</A>
+</nobr><br>
+<nobr><A HREF="android.util.Config.html#android.util.Config.DEBUG" class="hiddenlink" target="rightframe">DEBUG</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_ButtonBar_AlertDialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_ButtonBar_AlertDialog" class="hiddenlink" target="rightframe">DeviceDefault_Light_ButtonBar_AlertDialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_Light_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_Light_SegmentedButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.DeviceDefault_SegmentedButton" class="hiddenlink" target="rightframe">DeviceDefault_SegmentedButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.directionDescriptions" class="hiddenlink" target="rightframe">directionDescriptions</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.DISPLAY_PHOTO" class="hiddenlink" target="rightframe">DISPLAY_PHOTO</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableEnd" class="hiddenlink" target="rightframe">drawableEnd</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.drawableStart" class="hiddenlink" target="rightframe">drawableStart</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.END" class="hiddenlink" target="rightframe">END</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageStats.html#android.content.pm.PackageStats.externalCodeSize" class="hiddenlink" target="rightframe">externalCodeSize</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_ALLOW_REPLACE" class="hiddenlink" target="rightframe">EXTRA_ALLOW_REPLACE</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_BUG_REPORT" class="hiddenlink" target="rightframe">EXTRA_BUG_REPORT</A>
+</nobr><br>
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_CONFIDENCE_SCORES" class="hiddenlink" target="rightframe">EXTRA_CONFIDENCE_SCORES</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_INSTALLER_PACKAGE_NAME" class="hiddenlink" target="rightframe">EXTRA_INSTALLER_PACKAGE_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.EXTRA_NETWORK_INFO" class="hiddenlink" target="rightframe">EXTRA_NETWORK_INFO</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_NOT_UNKNOWN_SOURCE" class="hiddenlink" target="rightframe">EXTRA_NOT_UNKNOWN_SOURCE</A>
+</nobr><br>
+<nobr><A HREF="android.speech.RecognizerIntent.html#android.speech.RecognizerIntent.EXTRA_ORIGIN" class="hiddenlink" target="rightframe">EXTRA_ORIGIN</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_RETURN_RESULT" class="hiddenlink" target="rightframe">EXTRA_RETURN_RESULT</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE" class="hiddenlink" target="rightframe">EXTRA_SCO_AUDIO_PREVIOUS_STATE</A>
+</nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_SHORT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_SHORT_TITLE</A>
+</nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE" class="hiddenlink" target="rightframe">EXTRA_SHOW_FRAGMENT_TITLE</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.EXTRA_VERIFICATION_ID" class="hiddenlink" target="rightframe">EXTRA_VERIFICATION_ID</A>
+</nobr><br>
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.EXTRA_WEB_SEARCH_PENDINGINTENT" class="hiddenlink" target="rightframe">EXTRA_WEB_SEARCH_PENDINGINTENT</A>
+</nobr><br>
+<nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.EXTRA_WIFI_INFO" class="hiddenlink" target="rightframe">EXTRA_WIFI_INFO</A>
+</nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.fadingEdge" class="hiddenlink" target="rightframe">fadingEdge</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_WIFI_DIRECT" class="hiddenlink" target="rightframe">FEATURE_WIFI_DIRECT</A>
+</nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK" class="hiddenlink" target="rightframe">FEEDBACK_ALL_MASK</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_CONTENT_DESCRIPTION</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.FIND_VIEWS_WITH_TEXT" class="hiddenlink" target="rightframe">FIND_VIEWS_WITH_TEXT</A>
+</nobr><br>
+<nobr><A HREF="android.view.WindowManager.LayoutParams.html#android.view.WindowManager.LayoutParams.FLAG_BLUR_BEHIND" class="hiddenlink" target="rightframe">FLAG_BLUR_BEHIND</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.FLAG_STOP_WITH_TASK" class="hiddenlink" target="rightframe">FLAG_STOP_WITH_TASK</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.ServiceInfo.html#android.content.pm.ServiceInfo.flags" class="hiddenlink" target="rightframe">flags</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE" class="hiddenlink" target="rightframe">FOCUS_MODE_CONTINUOUS_PICTURE</A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_BLUR" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_BLUR</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_DIM" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_DIM</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_MASK" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_MASK</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_NORMAL" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_NORMAL</strike></A>
+</nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.GPU" class="hiddenlink" target="rightframe"><strike>GPU</strike></A>
+</nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HARDWARE" class="hiddenlink" target="rightframe"><strike>HARDWARE</strike></A>
+</nobr><br>
+<nobr><A HREF="android.bluetooth.BluetoothProfile.html#android.bluetooth.BluetoothProfile.HEALTH" class="hiddenlink" target="rightframe">HEALTH</A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HIDDEN" class="hiddenlink" target="rightframe"><strike>HIDDEN</strike></A>
+</nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_OFF" class="hiddenlink" target="rightframe">HINTING_OFF</A>
+</nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.HINTING_ON" class="hiddenlink" target="rightframe">HINTING_ON</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_bright" class="hiddenlink" target="rightframe">holo_blue_bright</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_dark" class="hiddenlink" target="rightframe">holo_blue_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_blue_light" class="hiddenlink" target="rightframe">holo_blue_light</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_dark" class="hiddenlink" target="rightframe">holo_green_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_green_light" class="hiddenlink" target="rightframe">holo_green_light</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_dark" class="hiddenlink" target="rightframe">holo_orange_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_orange_light" class="hiddenlink" target="rightframe">holo_orange_light</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_purple" class="hiddenlink" target="rightframe">holo_purple</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_dark" class="hiddenlink" target="rightframe">holo_red_dark</A>
+</nobr><br>
+<nobr><A HREF="android.R.color.html#android.R.color.holo_red_light" class="hiddenlink" target="rightframe">holo_red_light</A>
+</nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH" class="hiddenlink" target="rightframe">ICE_CREAM_SANDWICH</A>
+</nobr><br>
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.IMAGE_ANCHOR_TYPE" class="hiddenlink" target="rightframe">IMAGE_ANCHOR_TYPE</A>
+</nobr><br>
+<nobr><A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE" class="hiddenlink" target="rightframe">INTENT_ACTION_TTS_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.INVALID_POINTER_ID" class="hiddenlink" target="rightframe">INVALID_POINTER_ID</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.Intents.html#android.provider.ContactsContract.Intents.INVITE_CONTACT" class="hiddenlink" target="rightframe">INVITE_CONTACT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.CallLog.Calls.html#android.provider.CallLog.Calls.IS_READ" class="hiddenlink" target="rightframe">IS_READ</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.IS_USER_PROFILE" class="hiddenlink" target="rightframe">IS_USER_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.isAuxiliary" class="hiddenlink" target="rightframe">isAuxiliary</A>
+</nobr><br>
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.KEY_ANDROID_PACKAGE_NAME" class="hiddenlink" target="rightframe">KEY_ANDROID_PACKAGE_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_3D_MODE" class="hiddenlink" target="rightframe">KEYCODE_3D_MODE</A>
+</nobr><br>
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_LANGUAGE_SWITCH" class="hiddenlink" target="rightframe">KEYCODE_LANGUAGE_SWITCH</A>
+</nobr><br>
+<nobr><A HREF="android.view.KeyEvent.html#android.view.KeyEvent.KEYCODE_MANNER_MODE" class="hiddenlink" target="rightframe">KEYCODE_MANNER_MODE</A>
+</nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_columnSpan" class="hiddenlink" target="rightframe">layout_columnSpan</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_row" class="hiddenlink" target="rightframe">layout_row</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.layout_rowSpan" class="hiddenlink" target="rightframe">layout_rowSpan</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightLarge" class="hiddenlink" target="rightframe">listPreferredItemHeightLarge</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemHeightSmall" class="hiddenlink" target="rightframe">listPreferredItemHeightSmall</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingLeft" class="hiddenlink" target="rightframe">listPreferredItemPaddingLeft</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.listPreferredItemPaddingRight" class="hiddenlink" target="rightframe">listPreferredItemPaddingRight</A>
+</nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH" class="hiddenlink" target="rightframe">MAX_TEXT_LENGTH</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_BITRATE" class="hiddenlink" target="rightframe">METADATA_KEY_BITRATE</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_AUDIO</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO" class="hiddenlink" target="rightframe">METADATA_KEY_HAS_VIDEO</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_HEIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH" class="hiddenlink" target="rightframe">METADATA_KEY_VIDEO_WIDTH</A>
+</nobr><br>
+<i>minResizeHeight</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeHeight" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeHeight" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<i>minResizeWidth</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.minResizeWidth" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.appwidget.AppWidgetProviderInfo.html#android.appwidget.AppWidgetProviderInfo.minResizeWidth" class="hiddenlink" target="rightframe">android.appwidget.AppWidgetProviderInfo</A>
+</nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.NON_PREMULTIPLIED" class="hiddenlink" target="rightframe"><strike>NON_PREMULTIPLIED</strike></A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.notificationTimeout" class="hiddenlink" target="rightframe">notificationTimeout</A>
+</nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.overridesImplicitlyEnabledSubtype" class="hiddenlink" target="rightframe">overridesImplicitlyEnabledSubtype</A>
+</nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.packageNames" class="hiddenlink" target="rightframe">packageNames</A>
+</nobr><br>
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK" class="hiddenlink" target="rightframe">PASSWORD_QUALITY_BIOMETRIC_WEAK</A>
+</nobr><br>
+<i>PHOTO_FILE_ID</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html#android.provider.ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.CommonDataKinds.Photo</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.Contacts.Photo.html#android.provider.ContactsContract.Contacts.Photo.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.Contacts.Photo</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.ContactsColumns.html#android.provider.ContactsContract.ContactsColumns.PHOTO_FILE_ID" class="hiddenlink" target="rightframe">android.provider.ContactsContract.ContactsColumns</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_NAME" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.PRIMARY_ACCOUNT_TYPE" class="hiddenlink" target="rightframe">PRIMARY_ACCOUNT_TYPE</A>
+</nobr><br>
+<i>PROFILE_CONTENT_URI</i><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.RawContactsEntity.html#android.provider.ContactsContract.RawContactsEntity.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.RawContactsEntity</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.provider.ContactsContract.StatusUpdates.html#android.provider.ContactsContract.StatusUpdates.PROFILE_CONTENT_URI" class="hiddenlink" target="rightframe">android.provider.ContactsContract.StatusUpdates</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.publicKey" class="hiddenlink" target="rightframe">publicKey</A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.PUSH_BUFFERS" class="hiddenlink" target="rightframe"><strike>PUSH_BUFFERS</strike></A>
+</nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.html#android.os.Build.RADIO" class="hiddenlink" target="rightframe">RADIO</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.System.html#android.provider.Settings.System.RADIO_NFC" class="hiddenlink" target="rightframe">RADIO_NFC</A>
+</nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.RawContactsColumns.html#android.provider.ContactsContract.RawContactsColumns.RAW_CONTACT_IS_USER_PROFILE" class="hiddenlink" target="rightframe">RAW_CONTACT_IS_USER_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.READ_PROFILE" class="hiddenlink" target="rightframe">READ_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK" class="hiddenlink" target="rightframe">RELATIVE_HORIZONTAL_GRAVITY_MASK</A>
+</nobr><br>
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.RELATIVE_LAYOUT_DIRECTION" class="hiddenlink" target="rightframe">RELATIVE_LAYOUT_DIRECTION</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.requiresFadingEdge" class="hiddenlink" target="rightframe">requiresFadingEdge</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION" class="hiddenlink" target="rightframe">ROTATION</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_X" class="hiddenlink" target="rightframe">ROTATION_X</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.ROTATION_Y" class="hiddenlink" target="rightframe">ROTATION_Y</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowCount" class="hiddenlink" target="rightframe">rowCount</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.rowOrderPreserved" class="hiddenlink" target="rightframe">rowOrderPreserved</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_X" class="hiddenlink" target="rightframe">SCALE_X</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SCALE_Y" class="hiddenlink" target="rightframe">SCALE_Y</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.SCO_AUDIO_STATE_CONNECTING" class="hiddenlink" target="rightframe">SCO_AUDIO_STATE_CONNECTING</A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SECURE" class="hiddenlink" target="rightframe"><strike>SECURE</strike></A>
+</nobr><br>
+<i>SERVICE_META_DATA</i><br>
+<nobr> in
+<A HREF="android.accessibilityservice.AccessibilityService.html#android.accessibilityservice.AccessibilityService.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.accessibilityservice.AccessibilityService</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.speech.tts.TextToSpeech.Engine.html#android.speech.tts.TextToSpeech.Engine.SERVICE_META_DATA" class="hiddenlink" target="rightframe">android.speech.tts.TextToSpeech.Engine</A>
+</nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" class="hiddenlink" target="rightframe">SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW</A>
+</nobr><br>
+<nobr><A HREF="android.view.InputDevice.html#android.view.InputDevice.SOURCE_STYLUS" class="hiddenlink" target="rightframe">SOURCE_STYLUS</A>
+</nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_DATE_INVALID" class="hiddenlink" target="rightframe">SSL_DATE_INVALID</A>
+</nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_INVALID" class="hiddenlink" target="rightframe">SSL_INVALID</A>
+</nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_MAX_ERROR" class="hiddenlink" target="rightframe">SSL_MAX_ERROR</A>
+</nobr><br>
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.START" class="hiddenlink" target="rightframe">START</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_can_accept" class="hiddenlink" target="rightframe">state_drag_can_accept</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_drag_hovered" class="hiddenlink" target="rightframe">state_drag_hovered</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.state_hovered" class="hiddenlink" target="rightframe">state_hovered</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_HIDDEN" class="hiddenlink" target="rightframe">STATUS_BAR_HIDDEN</A>
+</nobr><br>
+<nobr><A HREF="android.R.integer.html#android.R.integer.status_bar_notification_info_maxnum" class="hiddenlink" target="rightframe">status_bar_notification_info_maxnum</A>
+</nobr><br>
+<nobr><A HREF="android.R.string.html#android.R.string.status_bar_notification_info_overflow" class="hiddenlink" target="rightframe">status_bar_notification_info_overflow</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_VISIBLE" class="hiddenlink" target="rightframe">STATUS_BAR_VISIBLE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.stopWithTask" class="hiddenlink" target="rightframe">stopWithTask</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeExtraValue" class="hiddenlink" target="rightframe">subtypeExtraValue</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.subtypeLocale" class="hiddenlink" target="rightframe">subtypeLocale</A>
+</nobr><br>
+<nobr><A HREF="android.app.SearchManager.html#android.app.SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT" class="hiddenlink" target="rightframe">SUGGEST_COLUMN_LAST_ACCESS_HINT</A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURACE_FROZEN</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_BLUR_FREEZE" class="hiddenlink" target="rightframe"><strike>SURFACE_BLUR_FREEZE</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_DITHER" class="hiddenlink" target="rightframe"><strike>SURFACE_DITHER</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURFACE_FROZEN</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_HIDDEN" class="hiddenlink" target="rightframe"><strike>SURFACE_HIDDEN</strike></A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchMinWidth" class="hiddenlink" target="rightframe">switchMinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPadding" class="hiddenlink" target="rightframe">switchPadding</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchPreferenceStyle" class="hiddenlink" target="rightframe">switchPreferenceStyle</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextAppearance" class="hiddenlink" target="rightframe">switchTextAppearance</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOff" class="hiddenlink" target="rightframe">switchTextOff</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.switchTextOn" class="hiddenlink" target="rightframe">switchTextOn</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_HIDE_NAVIGATION</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_LOW_PROFILE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_LOW_PROFILE</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.SYSTEM_UI_FLAG_VISIBLE" class="hiddenlink" target="rightframe">SYSTEM_UI_FLAG_VISIBLE</A>
+</nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.targetDescriptions" class="hiddenlink" target="rightframe">targetDescriptions</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.TEXT_SERVICES_MANAGER_SERVICE" class="hiddenlink" target="rightframe">TEXT_SERVICES_MANAGER_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAllCaps" class="hiddenlink" target="rightframe">textAllCaps</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_DialogWindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_DialogWindowTitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Large_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Large_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Medium_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Medium_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Subtitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_SearchResult_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_SearchResult_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Small_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Small_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Menu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_Button" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_Button</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownHint" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownHint</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_DropDownItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_DropDownItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_EditText" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_EditText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_IconMenu_Item" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_IconMenu_Item</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Large" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_PopupMenu_Small" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_PopupMenu_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TabWidget" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TabWidget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_DeviceDefault_WindowTitle" class="hiddenlink" target="rightframe">TextAppearance_DeviceDefault_WindowTitle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Menu" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Menu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionBar_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionBar_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_Holo_Widget_ActionMode_Title_Inverse" class="hiddenlink" target="rightframe">TextAppearance_Holo_Widget_ActionMode_Title_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.TextAppearance_SuggestionHighlight" class="hiddenlink" target="rightframe">TextAppearance_SuggestionHighlight</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItem" class="hiddenlink" target="rightframe">textAppearanceListItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textAppearanceListItemSmall" class="hiddenlink" target="rightframe">textAppearanceListItemSmall</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textEditSuggestionItemLayout" class="hiddenlink" target="rightframe">textEditSuggestionItemLayout</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.textSuggestionsWindowStyle" class="hiddenlink" target="rightframe">textSuggestionsWindowStyle</A>
+</nobr><br>
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_DARK</A>
+</nobr><br>
+<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT" class="hiddenlink" target="rightframe">THEME_DEVICE_DEFAULT_LIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault" class="hiddenlink" target="rightframe">Theme_DeviceDefault</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_InputMethod" class="hiddenlink" target="rightframe">Theme_DeviceDefault_InputMethod</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DarkActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_NoActionBar_Fullscreen</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Light_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Light_Panel</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen" class="hiddenlink" target="rightframe">Theme_DeviceDefault_NoActionBar_Fullscreen</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Panel" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Panel</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_DeviceDefault_Wallpaper_NoTitleBar" class="hiddenlink" target="rightframe">Theme_DeviceDefault_Wallpaper_NoTitleBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Theme_Holo_Light_DarkActionBar" class="hiddenlink" target="rightframe">Theme_Holo_Light_DarkActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.thumbTextPadding" class="hiddenlink" target="rightframe">thumbTextPadding</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_ERASER" class="hiddenlink" target="rightframe">TOOL_TYPE_ERASER</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_FINGER" class="hiddenlink" target="rightframe">TOOL_TYPE_FINGER</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_MOUSE" class="hiddenlink" target="rightframe">TOOL_TYPE_MOUSE</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_STYLUS" class="hiddenlink" target="rightframe">TOOL_TYPE_STYLUS</A>
+</nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.TOOL_TYPE_UNKNOWN" class="hiddenlink" target="rightframe">TOOL_TYPE_UNKNOWN</A>
+</nobr><br>
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR</A>
+</nobr><br>
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TOUCH_EXPLORATION_ENABLED" class="hiddenlink" target="rightframe">TOUCH_EXPLORATION_ENABLED</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.track" class="hiddenlink" target="rightframe">track</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_X" class="hiddenlink" target="rightframe">TRANSLATION_X</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.TRANSLATION_Y" class="hiddenlink" target="rightframe">TRANSLATION_Y</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY" class="hiddenlink" target="rightframe">TTS_DEFAULT_COUNTRY</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_LANG" class="hiddenlink" target="rightframe">TTS_DEFAULT_LANG</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_VARIANT" class="hiddenlink" target="rightframe">TTS_DEFAULT_VARIANT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_USE_DEFAULTS" class="hiddenlink" target="rightframe">TTS_USE_DEFAULTS</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_AMBIENT_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_AMBIENT_TEMPERATURE</A>
+</nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_DIRECTORY" class="hiddenlink" target="rightframe">TYPE_DIRECTORY</A>
+</nobr><br>
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.TYPE_DUMMY" class="hiddenlink" target="rightframe">TYPE_DUMMY</A>
+</nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.TYPE_FILE" class="hiddenlink" target="rightframe">TYPE_FILE</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_RELATIVE_HUMIDITY" class="hiddenlink" target="rightframe">TYPE_RELATIVE_HUMIDITY</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_TEMPERATURE</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_END</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START" class="hiddenlink" target="rightframe">TYPE_TOUCH_EXPLORATION_GESTURE_START</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_ENTER</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT" class="hiddenlink" target="rightframe">TYPE_VIEW_HOVER_EXIT</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED" class="hiddenlink" target="rightframe">TYPE_VIEW_SCROLLED</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED" class="hiddenlink" target="rightframe">TYPE_VIEW_TEXT_SELECTION_CHANGED</A>
+</nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOW_CONTENT_CHANGED</A>
+</nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" class="hiddenlink" target="rightframe">UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW</A>
+</nobr><br>
+<i>uiOptions</i><br>
+<nobr> in
+<A HREF="android.R.attr.html#android.R.attr.uiOptions" class="hiddenlink" target="rightframe">android.R.attr</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.content.pm.ActivityInfo.html#android.content.pm.ActivityInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ActivityInfo</A>
+</nobr><br>
+<nobr> in
+<A HREF="android.content.pm.ApplicationInfo.html#android.content.pm.ApplicationInfo.uiOptions" class="hiddenlink" target="rightframe">android.content.pm.ApplicationInfo</A>
+</nobr><br>
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.USAGE_GRAPHICS_RENDER_TARGET" class="hiddenlink" target="rightframe">USAGE_GRAPHICS_RENDER_TARGET</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.useDefaultMargins" class="hiddenlink" target="rightframe">useDefaultMargins</A>
+</nobr><br>
+<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_DISABLE_CAMERA" class="hiddenlink" target="rightframe">USES_POLICY_DISABLE_CAMERA</A>
+</nobr><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_ALLOW" class="hiddenlink" target="rightframe">VERIFICATION_ALLOW</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.VERIFICATION_REJECT" class="hiddenlink" target="rightframe">VERIFICATION_REJECT</A>
+</nobr><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#X"><font size="-2">X</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault" class="hiddenlink" target="rightframe">Widget_DeviceDefault</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionBar_TabView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_CloseMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_Overflow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionButton_TextButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionButton_TextButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ActionMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_AutoCompleteTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Inset</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Button_Toggle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CalendarView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_CheckBox</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_RadioButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_CompoundButton_Star</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DatePicker" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DatePicker</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_DropDownItem_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_EditText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ExpandableListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_GridView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_HorizontalScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ImageButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_CloseMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_CloseMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionButton_Overflow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionButton_Overflow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ActionMode_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_AutoCompleteTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_AutoCompleteTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Inset" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Inset</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Button_Toggle" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Button_Toggle</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CalendarView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CalendarView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_CheckBox" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_CheckBox</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_RadioButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_RadioButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_CompoundButton_Star" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_CompoundButton_Star</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_DropDownItem_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_DropDownItem_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_EditText" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_EditText</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ExpandableListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ExpandableListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_GridView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_GridView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_HorizontalScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_HorizontalScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ImageButton" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ImageButton</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListPopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ListView_DropDown</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_PopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Horizontal</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Large_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ProgressBar_Small_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Indicator</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_RatingBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_ScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_SeekBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_Tab</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TabWidget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_TextView_SpinnerItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Light_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Light_WebView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListPopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListPopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ListView_DropDown" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ListView_DropDown</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupMenu" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupMenu</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_PopupWindow" class="hiddenlink" target="rightframe">Widget_DeviceDefault_PopupWindow</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Horizontal" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Horizontal</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Large" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Large</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ProgressBar_Small_Title" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ProgressBar_Small_Title</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Indicator" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Indicator</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_RatingBar_Small" class="hiddenlink" target="rightframe">Widget_DeviceDefault_RatingBar_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_ScrollView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_ScrollView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_SeekBar" class="hiddenlink" target="rightframe">Widget_DeviceDefault_SeekBar</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Spinner" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Spinner</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_Tab" class="hiddenlink" target="rightframe">Widget_DeviceDefault_Tab</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TabWidget" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TabWidget</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_TextView_SpinnerItem" class="hiddenlink" target="rightframe">Widget_DeviceDefault_TextView_SpinnerItem</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebTextView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebTextView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_DeviceDefault_WebView" class="hiddenlink" target="rightframe">Widget_DeviceDefault_WebView</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_Solid_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_Solid_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabBar_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabBar_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabText_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabText_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabView_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabView_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionMode_Inverse" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionMode_Inverse</A>
+</nobr><br>
+<nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_Button_Borderless_Small" class="hiddenlink" target="rightframe">Widget_Holo_Light_Button_Borderless_Small</A>
+</nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.WIFI_P2P_SERVICE" class="hiddenlink" target="rightframe">WIFI_P2P_SERVICE</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_AP_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_AP_COUNT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_MAX_AP_CHECKS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_COUNT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_DELAY_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_TIMEOUT_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_WATCH_LIST" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_WATCH_LIST</A>
+</nobr><br>
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_PROFILE" class="hiddenlink" target="rightframe">WRITE_PROFILE</A>
+</nobr><br>
+<A NAME="X"></A>
+<br><font size="+2">X</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#Y"><font size="-2">Y</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.X" class="hiddenlink" target="rightframe">X</A>
+</nobr><br>
+<A NAME="Y"></A>
+<br><font size="+2">Y</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+<a href="#X"><font size="-2">X</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_changes.html b/docs/html/sdk/api_diff/14/changes/fields_index_changes.html
new file mode 100644
index 0000000..6c6aabd
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_changes.html
@@ -0,0 +1,283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<A HREF="fields_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_PACKAGE_INSTALL" class="hiddenlink" target="rightframe">ACTION_PACKAGE_INSTALL</A>
+</nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED" class="hiddenlink" target="rightframe">ACTION_SCO_AUDIO_STATE_CHANGED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_CONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_CONNECTED</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_UMS_DISCONNECTED" class="hiddenlink" target="rightframe">ACTION_UMS_DISCONNECTED</A>
+</nobr><br>
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.ANCHOR_TYPE" class="hiddenlink" target="rightframe">ANCHOR_TYPE</A>
+</nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.BACKGROUND_DATA" class="hiddenlink" target="rightframe">BACKGROUND_DATA</A>
+</nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.util.Config.html#android.util.Config.DEBUG" class="hiddenlink" target="rightframe">DEBUG</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.EXTRA_NETWORK_INFO" class="hiddenlink" target="rightframe">EXTRA_NETWORK_INFO</A>
+</nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.R.attr.html#android.R.attr.fadingEdge" class="hiddenlink" target="rightframe">fadingEdge</A>
+</nobr><br>
+<nobr><A HREF="android.view.WindowManager.LayoutParams.html#android.view.WindowManager.LayoutParams.FLAG_BLUR_BEHIND" class="hiddenlink" target="rightframe">FLAG_BLUR_BEHIND</A>
+</nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebView.HitTestResult.html#android.webkit.WebView.HitTestResult.IMAGE_ANCHOR_TYPE" class="hiddenlink" target="rightframe">IMAGE_ANCHOR_TYPE</A>
+</nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH" class="hiddenlink" target="rightframe">MAX_TEXT_LENGTH</A>
+</nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.html#android.os.Build.RADIO" class="hiddenlink" target="rightframe">RADIO</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.SSL_MAX_ERROR" class="hiddenlink" target="rightframe">SSL_MAX_ERROR</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_HIDDEN" class="hiddenlink" target="rightframe">STATUS_BAR_HIDDEN</A>
+</nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.STATUS_BAR_VISIBLE" class="hiddenlink" target="rightframe">STATUS_BAR_VISIBLE</A>
+</nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR</A>
+</nobr><br>
+<nobr><A HREF="android.util.Patterns.html#android.util.Patterns.TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" class="hiddenlink" target="rightframe">TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY" class="hiddenlink" target="rightframe">TTS_DEFAULT_COUNTRY</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_LANG" class="hiddenlink" target="rightframe">TTS_DEFAULT_LANG</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_DEFAULT_VARIANT" class="hiddenlink" target="rightframe">TTS_DEFAULT_VARIANT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.TTS_USE_DEFAULTS" class="hiddenlink" target="rightframe">TTS_USE_DEFAULTS</A>
+</nobr><br>
+<nobr><A HREF="android.hardware.Sensor.html#android.hardware.Sensor.TYPE_TEMPERATURE" class="hiddenlink" target="rightframe">TYPE_TEMPERATURE</A>
+</nobr><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_AP_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_AP_COUNT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_MAX_AP_CHECKS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_COUNT" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_COUNT</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_DELAY_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_TIMEOUT_MS</A>
+</nobr><br>
+<nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_WATCH_LIST" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_WATCH_LIST</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_removals.html b/docs/html/sdk/api_diff/14/changes/fields_index_removals.html
new file mode 100644
index 0000000..6bc291f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_removals.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.provider.MediaStore.Audio.AudioColumns.html#android.provider.MediaStore.Audio.AudioColumns.ALBUM_ART" class="hiddenlink" target="rightframe"><strike>ALBUM_ART</strike></A>
+</nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_BLUR" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_BLUR</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_DIM" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_DIM</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_MASK" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_MASK</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.FX_SURFACE_NORMAL" class="hiddenlink" target="rightframe"><strike>FX_SURFACE_NORMAL</strike></A>
+</nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.GPU" class="hiddenlink" target="rightframe"><strike>GPU</strike></A>
+</nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HARDWARE" class="hiddenlink" target="rightframe"><strike>HARDWARE</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.HIDDEN" class="hiddenlink" target="rightframe"><strike>HIDDEN</strike></A>
+</nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.NON_PREMULTIPLIED" class="hiddenlink" target="rightframe"><strike>NON_PREMULTIPLIED</strike></A>
+</nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.PUSH_BUFFERS" class="hiddenlink" target="rightframe"><strike>PUSH_BUFFERS</strike></A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SECURE" class="hiddenlink" target="rightframe"><strike>SECURE</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURACE_FROZEN</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_BLUR_FREEZE" class="hiddenlink" target="rightframe"><strike>SURFACE_BLUR_FREEZE</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_DITHER" class="hiddenlink" target="rightframe"><strike>SURFACE_DITHER</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_FROZEN" class="hiddenlink" target="rightframe"><strike>SURFACE_FROZEN</strike></A>
+</nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_HIDDEN" class="hiddenlink" target="rightframe"><strike>SURFACE_HIDDEN</strike></A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html b/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html
new file mode 100644
index 0000000..07432bf
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.io.FilePermission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.io.<A HREF="../../../../reference/java/io/FilePermission.html" target="_top"><font size="+2"><code>FilePermission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.io.FilePermission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.io.FilePermission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html b/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
new file mode 100644
index 0000000..21b48ec
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.io.ObjectInputStream
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.io.<A HREF="../../../../reference/java/io/ObjectInputStream.html" target="_top"><font size="+2"><code>ObjectInputStream</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.io.ObjectInputStream.enableResolveObject_changed(boolean)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/io/ObjectInputStream.html#enableResolveObject(boolean)" target="_top"><code>enableResolveObject</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html b/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
new file mode 100644
index 0000000..0ab0ed26
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.io.ObjectOutputStream
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.io.<A HREF="../../../../reference/java/io/ObjectOutputStream.html" target="_top"><font size="+2"><code>ObjectOutputStream</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.io.ObjectOutputStream.enableReplaceObject_changed(boolean)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/io/ObjectOutputStream.html#enableReplaceObject(boolean)" target="_top"><code>enableReplaceObject</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.Class.html b/docs/html/sdk/api_diff/14/changes/java.lang.Class.html
new file mode 100644
index 0000000..394b440
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.Class.html
@@ -0,0 +1,245 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.Class
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.lang.<A HREF="../../../../reference/java/lang/Class.html" target="_top"><font size="+2"><code>Class</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getConstructor_changed(java.lang.Class<?>...)"></A>
+ <nobr><code>Constructor<T></code> <A HREF="../../../../reference/java/lang/Class.html#getConstructor(java.lang.Class<?>...)" target="_top"><code>getConstructor</code></A>(<code>Class<?></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.NoSuchMethodException, java.lang.SecurityException</code>) to <code>java.lang.NoSuchMethodException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getConstructors_changed()"></A>
+ <nobr><code>Constructor<?></code> <A HREF="../../../../reference/java/lang/Class.html#getConstructors()" target="_top"><code>getConstructors</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredClasses_changed()"></A>
+ <nobr><code>Class<?></code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredClasses()" target="_top"><code>getDeclaredClasses</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredConstructor_changed(java.lang.Class<?>...)"></A>
+ <nobr><code>Constructor<T></code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredConstructor(java.lang.Class<?>...)" target="_top"><code>getDeclaredConstructor</code></A>(<code>Class<?></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.NoSuchMethodException, java.lang.SecurityException</code>) to <code>java.lang.NoSuchMethodException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredConstructors_changed()"></A>
+ <nobr><code>Constructor<?></code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredConstructors()" target="_top"><code>getDeclaredConstructors</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredField_changed(java.lang.String)"></A>
+ <nobr><code>Field</code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredField(java.lang.String)" target="_top"><code>getDeclaredField</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.NoSuchFieldException, java.lang.SecurityException</code>) to <code>java.lang.NoSuchFieldException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredFields_changed()"></A>
+ <nobr><code>Field[]</code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredFields()" target="_top"><code>getDeclaredFields</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredMethod_changed(java.lang.String, java.lang.Class<?>...)"></A>
+ <nobr><code>Method</code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredMethod(java.lang.String, java.lang.Class<?>...)" target="_top"><code>getDeclaredMethod</code></A>(<code>String,</nobr> Class<?><nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.NoSuchMethodException, java.lang.SecurityException</code>) to <code>java.lang.NoSuchMethodException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getDeclaredMethods_changed()"></A>
+ <nobr><code>Method[]</code> <A HREF="../../../../reference/java/lang/Class.html#getDeclaredMethods()" target="_top"><code>getDeclaredMethods</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getField_changed(java.lang.String)"></A>
+ <nobr><code>Field</code> <A HREF="../../../../reference/java/lang/Class.html#getField(java.lang.String)" target="_top"><code>getField</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.NoSuchFieldException, java.lang.SecurityException</code>) to <code>java.lang.NoSuchFieldException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getFields_changed()"></A>
+ <nobr><code>Field[]</code> <A HREF="../../../../reference/java/lang/Class.html#getFields()" target="_top"><code>getFields</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getMethod_changed(java.lang.String, java.lang.Class<?>...)"></A>
+ <nobr><code>Method</code> <A HREF="../../../../reference/java/lang/Class.html#getMethod(java.lang.String, java.lang.Class<?>...)" target="_top"><code>getMethod</code></A>(<code>String,</nobr> Class<?><nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.NoSuchMethodException, java.lang.SecurityException</code>) to <code>java.lang.NoSuchMethodException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.Class.getMethods_changed()"></A>
+ <nobr><code>Method[]</code> <A HREF="../../../../reference/java/lang/Class.html#getMethods()" target="_top"><code>getMethods</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html b/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
new file mode 100644
index 0000000..000481c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.ref.ReferenceQueue
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.lang.ref.<A HREF="../../../../reference/java/lang/ref/ReferenceQueue.html" target="_top"><font size="+2"><code>ReferenceQueue</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.ref.ReferenceQueue.remove_changed(long)"></A>
+ <nobr><code>Reference<? extends T></code> <A HREF="../../../../reference/java/lang/ref/ReferenceQueue.html#remove(long)" target="_top"><code>remove</code></A>(<code>long</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.IllegalArgumentException, java.lang.InterruptedException</code>) to <code>java.lang.InterruptedException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
new file mode 100644
index 0000000..f90f9e5
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.reflect.AccessibleObject
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.lang.reflect.<A HREF="../../../../reference/java/lang/reflect/AccessibleObject.html" target="_top"><font size="+2"><code>AccessibleObject</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.reflect.AccessibleObject.setAccessible_changed(java.lang.reflect.AccessibleObject[], boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/java/lang/reflect/AccessibleObject.html#setAccessible(java.lang.reflect.AccessibleObject[], boolean)" target="_top"><code>setAccessible</code></A>(<code>AccessibleObject[],</nobr> boolean<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.reflect.AccessibleObject.setAccessible_changed(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/java/lang/reflect/AccessibleObject.html#setAccessible(boolean)" target="_top"><code>setAccessible</code></A>(<code>boolean</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from <code>java.lang.SecurityException</code> to no exceptions.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
new file mode 100644
index 0000000..acb83ef
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.reflect.Constructor
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.lang.reflect.<A HREF="../../../../reference/java/lang/reflect/Constructor.html" target="_top"><font size="+2"><code>Constructor</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.reflect.Constructor.getAnnotation_added(java.lang.Class<A>)"></A>
+ <nobr><code>A</code> <A HREF="../../../../reference/java/lang/reflect/Constructor.html#getAnnotation(java.lang.Class<A>)" target="_top"><code>getAnnotation</code></A>(<code>Class<A></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html
new file mode 100644
index 0000000..19f58eb
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.reflect.Field
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.lang.reflect.<A HREF="../../../../reference/java/lang/reflect/Field.html" target="_top"><font size="+2"><code>Field</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.reflect.Field.getAnnotation_added(java.lang.Class<A>)"></A>
+ <nobr><code>A</code> <A HREF="../../../../reference/java/lang/reflect/Field.html#getAnnotation(java.lang.Class<A>)" target="_top"><code>getAnnotation</code></A>(<code>Class<A></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html
new file mode 100644
index 0000000..2226260
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.reflect.Method
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.lang.reflect.<A HREF="../../../../reference/java/lang/reflect/Method.html" target="_top"><font size="+2"><code>Method</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.lang.reflect.Method.getAnnotation_added(java.lang.Class<A>)"></A>
+ <nobr><code>A</code> <A HREF="../../../../reference/java/lang/reflect/Method.html#getAnnotation(java.lang.Class<A>)" target="_top"><code>getAnnotation</code></A>(<code>Class<A></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html b/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html
new file mode 100644
index 0000000..0c386f0
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.net.SocketPermission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.net.<A HREF="../../../../reference/java/net/SocketPermission.html" target="_top"><font size="+2"><code>SocketPermission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.net.SocketPermission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.net.SocketPermission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html b/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html
new file mode 100644
index 0000000..25c745b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.security.AllPermission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.security.<A HREF="../../../../reference/java/security/AllPermission.html" target="_top"><font size="+2"><code>AllPermission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.AllPermission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.AllPermission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html b/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html
new file mode 100644
index 0000000..24c047e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.security.BasicPermission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.security.<A HREF="../../../../reference/java/security/BasicPermission.html" target="_top"><font size="+2"><code>BasicPermission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.BasicPermission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.BasicPermission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.Permission.html b/docs/html/sdk/api_diff/14/changes/java.security.Permission.html
new file mode 100644
index 0000000..6356059
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.security.Permission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.security.Permission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.security.<A HREF="../../../../reference/java/security/Permission.html" target="_top"><font size="+2"><code>Permission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.Permission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>. Changed from abstract to non-abstract.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.Permission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>. Changed from abstract to non-abstract.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html b/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
new file mode 100644
index 0000000..8d90dc8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.security.UnresolvedPermission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.security.<A HREF="../../../../reference/java/security/UnresolvedPermission.html" target="_top"><font size="+2"><code>UnresolvedPermission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.UnresolvedPermission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.security.UnresolvedPermission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html b/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html
new file mode 100644
index 0000000..3a33e6e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.util.logging.Handler
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class java.util.logging.<A HREF="../../../../reference/java/util/logging/Handler.html" target="_top"><font size="+2"><code>Handler</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="java.util.logging.Handler.setEncoding_changed(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/java/util/logging/Handler.html#setEncoding(java.lang.String)" target="_top"><code>setEncoding</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in exceptions thrown from (<code>java.lang.SecurityException, java.io.UnsupportedEncodingException</code>) to <code>java.io.UnsupportedEncodingException</code>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html b/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
new file mode 100644
index 0000000..cf64e41
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+javax.security.auth.PrivateCredentialPermission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class javax.security.auth.<A HREF="../../../../reference/javax/security/auth/PrivateCredentialPermission.html" target="_top"><font size="+2"><code>PrivateCredentialPermission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="javax.security.auth.PrivateCredentialPermission.equals_changed(java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>equals</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#equals(java.lang.Object)" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="javax.security.auth.PrivateCredentialPermission.hashCode_changed()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>hashCode</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Method was locally defined, but is now inherited from <a href="../../../../reference/java/lang/Object.html#hashCode()" target="_top"><code>Object</code></a>.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/jdiff_help.html b/docs/html/sdk/api_diff/14/changes/jdiff_help.html
new file mode 100644
index 0000000..8220056
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/jdiff_help.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+JDiff Help
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<TABLE summary="Navigation bar" BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+ <TABLE summary="Navigation bar" BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../reference/index.html" target="_top"><FONT CLASS="NavBarFont1"><B><code>14</code></B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="changes-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_statistics.html"><FONT CLASS="NavBarFont1"><B>Statistics</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT> </TD>
+ </TR>
+ </TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Generated by<br><a href="http://www.jdiff.org" class="staysblack" target="_top">JDiff</a></b></EM></TD>
+</TR>
+<TR>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2"></FONT>
+</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../changes.html" TARGET="_top"><B>FRAMES</B></A>
+ <A HREF="jdiff_help.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+</TR>
+</TABLE>
+<HR>
+<!-- End of nav bar -->
+<center>
+<H1>JDiff Documentation</H1>
+</center>
+<BLOCKQUOTE>
+JDiff is a <a href="http://java.sun.com/j2se/javadoc/" target="_top">Javadoc</a> doclet which generates a report of the API differences between two versions of a product. It does not report changes in Javadoc comments, or changes in what a class or method does.
+This help page describes the different parts of the output from JDiff.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+ See the reference page in the <a href="http://www.jdiff.org">source for JDiff</a> for information about how to generate a report like this one.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+The indexes shown in the top-left frame help show each type of change in more detail. The index "All Differences" contains all the differences between the APIs, in alphabetical order.
+These indexes all use the same format:
+<ul>
+<li>Removed packages, classes, constructors, methods and fields are <strike>struck through</strike>.</li>
+<li>Added packages, classes, constructors, methods and fields appear in <b>bold</b>.</li>
+<li>Changed packages, classes, constructors, methods and fields appear in normal text.</li>
+</ul>
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+You can always tell when you are reading a JDiff page, rather than a Javadoc page, by the color of the index bar and the color of the background.
+Links which take you to a Javadoc page are always in a <code>typewriter</code> font.
+Just like Javadoc, all interface names are in <i>italic</i>, and class names are not italicized. Where there are multiple entries in an index with the same name, the heading for them is also in italics, but is not a link.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3><b><code>Javadoc</code></b></H3>
+This is a link to the <a href="../../../../reference/index.html" target="_top">top-level</a> Javadoc page for the new version of the product.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Overview</H3>
+The <a href="changes-summary.html">overview</a> is the top-level summary of what was removed, added and changed between versions.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Package</H3>
+This is a link to the package containing the current changed class or interface.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Class</H3>
+This is highlighted when you are looking at the changed class or interface.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Text Changes</H3>
+This is a link to the top-level index of all documentation changes for the current package or class.
+If it is not present, then there are no documentation changes for the current package or class.
+This link can be removed entirely by not using the <code>-docchanges</code> option.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Statistics</H3>
+This is a link to a page which shows statistics about the changes between the two APIs.
+This link can be removed entirely by not using the <code>-stats</code> option.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Help</H3>
+A link to this Help page for JDiff.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Prev/Next</H3>
+These links take you to the previous and next changed package or class.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Frames/No Frames</H3>
+These links show and hide the HTML frames. All pages are available with or without frames.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H2>Complex Changes</H2>
+There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass.
+In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes.
+</BLOCKQUOTE>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html
new file mode 100644
index 0000000..6729816
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html
@@ -0,0 +1,1345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+API Change Statistics
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<body class="gc-documentation">
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;xborder-bottom:none;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="../changes.html" target="_top">Top of Report</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<h1>API Change Statistics</h1>
+<p>The overall difference between API Levels 13 and 14 is approximately <span style="color:222;font-weight:bold;">3.95%</span>.
+</p>
+<br>
+<a name="numbers"></a>
+<h2>Total of Differences, by Number and Type</h2>
+<p>
+The table below lists the numbers of program elements (packages, classes, constructors, methods, and fields) that were added, changed, or removed. The table includes only the highest-level program elements — that is, if a class with two methods was added, the number of methods added does not include those two methods, but the number of classes added does include that class.
+</p>
+<TABLE summary="Number of differences" WIDTH="100%">
+<TR>
+ <th>Type</th>
+ <TH ALIGN="center"><b>Additions</b></TH>
+ <TH ALIGN="center"><b>Changes</b></TH>
+ <TH ALIGN="center">Removals</TH>
+ <TH ALIGN="center"><b>Total</b></TH>
+</TR>
+<TR>
+ <TD>Packages</TD>
+ <TD ALIGN="right">5</TD>
+ <TD ALIGN="right">48</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">53</TD>
+</TR>
+<TR>
+ <TD>Classes and <i>Interfaces</i></TD>
+ <TD ALIGN="right">90</TD>
+ <TD ALIGN="right">192</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">282</TD>
+</TR>
+<TR>
+ <TD>Constructors</TD>
+ <TD ALIGN="right">19</TD>
+ <TD ALIGN="right">2</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">21</TD>
+</TR>
+<TR>
+ <TD>Methods</TD>
+ <TD ALIGN="right">285</TD>
+ <TD ALIGN="right">94</TD>
+ <TD ALIGN="right">29</TD>
+ <TD ALIGN="right">408</TD>
+</TR>
+<TR>
+ <TD>Fields</TD>
+ <TD ALIGN="right">405</TD>
+ <TD ALIGN="right">34</TD>
+ <TD ALIGN="right">16</TD>
+ <TD ALIGN="right">455</TD>
+</TR>
+<TR>
+ <TD style="background-color:#FAFAFA"><b>Total</b></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>804</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>370</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>45</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>1219</strong></TD>
+</TR>
+</TABLE>
+<br>
+<a name="packages"></a>
+<h2>Changed Packages, Sorted by Percentage Difference</h2>
+<TABLE summary="Packages sorted by percentage difference" WIDTH="100%">
+<TR>
+ <TH WIDTH="10%">Percentage Difference*</TH>
+ <TH>Package</TH>
+</TR>
+<TR>
+ <TD ALIGN="center">100</TD>
+ <TD><A HREF="pkg_dalvik.annotation.html">dalvik.annotation</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">54</TD>
+ <TD><A HREF="pkg_android.view.accessibility.html">android.view.accessibility</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">34</TD>
+ <TD><A HREF="pkg_android.speech.tts.html">android.speech.tts</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">34</TD>
+ <TD><A HREF="pkg_dalvik.system.html">dalvik.system</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="pkg_android.nfc.html">android.nfc</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">13</TD>
+ <TD><A HREF="pkg_android.accessibilityservice.html">android.accessibilityservice</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">12</TD>
+ <TD><A HREF="pkg_android.provider.html">android.provider</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="pkg_android.bluetooth.html">android.bluetooth</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">10</TD>
+ <TD><A HREF="pkg_android.nfc.tech.html">android.nfc.tech</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="pkg_android.hardware.html">android.hardware</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="pkg_android.animation.html">android.animation</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="pkg_android.preference.html">android.preference</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="pkg_android.net.http.html">android.net.http</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="pkg_android.app.backup.html">android.app.backup</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="pkg_android.renderscript.html">android.renderscript</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="pkg_android.net.html">android.net</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="pkg_android.view.html">android.view</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="pkg_java.lang.ref.html">java.lang.ref</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="pkg_android.app.html">android.app</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="pkg_android.net.wifi.html">android.net.wifi</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="pkg_android.widget.html">android.widget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="pkg_android.util.html">android.util</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.media.html">android.media</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_javax.security.auth.html">javax.security.auth</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.html">android</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.text.style.html">android.text.style</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.app.admin.html">android.app.admin</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.view.inputmethod.html">android.view.inputmethod</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_java.lang.reflect.html">java.lang.reflect</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.service.wallpaper.html">android.service.wallpaper</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.os.html">android.os</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.content.pm.html">android.content.pm</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.speech.html">android.speech</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.content.html">android.content</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.appwidget.html">android.appwidget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.webkit.html">android.webkit</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_java.security.html">java.security</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.inputmethodservice.html">android.inputmethodservice</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.opengl.html">android.opengl</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_java.net.html">java.net</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_java.io.html">java.io</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.accounts.html">android.accounts</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.graphics.html">android.graphics</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.database.sqlite.html">android.database.sqlite</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_java.util.logging.html">java.util.logging</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_java.lang.html">java.lang</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.test.mock.html">android.test.mock</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.text.html">android.text</A></TD>
+</TR>
+</TABLE>
+<p style="font-size:10px">* See <a href="#calculation">Calculation of Change Percentages</a>, below.</p>
+<br>
+<a name="classes"></a>
+<h2>Changed Classes and <i>Interfaces</i>, Sorted by Percentage Difference</h2>
+<TABLE summary="Classes sorted by percentage difference" WIDTH="100%">
+<TR WIDTH="20%">
+ <TH WIDTH="10%">Percentage<br>Difference*</TH>
+ <TH><b>Class or <i>Interface</i></b></TH>
+</TR>
+<TR>
+ <TD ALIGN="center">62</TD>
+ <TD><A HREF="android.preference.CheckBoxPreference.html">
+android.preference.CheckBoxPreference</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">55</TD>
+ <TD><A HREF="android.view.Surface.html">
+android.view.Surface</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">52</TD>
+ <TD><A HREF="android.renderscript.AllocationAdapter.html">
+android.renderscript.AllocationAdapter</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">50</TD>
+ <TD><A HREF="android.animation.TypeEvaluator.html">
+<i>android.animation.TypeEvaluator</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">50</TD>
+ <TD><A HREF="dalvik.system.DexClassLoader.html">
+dalvik.system.DexClassLoader</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">48</TD>
+ <TD><A HREF="android.view.accessibility.AccessibilityEvent.html">
+android.view.accessibility.AccessibilityEvent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">46</TD>
+ <TD><A HREF="android.view.accessibility.AccessibilityManager.html">
+android.view.accessibility.AccessibilityManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">37</TD>
+ <TD><A HREF="android.net.http.SslError.html">
+android.net.http.SslError</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.app.backup.BackupAgent.html">
+android.app.backup.BackupAgent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.provider.ContactsContract.Contacts.Photo.html">
+android.provider.ContactsContract.Contacts.Photo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">30</TD>
+ <TD><A HREF="android.os.Looper.html">
+android.os.Looper</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">27</TD>
+ <TD><A HREF="android.nfc.tech.NfcA.html">
+android.nfc.tech.NfcA</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">27</TD>
+ <TD><A HREF="android.nfc.tech.NfcF.html">
+android.nfc.tech.NfcF</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">26</TD>
+ <TD><A HREF="android.renderscript.Element.html">
+android.renderscript.Element</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.R.style.html">
+android.R.style</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.animation.FloatEvaluator.html">
+android.animation.FloatEvaluator</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.animation.IntEvaluator.html">
+android.animation.IntEvaluator</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.webkit.WebSettings.TextSize.html">
+android.webkit.WebSettings.TextSize</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="java.io.FilePermission.html">
+java.io.FilePermission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="java.lang.ref.ReferenceQueue.html">
+java.lang.ref.ReferenceQueue</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="java.lang.reflect.AccessibleObject.html">
+java.lang.reflect.AccessibleObject</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="java.net.SocketPermission.html">
+java.net.SocketPermission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">23</TD>
+ <TD><A HREF="android.app.Application.html">
+android.app.Application</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">21</TD>
+ <TD><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html">
+android.accessibilityservice.AccessibilityServiceInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.R.color.html">
+android.R.color</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.animation.ObjectAnimator.html">
+android.animation.ObjectAnimator</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.graphics.SurfaceTexture.html">
+android.graphics.SurfaceTexture</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.provider.ContactsContract.html">
+android.provider.ContactsContract</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html">
+android.provider.ContactsContract.CommonDataKinds.Photo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.provider.ContactsContract.RawContactsColumns.html">
+<i>android.provider.ContactsContract.RawContactsColumns</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.renderscript.BaseObj.html">
+android.renderscript.BaseObj</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.widget.StackView.html">
+android.widget.StackView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="dalvik.system.PathClassLoader.html">
+dalvik.system.PathClassLoader</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="java.security.AllPermission.html">
+java.security.AllPermission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="java.security.BasicPermission.html">
+java.security.BasicPermission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">17</TD>
+ <TD><A HREF="android.animation.PropertyValuesHolder.html">
+android.animation.PropertyValuesHolder</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">17</TD>
+ <TD><A HREF="android.nfc.NfcAdapter.html">
+android.nfc.NfcAdapter</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">16</TD>
+ <TD><A HREF="android.nfc.tech.IsoDep.html">
+android.nfc.tech.IsoDep</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">16</TD>
+ <TD><A HREF="android.view.inputmethod.InputMethodSubtype.html">
+android.view.inputmethod.InputMethodSubtype</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">16</TD>
+ <TD><A HREF="javax.security.auth.PrivateCredentialPermission.html">
+javax.security.auth.PrivateCredentialPermission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.content.pm.ServiceInfo.html">
+android.content.pm.ServiceInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.nfc.tech.MifareUltralight.html">
+android.nfc.tech.MifareUltralight</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.provider.ContactsContract.RawContactsEntity.html">
+android.provider.ContactsContract.RawContactsEntity</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.renderscript.Byte2.html">
+android.renderscript.Byte2</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.renderscript.Int2.html">
+android.renderscript.Int2</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.renderscript.Long2.html">
+android.renderscript.Long2</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.renderscript.Short2.html">
+android.renderscript.Short2</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.widget.PopupMenu.html">
+android.widget.PopupMenu</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="java.security.Permission.html">
+java.security.Permission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">13</TD>
+ <TD><A HREF="android.net.TrafficStats.html">
+android.net.TrafficStats</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">12</TD>
+ <TD><A HREF="android.provider.ContactsContract.ContactsColumns.html">
+<i>android.provider.ContactsContract.ContactsColumns</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">12</TD>
+ <TD><A HREF="java.security.UnresolvedPermission.html">
+java.security.UnresolvedPermission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.provider.Settings.Secure.html">
+android.provider.Settings.Secure</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="java.lang.Class.html">
+java.lang.Class</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.R.integer.html">
+android.R.integer</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.nfc.tech.NfcB.html">
+android.nfc.tech.NfcB</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.nfc.tech.NfcV.html">
+android.nfc.tech.NfcV</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.os.RecoverySystem.html">
+android.os.RecoverySystem</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.renderscript.Byte3.html">
+android.renderscript.Byte3</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.renderscript.Int3.html">
+android.renderscript.Int3</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.renderscript.Long3.html">
+android.renderscript.Long3</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.renderscript.Short3.html">
+android.renderscript.Short3</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">10</TD>
+ <TD><A HREF="android.os.Debug.MemoryInfo.html">
+android.os.Debug.MemoryInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">10</TD>
+ <TD><A HREF="android.widget.FrameLayout.html">
+android.widget.FrameLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">10</TD>
+ <TD><A HREF="android.util.Config.html">
+android.util.Config</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.view.ViewPropertyAnimator.html">
+android.view.ViewPropertyAnimator</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.renderscript.FieldPacker.html">
+android.renderscript.FieldPacker</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.view.MenuItem.html">
+<i>android.view.MenuItem</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.app.FragmentManager.BackStackEntry.html">
+<i>android.app.FragmentManager.BackStackEntry</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.bluetooth.BluetoothSocket.html">
+android.bluetooth.BluetoothSocket</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.provider.ContactsContract.StatusUpdates.html">
+android.provider.ContactsContract.StatusUpdates</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.renderscript.Byte4.html">
+android.renderscript.Byte4</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.renderscript.Int4.html">
+android.renderscript.Int4</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.renderscript.Long4.html">
+android.renderscript.Long4</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.renderscript.Short4.html">
+android.renderscript.Short4</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.util.Patterns.html">
+android.util.Patterns</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="android.media.MediaMetadataRetriever.html">
+android.media.MediaMetadataRetriever</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="android.app.ActionBar.Tab.html">
+android.app.ActionBar.Tab</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="android.webkit.WebView.HitTestResult.html">
+android.webkit.WebView.HitTestResult</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="android.widget.SearchView.html">
+android.widget.SearchView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.hardware.Camera.html">
+android.hardware.Camera</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.view.Gravity.html">
+android.view.Gravity</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.net.SSLCertificateSocketFactory.html">
+android.net.SSLCertificateSocketFactory</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.app.ActionBar.html">
+android.app.ActionBar</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.hardware.Sensor.html">
+android.hardware.Sensor</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.view.ActionMode.html">
+android.view.ActionMode</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.media.MediaRecorder.html">
+android.media.MediaRecorder</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.view.MotionEvent.html">
+android.view.MotionEvent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.accessibilityservice.AccessibilityService.html">
+android.accessibilityservice.AccessibilityService</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.content.IntentSender.html">
+android.content.IntentSender</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.opengl.GLUtils.html">
+android.opengl.GLUtils</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.provider.ContactsContract.SettingsColumns.html">
+<i>android.provider.ContactsContract.SettingsColumns</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.hardware.Camera.Parameters.html">
+android.hardware.Camera.Parameters</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html">
+android.inputmethodservice.InputMethodService.InputMethodSessionImpl</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.nfc.NdefRecord.html">
+android.nfc.NdefRecord</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.preference.PreferenceActivity.html">
+android.preference.PreferenceActivity</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.provider.ContactsContract.Intents.html">
+android.provider.ContactsContract.Intents</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.database.sqlite.SQLiteOpenHelper.html">
+android.database.sqlite.SQLiteOpenHelper</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.net.ConnectivityManager.html">
+android.net.ConnectivityManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.view.inputmethod.InputMethodSession.html">
+<i>android.view.inputmethod.InputMethodSession</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.nfc.tech.MifareClassic.html">
+android.nfc.tech.MifareClassic</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.appwidget.AppWidgetProviderInfo.html">
+android.appwidget.AppWidgetProviderInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.speech.tts.TextToSpeech.html">
+android.speech.tts.TextToSpeech</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.speech.tts.TextToSpeech.Engine.html">
+android.speech.tts.TextToSpeech.Engine</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.accounts.AccountManager.html">
+android.accounts.AccountManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.os.Build.html">
+android.os.Build</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.bluetooth.BluetoothProfile.html">
+<i>android.bluetooth.BluetoothProfile</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.provider.ContactsContract.GroupsColumns.html">
+<i>android.provider.ContactsContract.GroupsColumns</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.renderscript.RenderScriptGL.html">
+android.renderscript.RenderScriptGL</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.renderscript.Script.html">
+android.renderscript.Script</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.os.ParcelFileDescriptor.html">
+android.os.ParcelFileDescriptor</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.view.View.html">
+android.view.View</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.app.AlertDialog.html">
+android.app.AlertDialog</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.app.Service.html">
+android.app.Service</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.media.MediaPlayer.html">
+android.media.MediaPlayer</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.provider.LiveFolders.html">
+android.provider.LiveFolders</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.widget.AdapterViewAnimator.html">
+android.widget.AdapterViewAnimator</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.content.SyncAdapterType.html">
+android.content.SyncAdapterType</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.util.SparseBooleanArray.html">
+android.util.SparseBooleanArray</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.widget.LinearLayout.html">
+android.widget.LinearLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="java.lang.reflect.Constructor.html">
+java.lang.reflect.Constructor</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.content.Context.html">
+android.content.Context</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.view.inputmethod.InputMethodManager.html">
+android.view.inputmethod.InputMethodManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.R.attr.html">
+android.R.attr</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.content.pm.PackageStats.html">
+android.content.pm.PackageStats</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.speech.RecognizerIntent.html">
+android.speech.RecognizerIntent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.util.SparseIntArray.html">
+android.util.SparseIntArray</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.widget.RemoteViews.html">
+android.widget.RemoteViews</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.os.Build.VERSION_CODES.html">
+android.os.Build.VERSION_CODES</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.provider.ContactsContract.Contacts.html">
+android.provider.ContactsContract.Contacts</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.media.AudioManager.html">
+android.media.AudioManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="java.util.logging.Handler.html">
+java.util.logging.Handler</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.util.SparseArray.html">
+android.util.SparseArray</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.database.sqlite.SQLiteQueryBuilder.html">
+android.database.sqlite.SQLiteQueryBuilder</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.provider.MediaStore.Audio.AudioColumns.html">
+<i>android.provider.MediaStore.Audio.AudioColumns</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="java.lang.reflect.Method.html">
+java.lang.reflect.Method</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.renderscript.Allocation.html">
+android.renderscript.Allocation</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.animation.Animator.html">
+android.animation.Animator</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.opengl.Matrix.html">
+android.opengl.Matrix</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.provider.CallLog.Calls.html">
+android.provider.CallLog.Calls</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.service.wallpaper.WallpaperService.Engine.html">
+android.service.wallpaper.WallpaperService.Engine</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.speech.SpeechRecognizer.html">
+android.speech.SpeechRecognizer</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.view.ViewGroup.html">
+android.view.ViewGroup</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.admin.DevicePolicyManager.html">
+android.app.admin.DevicePolicyManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.view.ViewParent.html">
+<i>android.view.ViewParent</i></A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.FragmentManager.html">
+android.app.FragmentManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.PendingIntent.html">
+android.app.PendingIntent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.content.Intent.html">
+android.content.Intent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.WallpaperManager.html">
+android.app.WallpaperManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.admin.DeviceAdminInfo.html">
+android.app.admin.DeviceAdminInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.content.pm.PackageManager.html">
+android.content.pm.PackageManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.widget.Scroller.html">
+android.widget.Scroller</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.widget.TextView.html">
+android.widget.TextView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.SearchManager.html">
+android.app.SearchManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.widget.OverScroller.html">
+android.widget.OverScroller</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.graphics.Paint.html">
+android.graphics.Paint</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.Manifest.permission.html">
+android.Manifest.permission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.R.string.html">
+android.R.string</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.app.Notification.Builder.html">
+android.app.Notification.Builder</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.webkit.WebChromeClient.html">
+android.webkit.WebChromeClient</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.webkit.WebSettings.html">
+android.webkit.WebSettings</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.animation.LayoutTransition.html">
+android.animation.LayoutTransition</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="java.lang.reflect.Field.html">
+java.lang.reflect.Field</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.content.pm.ActivityInfo.html">
+android.content.pm.ActivityInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.content.ContentProvider.html">
+android.content.ContentProvider</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="java.io.ObjectOutputStream.html">
+java.io.ObjectOutputStream</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="java.io.ObjectInputStream.html">
+java.io.ObjectInputStream</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.os.Process.html">
+android.os.Process</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.app.Fragment.html">
+android.app.Fragment</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.os.Handler.html">
+android.os.Handler</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.view.Window.html">
+android.view.Window</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.widget.ExpandableListView.html">
+android.widget.ExpandableListView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.view.ViewConfiguration.html">
+android.view.ViewConfiguration</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.provider.Settings.html">
+android.provider.Settings</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.graphics.RectF.html">
+android.graphics.RectF</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.view.InputDevice.html">
+android.view.InputDevice</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.graphics.Canvas.html">
+android.graphics.Canvas</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.bluetooth.BluetoothAdapter.html">
+android.bluetooth.BluetoothAdapter</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.content.pm.ApplicationInfo.html">
+android.content.pm.ApplicationInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.net.wifi.WifiManager.html">
+android.net.wifi.WifiManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.text.Layout.html">
+android.text.Layout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.os.Debug.html">
+android.os.Debug</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.test.mock.MockPackageManager.html">
+android.test.mock.MockPackageManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.inputmethodservice.InputMethodService.html">
+android.inputmethodservice.InputMethodService</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.widget.AbsListView.html">
+android.widget.AbsListView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.preference.Preference.html">
+android.preference.Preference</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.view.KeyEvent.html">
+android.view.KeyEvent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.view.WindowManager.LayoutParams.html">
+android.view.WindowManager.LayoutParams</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.provider.Settings.System.html">
+android.provider.Settings.System</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.app.Activity.html">
+android.app.Activity</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="dalvik.annotation.TestTarget.html">
+dalvik.annotation.TestTarget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="dalvik.annotation.TestTargetClass.html">
+dalvik.annotation.TestTargetClass</A></TD>
+</TR>
+</TABLE>
+<p style="font-size:10px">* See <a href="#calculation">Calculation of Change Percentages</a>, below.</p>
+<br>
+<h2 id="calculation">Calculation of Change Percentages</h2>
+<p>
+The percent change statistic reported for all elements in the "to" API Level specification is defined recursively as follows:</p>
+<pre>
+Percentage difference = 100 * (added + removed + 2*changed)
+ -----------------------------------
+ sum of public elements in BOTH APIs
+</pre>
+<p>where <code>added</code> is the number of packages added, <code>removed</code> is the number of packages removed, and <code>changed</code> is the number of packages changed.
+This definition is applied recursively for the classes and their program elements, so the value for a changed package will be less than 1, unless every class in that package has changed.
+The definition ensures that if all packages are removed and all new packages are
+added, the change will be 100%.</p>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY></HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html
new file mode 100644
index 0000000..36f9836
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Android API Version Differences
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<table class="jdiffIndex" summary="Links to diff index files" BORDER="0" WIDTH="100%" cellspacing="0" cellpadding="0" style="margin:0">
+<TR>
+ <th class="indexHeader" nowrap>
+ Select a Diffs Index:</th>
+</TR>
+<TR>
+ <TD><FONT CLASS="indexText" size="-2"><A HREF="alldiffs_index_all.html" TARGET="bottomleftframe">All Differences</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="packages_index_all.html" TARGET="bottomleftframe">By Package</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="classes_index_all.html" TARGET="bottomleftframe">By Class</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="constructors_index_all.html" TARGET="bottomleftframe">By Constructor</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="methods_index_all.html" TARGET="bottomleftframe">By Method</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
+</TR>
+</TABLE>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_additions.html b/docs/html/sdk/api_diff/14/changes/methods_index_additions.html
new file mode 100644
index 0000000..58dd0bf
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_additions.html
@@ -0,0 +1,1039 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<A HREF="methods_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.addAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>addAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<i>addF64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<i>addI64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<i>addU64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.appendRecord_added(android.view.accessibility.AccessibilityRecord)" class="hiddenlink" target="rightframe"><b>appendRecord</b>
+(<code>AccessibilityRecord</code>)</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.cancel_added()" class="hiddenlink" target="rightframe"><b>cancel</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollHorizontally_added(int)" class="hiddenlink" target="rightframe"><b>canScrollHorizontally</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollVertically_added(int)" class="hiddenlink" target="rightframe"><b>canScrollVertically</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.clearThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>clearThreadStatsTag</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.collapseActionView_added()" class="hiddenlink" target="rightframe"><b>collapseActionView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy1DRangeFrom_added(int, int, android.renderscript.Allocation, int)" class="hiddenlink" target="rightframe"><b>copy1DRangeFrom</b>
+(<code>int, int, Allocation, int</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy2DRangeFrom_added(int, int, int, int, android.renderscript.Allocation, int, int)" class="hiddenlink" target="rightframe"><b>copy2DRangeFrom</b>
+(<code>int, int, int, int, Allocation, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.create1D_added(android.renderscript.RenderScript, android.renderscript.Allocation)" class="hiddenlink" target="rightframe"><b>create1D</b>
+(<code>RenderScript, Allocation</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.createAccessibilityNodeInfo_added()" class="hiddenlink" target="rightframe"><b>createAccessibilityNodeInfo</b>
+()</A></nobr><br>
+<nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createApplicationRecord_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>createApplicationRecord</b>
+(<code>String</code>)</A></nobr><br>
+<i>createUri</i><br>
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(android.net.Uri)" class="hiddenlink" target="rightframe">type <b>
+(<code>Uri</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>deferNotifyDataSetChanged</i><br>
+ <nobr><A HREF="android.widget.AbsListView.html#android.widget.AbsListView.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AbsListView
+</A></nobr><br>
+ <nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AdapterViewAnimator
+</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericFocusedEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericFocusedEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericPointerEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericPointerEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.service.wallpaper.WallpaperService.Engine.html#android.service.wallpaper.WallpaperService.Engine.dump_added(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])" class="hiddenlink" target="rightframe"><b>dump</b>
+(<code>String, FileDescriptor, PrintWriter, String[]</code>)</A></nobr><br>
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.dup_added()" class="hiddenlink" target="rightframe"><b>dup</b>
+()</A></nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.eventTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>eventTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.expandActionView_added()" class="hiddenlink" target="rightframe"><b>expandActionView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.ExpandableListView.html#android.widget.ExpandableListView.expandGroup_added(int, boolean)" class="hiddenlink" target="rightframe"><b>expandGroup</b>
+(<code>int, boolean</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.feedbackTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>feedbackTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.findViewsWithText_added(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int)" class="hiddenlink" target="rightframe"><b>findViewsWithText</b>
+(<code>ArrayList<View>, CharSequence, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.fitsSystemWindows_added()" class="hiddenlink" target="rightframe"><b>fitsSystemWindows</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.flagToString_added(int)" class="hiddenlink" target="rightframe"><b>flagToString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Script.html#android.renderscript.Script.forEach_added(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><b>forEach</b>
+(<code>int, Allocation, Allocation, FieldPacker</code>)</A></nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.forgetLoadedWallpaper_added()" class="hiddenlink" target="rightframe"><b>forgetLoadedWallpaper</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.fromDatagramSocket_added(java.net.DatagramSocket)" class="hiddenlink" target="rightframe"><b>fromDatagramSocket</b>
+(<code>DatagramSocket</code>)</A></nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.fullBackupFile_added(java.io.File, android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>fullBackupFile</b>
+(<code>File, FullBackupDataOutput</code>)</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.getAbsoluteGravity_added(int, int)" class="hiddenlink" target="rightframe"><b>getAbsoluteGravity</b>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.getActionProvider_added()" class="hiddenlink" target="rightframe"><b>getActionProvider</b>
+()</A></nobr><br>
+<i>getAnnotation</i><br>
+ <nobr><A HREF="java.lang.reflect.Constructor.html#java.lang.reflect.Constructor.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Constructor
+</A></nobr><br>
+ <nobr><A HREF="java.lang.reflect.Field.html#java.lang.reflect.Field.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Field
+</A></nobr><br>
+ <nobr><A HREF="java.lang.reflect.Method.html#java.lang.reflect.Method.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Method
+</A></nobr><br>
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_added(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe"><b>getAuthToken</b>
+(<code>Account, String, Bundle, boolean, AccountManagerCallback<Bundle>, Handler</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoExposureLock_added()" class="hiddenlink" target="rightframe"><b>getAutoExposureLock</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoWhiteBalanceLock_added()" class="hiddenlink" target="rightframe"><b>getAutoWhiteBalanceLock</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getButtonState_added()" class="hiddenlink" target="rightframe"><b>getButtonState</b>
+()</A></nobr><br>
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getCameraDisabled_added(android.content.ComponentName)" class="hiddenlink" target="rightframe"><b>getCameraDisabled</b>
+(<code>ComponentName</code>)</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getCanRetrieveWindowContent_added()" class="hiddenlink" target="rightframe"><b>getCanRetrieveWindowContent</b>
+()</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.getContentDescription_added()" class="hiddenlink" target="rightframe"><b>getContentDescription</b>
+()</A></nobr><br>
+<i>getCurrVelocity</i><br>
+ <nobr><A HREF="android.widget.OverScroller.html#android.widget.OverScroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.OverScroller
+</A></nobr><br>
+ <nobr><A HREF="android.widget.Scroller.html#android.widget.Scroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.Scroller
+</A></nobr><br>
+<nobr><A HREF="android.database.sqlite.SQLiteOpenHelper.html#android.database.sqlite.SQLiteOpenHelper.getDatabaseName_added()" class="hiddenlink" target="rightframe"><b>getDatabaseName</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getDescription_added()" class="hiddenlink" target="rightframe"><b>getDescription</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.getDisplayName_added(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo)" class="hiddenlink" target="rightframe"><b>getDisplayName</b>
+(<code>Context, String, ApplicationInfo</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.getDividerPadding_added()" class="hiddenlink" target="rightframe"><b>getDividerPadding</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getDuration_added()" class="hiddenlink" target="rightframe"><b>getDuration</b>
+()</A></nobr><br>
+<nobr><A HREF="android.opengl.GLUtils.html#android.opengl.GLUtils.getEGLErrorString_added(int)" class="hiddenlink" target="rightframe"><b>getEGLErrorString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getEnabledAccessibilityServiceList_added(int)" class="hiddenlink" target="rightframe"><b>getEnabledAccessibilityServiceList</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.getEngines_added()" class="hiddenlink" target="rightframe"><b>getEngines</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getFocusAreas</b>
+()</A></nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.getHinting_added()" class="hiddenlink" target="rightframe"><b>getHinting</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getId_added()" class="hiddenlink" target="rightframe"><b>getId</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getInstalledAccessibilityServiceList_added()" class="hiddenlink" target="rightframe"><b>getInstalledAccessibilityServiceList</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.getLastInputMethodSubtype_added()" class="hiddenlink" target="rightframe"><b>getLastInputMethodSubtype</b>
+()</A></nobr><br>
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapHeight_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapHeight</b>
+()</A></nobr><br>
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapWidth_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapWidth</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumDetectedFaces_added()" class="hiddenlink" target="rightframe"><b>getMaxNumDetectedFaces</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumFocusAreas</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumMeteringAreas</b>
+()</A></nobr><br>
+<i>getMaxTransceiveLength</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcB.html#android.nfc.tech.NfcB.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcB
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcV.html#android.nfc.tech.NfcV.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcV
+</A></nobr><br>
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getMeasureAllChildren_added()" class="hiddenlink" target="rightframe"><b>getMeasureAllChildren</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.Handler.html#android.os.Handler.getMessageName_added(android.os.Message)" class="hiddenlink" target="rightframe"><b>getMessageName</b>
+(<code>Message</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMeteringAreas</b>
+()</A></nobr><br>
+<i>getName</i><br>
+ <nobr><A HREF="android.app.FragmentManager.BackStackEntry.html#android.app.FragmentManager.BackStackEntry.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.app.FragmentManager.BackStackEntry
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.BaseObj.html#android.renderscript.BaseObj.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.renderscript.BaseObj
+</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.getOffsetForPosition_added(float, float)" class="hiddenlink" target="rightframe"><b>getOffsetForPosition</b>
+(<code>float, float</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherLabel_added(int)" class="hiddenlink" target="rightframe"><b>getOtherLabel</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPrivateDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPrivateDirty</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPss_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPss</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherSharedDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherSharedDirty</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getPointerProperties_added(int, android.view.MotionEvent.PointerProperties)" class="hiddenlink" target="rightframe"><b>getPointerProperties</b>
+(<code>int, PointerProperties</code>)</A></nobr><br>
+<nobr><A HREF="android.bluetooth.BluetoothAdapter.html#android.bluetooth.BluetoothAdapter.getProfileConnectionState_added(int)" class="hiddenlink" target="rightframe"><b>getProfileConnectionState</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.html#android.os.Debug.getPss_added()" class="hiddenlink" target="rightframe"><b>getPss</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.Build.html#android.os.Build.getRadioVersion_added()" class="hiddenlink" target="rightframe"><b>getRadioVersion</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecord_added(int)" class="hiddenlink" target="rightframe"><b>getRecord</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecordCount_added()" class="hiddenlink" target="rightframe"><b>getRecordCount</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getResolveInfo_added()" class="hiddenlink" target="rightframe"><b>getResolveInfo</b>
+()</A></nobr><br>
+<nobr><A HREF="android.content.SyncAdapterType.html#android.content.SyncAdapterType.getSettingsActivity_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivity</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getSettingsActivityName_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivityName</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getStartDelay_added()" class="hiddenlink" target="rightframe"><b>getStartDelay</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.getTag_added()" class="hiddenlink" target="rightframe"><b>getTag</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextZoom_added()" class="hiddenlink" target="rightframe"><b>getTextZoom</b>
+()</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.getThemedContext_added()" class="hiddenlink" target="rightframe"><b>getThemedContext</b>
+()</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.getThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>getThreadStatsTag</b>
+()</A></nobr><br>
+<i>getTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.getTimestamp_added()" class="hiddenlink" target="rightframe"><b>getTimestamp</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getTitleRes_added()" class="hiddenlink" target="rightframe"><b>getTitleRes</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getToolType_added(int)" class="hiddenlink" target="rightframe"><b>getToolType</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.getUrl_added()" class="hiddenlink" target="rightframe"><b>getUrl</b>
+()</A></nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.ViewConfiguration.html#android.view.ViewConfiguration.hasPermanentMenuKey_added()" class="hiddenlink" target="rightframe"><b>hasPermanentMenuKey</b>
+()</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<i>incrementOperationCount</i><br>
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.inflate_added(int)" class="hiddenlink" target="rightframe"><b>inflate</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.FragmentManager.html#android.app.FragmentManager.invalidateOptionsMenu_added()" class="hiddenlink" target="rightframe"><b>invalidateOptionsMenu</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.isActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>isActionViewExpanded</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoExposureLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoExposureLockSupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoWhiteBalanceLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoWhiteBalanceLockSupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.isAuxiliary_added()" class="hiddenlink" target="rightframe"><b>isAuxiliary</b>
+()</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.isCompatible_added(android.renderscript.Element)" class="hiddenlink" target="rightframe"><b>isCompatible</b>
+(<code>Element</code>)</A></nobr><br>
+<nobr><A HREF="android.bluetooth.BluetoothSocket.html#android.bluetooth.BluetoothSocket.isConnected_added()" class="hiddenlink" target="rightframe"><b>isConnected</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.isHovered_added()" class="hiddenlink" target="rightframe"><b>isHovered</b>
+()</A></nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.isProfileId_added(long)" class="hiddenlink" target="rightframe"><b>isProfileId</b>
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.text.Layout.html#android.text.Layout.isRtlCharAt_added(int)" class="hiddenlink" target="rightframe"><b>isRtlCharAt</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.animation.Animator.html#android.animation.Animator.isStarted_added()" class="hiddenlink" target="rightframe"><b>isStarted</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.isSuggestionsEnabled_added()" class="hiddenlink" target="rightframe"><b>isSuggestionsEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.isTouchExplorationEnabled_added()" class="hiddenlink" target="rightframe"><b>isTouchExplorationEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isVideoSnapshotSupported_added()" class="hiddenlink" target="rightframe"><b>isVideoSnapshotSupported</b>
+()</A></nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.newChooseAccountIntent_added(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle)" class="hiddenlink" target="rightframe"><b>newChooseAccountIntent</b>
+(<code>Account, ArrayList<Account>, String[], boolean, String, String, String[], Bundle</code>)</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, PointerProperties[], PointerCoords[], int, int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.obtain_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>AccessibilityEvent</code>)</b> in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<i>ofFloat</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofFloat_added(T, android.util.Property<T, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Float>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofFloat_added(android.util.Property<?, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Float>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<i>ofInt</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofInt_added(T, android.util.Property<T, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Integer>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofInt_added(android.util.Property<?, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Integer>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofKeyframe_added(android.util.Property, android.animation.Keyframe...)" class="hiddenlink" target="rightframe"><b>ofKeyframe</b>
+(<code>Property, </code>)</A></nobr><br>
+<i>ofObject</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofObject_added(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, V>, TypeEvaluator<V>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofObject_added(android.util.Property, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property, TypeEvaluator<V>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewCollapsed_added()" class="hiddenlink" target="rightframe"><b>onActionViewCollapsed</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>onActionViewExpanded</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.onBuildStartFragmentIntent_added(java.lang.String, android.os.Bundle, int, int)" class="hiddenlink" target="rightframe"><b>onBuildStartFragmentIntent</b>
+(<code>String, Bundle, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onFullBackup_added(android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>onFullBackup</b>
+(<code>FullBackupDataOutput</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverChanged_added(boolean)" class="hiddenlink" target="rightframe"><b>onHoverChanged</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityNodeInfo_added(android.view.accessibility.AccessibilityNodeInfo)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityNodeInfo</b>
+(<code>AccessibilityNodeInfo</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onInterceptHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onInterceptHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onPopulateAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onPopulateAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onRequestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onRequestSendAccessibilityEvent</b>
+(<code>View, AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onRestoreFile_added(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long)" class="hiddenlink" target="rightframe"><b>onRestoreFile</b>
+(<code>ParcelFileDescriptor, long, File, int, long, long</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, int, CustomViewCallback</code>)</A></nobr><br>
+<nobr><A HREF="android.app.Service.html#android.app.Service.onTaskRemoved_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>onTaskRemoved</b>
+(<code>Intent</code>)</A></nobr><br>
+<i>onTrimMemory</i><br>
+ <nobr><A HREF="android.app.Activity.html#android.app.Activity.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Activity
+</A></nobr><br>
+ <nobr><A HREF="android.app.Application.html#android.app.Application.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Application
+</A></nobr><br>
+ <nobr><A HREF="android.app.Fragment.html#android.app.Fragment.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Fragment
+</A></nobr><br>
+ <nobr><A HREF="android.app.Service.html#android.app.Service.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Service
+</A></nobr><br>
+ <nobr><A HREF="android.content.ContentProvider.html#android.content.ContentProvider.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.content.ContentProvider
+</A></nobr><br>
+<nobr><A HREF="android.inputmethodservice.InputMethodService.html#android.inputmethodservice.InputMethodService.onViewClicked_added(boolean)" class="hiddenlink" target="rightframe"><b>onViewClicked</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.Contacts.html#android.provider.ContactsContract.Contacts.openContactPhotoInputStream_added(android.content.ContentResolver, android.net.Uri, boolean)" class="hiddenlink" target="rightframe"><b>openContactPhotoInputStream</b>
+(<code>ContentResolver, Uri, boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.overridesImplicitlyEnabledSubtype_added()" class="hiddenlink" target="rightframe"><b>overridesImplicitlyEnabledSubtype</b>
+()</A></nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.opengl.Matrix.html#android.opengl.Matrix.perspectiveM_added(float[], int, float, float, float, float)" class="hiddenlink" target="rightframe"><b>perspectiveM</b>
+(<code>float[], int, float, float, float, float</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.RecoverySystem.html#android.os.RecoverySystem.rebootWipeCache_added(android.content.Context)" class="hiddenlink" target="rightframe"><b>rebootWipeCache</b>
+(<code>Context</code>)</A></nobr><br>
+<nobr><A HREF="android.app.Application.html#android.app.Application.registerActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>registerActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.registerComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>registerComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.registerRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>registerRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<i>release</i><br>
+ <nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.graphics.SurfaceTexture
+</A></nobr><br>
+ <nobr><A HREF="android.view.Surface.html#android.view.Surface.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.Surface
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.removeAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<i>requestSendAccessibilityEvent</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewGroup
+</A></nobr><br>
+ <nobr><A HREF="android.view.ViewParent.html#android.view.ViewParent.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewParent
+</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedDrawables_added()" class="hiddenlink" target="rightframe"><b>resetResolvedDrawables</b>
+()</A></nobr><br>
+<i>resetResolvedLayoutDirection</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.ViewGroup
+</A></nobr><br>
+ <nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.TextView
+</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedTextDirection_added()" class="hiddenlink" target="rightframe"><b>resetResolvedTextDirection</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveDrawables_added()" class="hiddenlink" target="rightframe"><b>resolveDrawables</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveTextDirection_added()" class="hiddenlink" target="rightframe"><b>resolveTextDirection</b>
+()</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.PendingIntent.html#android.app.PendingIntent.send_added(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>send</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<nobr><A HREF="android.content.IntentSender.html#android.content.IntentSender.sendIntent_added(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>sendIntent</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setAccessibilityDelegate_added(android.view.View.AccessibilityDelegate)" class="hiddenlink" target="rightframe"><b>setAccessibilityDelegate</b>
+(<code>AccessibilityDelegate</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setActionProvider_added(android.view.ActionProvider)" class="hiddenlink" target="rightframe"><b>setActionProvider</b>
+(<code>ActionProvider</code>)</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.setAdditionalInputMethodSubtypes_added(java.lang.String, android.view.inputmethod.InputMethodSubtype[])" class="hiddenlink" target="rightframe"><b>setAdditionalInputMethodSubtypes</b>
+(<code>String, InputMethodSubtype[]</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.setAllCaps_added(boolean)" class="hiddenlink" target="rightframe"><b>setAllCaps</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.animation.LayoutTransition.html#android.animation.LayoutTransition.setAnimateParentHierarchy_added(boolean)" class="hiddenlink" target="rightframe"><b>setAnimateParentHierarchy</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoExposureLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoExposureLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoWhiteBalanceLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoWhiteBalanceLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setCameraDisabled_added(android.content.ComponentName, boolean)" class="hiddenlink" target="rightframe"><b>setCameraDisabled</b>
+(<code>ComponentName, boolean</code>)</A></nobr><br>
+<i>setContentDescription</i><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+<i>setDataSource</i><br>
+ <nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.setDataSource_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>String, Map<String, String></code>)</b> in android.media.MediaMetadataRetriever
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, Uri, Map<String, String></code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+<nobr><A HREF="android.view.Window.html#android.view.Window.setDimAmount_added(float)" class="hiddenlink" target="rightframe"><b>setDimAmount</b>
+(<code>float</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.setDividerPadding_added(int)" class="hiddenlink" target="rightframe"><b>setDividerPadding</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.setFaceDetectionListener_added(android.hardware.Camera.FaceDetectionListener)" class="hiddenlink" target="rightframe"><b>setFaceDetectionListener</b>
+(<code>FaceDetectionListener</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setFitsSystemWindows_added(boolean)" class="hiddenlink" target="rightframe"><b>setFitsSystemWindows</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setFocusAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setFocusAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.setHinting_added(int)" class="hiddenlink" target="rightframe"><b>setHinting</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setHomeButtonEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setHomeButtonEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setHovered_added(boolean)" class="hiddenlink" target="rightframe"><b>setHovered</b>
+(<code>boolean</code>)</A></nobr><br>
+<i>setIcon</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setImeOptions_added(int)" class="hiddenlink" target="rightframe"><b>setImeOptions</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setInputType_added(int)" class="hiddenlink" target="rightframe"><b>setInputType</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setKeyManagers_added(javax.net.ssl.KeyManager[])" class="hiddenlink" target="rightframe"><b>setKeyManagers</b>
+(<code>KeyManager[]</code>)</A></nobr><br>
+<nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setLocation_added(float, float)" class="hiddenlink" target="rightframe"><b>setLocation</b>
+(<code>float, float</code>)</A></nobr><br>
+<i>setLogo</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<nobr><A HREF="android.app.Fragment.html#android.app.Fragment.setMenuVisibility_added(boolean)" class="hiddenlink" target="rightframe"><b>setMenuVisibility</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setMeteringAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setMeteringAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessage_added(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessage</b>
+(<code>NdefMessage, Activity, </code>)</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessageCallback_added(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessageCallback</b>
+(<code>CreateNdefMessageCallback, Activity, </code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setOnActionExpandListener_added(android.view.MenuItem.OnActionExpandListener)" class="hiddenlink" target="rightframe"><b>setOnActionExpandListener</b>
+(<code>OnActionExpandListener</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.setOnDismissListener_added(android.widget.PopupMenu.OnDismissListener)" class="hiddenlink" target="rightframe"><b>setOnDismissListener</b>
+(<code>OnDismissListener</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setOnHoverListener_added(android.view.View.OnHoverListener)" class="hiddenlink" target="rightframe"><b>setOnHoverListener</b>
+(<code>OnHoverListener</code>)</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setOnNdefPushCompleteCallback_added(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setOnNdefPushCompleteCallback</b>
+(<code>OnNdefPushCompleteCallback, Activity, </code>)</A></nobr><br>
+<nobr><A HREF="android.app.Notification.Builder.html#android.app.Notification.Builder.setProgress_added(int, int, boolean)" class="hiddenlink" target="rightframe"><b>setProgress</b>
+(<code>int, int, boolean</code>)</A></nobr><br>
+<i>setProperty</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setRecordingHint_added(boolean)" class="hiddenlink" target="rightframe"><b>setRecordingHint</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_added(int, android.content.Intent)" class="hiddenlink" target="rightframe"><b>setRemoteAdapter</b>
+(<code>int, Intent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollX_added(int)" class="hiddenlink" target="rightframe"><b>setScrollX</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollY_added(int)" class="hiddenlink" target="rightframe"><b>setScrollY</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setShowAsActionFlags_added(int)" class="hiddenlink" target="rightframe"><b>setShowAsActionFlags</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setSplitBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setSplitBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setStackedBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setStackedBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.setStartDelay_added(long)" class="hiddenlink" target="rightframe"><b>setStartDelay</b>
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.database.sqlite.SQLiteQueryBuilder.html#android.database.sqlite.SQLiteQueryBuilder.setStrict_added(boolean)" class="hiddenlink" target="rightframe"><b>setStrict</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setSurface_added(android.view.Surface)" class="hiddenlink" target="rightframe"><b>setSurface</b>
+(<code>Surface</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.RenderScriptGL.html#android.renderscript.RenderScriptGL.setSurfaceTexture_added(android.graphics.SurfaceTexture, int, int)" class="hiddenlink" target="rightframe"><b>setSurfaceTexture</b>
+(<code>SurfaceTexture, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.setTag_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>setTag</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextZoom_added(int)" class="hiddenlink" target="rightframe"><b>setTextZoom</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.setThreadStatsTag_added(int)" class="hiddenlink" target="rightframe"><b>setThreadStatsTag</b>
+(<code>int</code>)</A></nobr><br>
+<i>setTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setTrustManagers_added(javax.net.ssl.TrustManager[])" class="hiddenlink" target="rightframe"><b>setTrustManagers</b>
+(<code>TrustManager[]</code>)</A></nobr><br>
+<i>setUiOptions</i><br>
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.view.Window
+</A></nobr><br>
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.view.Window
+</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.shouldDelayChildPressedState_added()" class="hiddenlink" target="rightframe"><b>shouldDelayChildPressedState</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.start_added()" class="hiddenlink" target="rightframe"><b>start</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.startFaceDetection_added()" class="hiddenlink" target="rightframe"><b>startFaceDetection</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.startWithFragment_added(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int)" class="hiddenlink" target="rightframe"><b>startWithFragment</b>
+(<code>String, Bundle, Fragment, int, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.stopFaceDetection_added()" class="hiddenlink" target="rightframe"><b>stopFaceDetection</b>
+()</A></nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.tagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>tagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<nobr><A HREF="android.graphics.RectF.html#android.graphics.RectF.toShortString_added()" class="hiddenlink" target="rightframe"><b>toShortString</b>
+()</A></nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.app.Application.html#android.app.Application.unregisterActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.unregisterComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.unregisterRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>unregisterRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.untagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>untagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>verifyPendingInstall</i><br>
+ <nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.content.pm.PackageManager
+</A></nobr><br>
+ <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.test.mock.MockPackageManager
+</A></nobr><br>
+<i>viewClicked</i><br>
+ <nobr><A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html#android.inputmethodservice.InputMethodService.InputMethodSessionImpl.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.inputmethodservice.InputMethodService.InputMethodSessionImpl
+</A></nobr><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.viewClicked_added(android.view.View)" class="hiddenlink" target="rightframe">type <b>
+(<code>View</code>)</b> in android.view.inputmethod.InputMethodManager
+</A></nobr><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSession.html#android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.view.inputmethod.InputMethodSession
+</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_all.html b/docs/html/sdk/api_diff/14/changes/methods_index_all.html
new file mode 100644
index 0000000..3ba8441
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_all.html
@@ -0,0 +1,1424 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Methods</b>
+ <br>
+<A HREF="methods_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.addAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>addAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<i>addF64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addF64_added(android.renderscript.Double4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Double4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<i>addI64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addI64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<i>addU64</i><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long2)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long2</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long3)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long3</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.FieldPacker.html#android.renderscript.FieldPacker.addU64_added(android.renderscript.Long4)" class="hiddenlink" target="rightframe">type <b>
+(<code>Long4</code>)</b> in android.renderscript.FieldPacker
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.appendRecord_added(android.view.accessibility.AccessibilityRecord)" class="hiddenlink" target="rightframe"><b>appendRecord</b>
+(<code>AccessibilityRecord</code>)</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.cancel_added()" class="hiddenlink" target="rightframe"><b>cancel</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollHorizontally_added(int)" class="hiddenlink" target="rightframe"><b>canScrollHorizontally</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.canScrollVertically_added(int)" class="hiddenlink" target="rightframe"><b>canScrollVertically</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.clearThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>clearThreadStatsTag</b>
+()</A></nobr><br>
+<i>clone</i><br>
+ <nobr><A HREF="android.util.SparseArray.html#android.util.SparseArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseArray
+</A></nobr><br>
+ <nobr><A HREF="android.util.SparseBooleanArray.html#android.util.SparseBooleanArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseBooleanArray
+</A></nobr><br>
+ <nobr><A HREF="android.util.SparseIntArray.html#android.util.SparseIntArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseIntArray
+</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.collapseActionView_added()" class="hiddenlink" target="rightframe"><b>collapseActionView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy1DRangeFrom_added(int, int, android.renderscript.Allocation, int)" class="hiddenlink" target="rightframe"><b>copy1DRangeFrom</b>
+(<code>int, int, Allocation, int</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Allocation.html#android.renderscript.Allocation.copy2DRangeFrom_added(int, int, int, int, android.renderscript.Allocation, int, int)" class="hiddenlink" target="rightframe"><b>copy2DRangeFrom</b>
+(<code>int, int, int, int, Allocation, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.create1D_added(android.renderscript.RenderScript, android.renderscript.Allocation)" class="hiddenlink" target="rightframe"><b>create1D</b>
+(<code>RenderScript, Allocation</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.createAccessibilityNodeInfo_added()" class="hiddenlink" target="rightframe"><b>createAccessibilityNodeInfo</b>
+()</A></nobr><br>
+<nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createApplicationRecord_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>createApplicationRecord</b>
+(<code>String</code>)</A></nobr><br>
+<i>createUri</i><br>
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(android.net.Uri)" class="hiddenlink" target="rightframe">type <b>
+(<code>Uri</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.NdefRecord.html#android.nfc.NdefRecord.createUri_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.nfc.NdefRecord
+</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>deferNotifyDataSetChanged</i><br>
+ <nobr><A HREF="android.widget.AbsListView.html#android.widget.AbsListView.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AbsListView
+</A></nobr><br>
+ <nobr><A HREF="android.widget.AdapterViewAnimator.html#android.widget.AdapterViewAnimator.deferNotifyDataSetChanged_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.AdapterViewAnimator
+</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.disableForegroundNdefPush_changed(android.app.Activity)" class="hiddenlink" target="rightframe">disableForegroundNdefPush
+(<code>Activity</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericFocusedEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericFocusedEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchGenericPointerEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchGenericPointerEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.dispatchHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>dispatchHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.service.wallpaper.WallpaperService.Engine.html#android.service.wallpaper.WallpaperService.Engine.dump_added(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[])" class="hiddenlink" target="rightframe"><b>dump</b>
+(<code>String, FileDescriptor, PrintWriter, String[]</code>)</A></nobr><br>
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.dup_added()" class="hiddenlink" target="rightframe"><b>dup</b>
+()</A></nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.enableForegroundNdefPush_changed(android.app.Activity, android.nfc.NdefMessage)" class="hiddenlink" target="rightframe">enableForegroundNdefPush
+(<code>Activity, NdefMessage</code>)</A></nobr><br>
+<nobr><A HREF="java.io.ObjectOutputStream.html#java.io.ObjectOutputStream.enableReplaceObject_changed(boolean)" class="hiddenlink" target="rightframe">enableReplaceObject
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="java.io.ObjectInputStream.html#java.io.ObjectInputStream.enableResolveObject_changed(boolean)" class="hiddenlink" target="rightframe">enableResolveObject
+(<code>boolean</code>)</A></nobr><br>
+<i>equals</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.io.FilePermission
+</A></nobr><br>
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.net.SocketPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.AllPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.BasicPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.Permission
+</A></nobr><br>
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.UnresolvedPermission
+</A></nobr><br>
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<i>evaluate</i><br>
+ <nobr><A HREF="android.animation.FloatEvaluator.html#android.animation.FloatEvaluator.evaluate_changed(float, java.lang.Number, java.lang.Number)" class="hiddenlink" target="rightframe">type
+(<code>float, Number, Number</code>) in android.animation.FloatEvaluator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.IntEvaluator.html#android.animation.IntEvaluator.evaluate_changed(float, java.lang.Integer, java.lang.Integer)" class="hiddenlink" target="rightframe">type
+(<code>float, Integer, Integer</code>) in android.animation.IntEvaluator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.TypeEvaluator.html#android.animation.TypeEvaluator.evaluate_changed(float, T, T)" class="hiddenlink" target="rightframe">type
+(<code>float, T, T</code>) in android.animation.TypeEvaluator
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.eventTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>eventTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.expandActionView_added()" class="hiddenlink" target="rightframe"><b>expandActionView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.ExpandableListView.html#android.widget.ExpandableListView.expandGroup_added(int, boolean)" class="hiddenlink" target="rightframe"><b>expandGroup</b>
+(<code>int, boolean</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.F64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>F64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.feedbackTypeToString_added(int)" class="hiddenlink" target="rightframe"><b>feedbackTypeToString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="dalvik.system.PathClassLoader.html#dalvik.system.PathClassLoader.findLibrary_changed(java.lang.String)" class="hiddenlink" target="rightframe">findLibrary
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.findViewsWithText_added(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int)" class="hiddenlink" target="rightframe"><b>findViewsWithText</b>
+(<code>ArrayList<View>, CharSequence, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.fitsSystemWindows_added()" class="hiddenlink" target="rightframe"><b>fitsSystemWindows</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.flagToString_added(int)" class="hiddenlink" target="rightframe"><b>flagToString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Script.html#android.renderscript.Script.forEach_added(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><b>forEach</b>
+(<code>int, Allocation, Allocation, FieldPacker</code>)</A></nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.forgetLoadedWallpaper_added()" class="hiddenlink" target="rightframe"><b>forgetLoadedWallpaper</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.freeze_removed()" class="hiddenlink" target="rightframe"><strike>freeze</strike>
+()</A></nobr><br>
+<nobr><A HREF="android.os.ParcelFileDescriptor.html#android.os.ParcelFileDescriptor.fromDatagramSocket_added(java.net.DatagramSocket)" class="hiddenlink" target="rightframe"><b>fromDatagramSocket</b>
+(<code>DatagramSocket</code>)</A></nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.fullBackupFile_added(java.io.File, android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>fullBackupFile</b>
+(<code>File, FullBackupDataOutput</code>)</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Gravity.html#android.view.Gravity.getAbsoluteGravity_added(int, int)" class="hiddenlink" target="rightframe"><b>getAbsoluteGravity</b>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getAccessibilityServiceList_changed()" class="hiddenlink" target="rightframe">getAccessibilityServiceList
+()</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.getActionProvider_added()" class="hiddenlink" target="rightframe"><b>getActionProvider</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getAddedCount_changed()" class="hiddenlink" target="rightframe">getAddedCount
+()</A></nobr><br>
+<i>getAnnotation</i><br>
+ <nobr><A HREF="java.lang.reflect.Constructor.html#java.lang.reflect.Constructor.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Constructor
+</A></nobr><br>
+ <nobr><A HREF="java.lang.reflect.Field.html#java.lang.reflect.Field.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Field
+</A></nobr><br>
+ <nobr><A HREF="java.lang.reflect.Method.html#java.lang.reflect.Method.getAnnotation_added(java.lang.Class<A>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Class<A></code>)</b> in java.lang.reflect.Method
+</A></nobr><br>
+<i>getAuthToken</i><br>
+ <nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_added(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe">type <b>
+(<code>Account, String, Bundle, boolean, AccountManagerCallback<Bundle>, Handler</code>)</b> in android.accounts.AccountManager
+</A></nobr><br>
+ <nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_changed(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe">type
+(<code>Account, String, boolean, AccountManagerCallback<Bundle>, Handler</code>) in android.accounts.AccountManager
+</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoExposureLock_added()" class="hiddenlink" target="rightframe"><b>getAutoExposureLock</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getAutoWhiteBalanceLock_added()" class="hiddenlink" target="rightframe"><b>getAutoWhiteBalanceLock</b>
+()</A></nobr><br>
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.getBackgroundDataSetting_changed()" class="hiddenlink" target="rightframe">getBackgroundDataSetting
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getBeforeText_changed()" class="hiddenlink" target="rightframe">getBeforeText
+()</A></nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getButtonState_added()" class="hiddenlink" target="rightframe"><b>getButtonState</b>
+()</A></nobr><br>
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getCameraDisabled_added(android.content.ComponentName)" class="hiddenlink" target="rightframe"><b>getCameraDisabled</b>
+(<code>ComponentName</code>)</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getCanRetrieveWindowContent_added()" class="hiddenlink" target="rightframe"><b>getCanRetrieveWindowContent</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getClassName_changed()" class="hiddenlink" target="rightframe">getClassName
+()</A></nobr><br>
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getConsiderGoneChildrenWhenMeasuring_changed()" class="hiddenlink" target="rightframe">getConsiderGoneChildrenWhenMeasuring
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructors_changed()" class="hiddenlink" target="rightframe">getConstructors
+()</A></nobr><br>
+<i>getContentDescription</i><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.getContentDescription_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getContentDescription_changed()" class="hiddenlink" target="rightframe">type
+() in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getCurrentItemIndex_changed()" class="hiddenlink" target="rightframe">getCurrentItemIndex
+()</A></nobr><br>
+<i>getCurrVelocity</i><br>
+ <nobr><A HREF="android.widget.OverScroller.html#android.widget.OverScroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.OverScroller
+</A></nobr><br>
+ <nobr><A HREF="android.widget.Scroller.html#android.widget.Scroller.getCurrVelocity_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.Scroller
+</A></nobr><br>
+<nobr><A HREF="android.database.sqlite.SQLiteOpenHelper.html#android.database.sqlite.SQLiteOpenHelper.getDatabaseName_added()" class="hiddenlink" target="rightframe"><b>getDatabaseName</b>
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredClasses_changed()" class="hiddenlink" target="rightframe">getDeclaredClasses
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructors_changed()" class="hiddenlink" target="rightframe">getDeclaredConstructors
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getDeclaredField
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredFields_changed()" class="hiddenlink" target="rightframe">getDeclaredFields
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethods_changed()" class="hiddenlink" target="rightframe">getDeclaredMethods
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getDescription_added()" class="hiddenlink" target="rightframe"><b>getDescription</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getDisableDependentsState_changed()" class="hiddenlink" target="rightframe">getDisableDependentsState
+()</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.getDisplayName_added(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo)" class="hiddenlink" target="rightframe"><b>getDisplayName</b>
+(<code>Context, String, ApplicationInfo</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.getDividerPadding_added()" class="hiddenlink" target="rightframe"><b>getDividerPadding</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getDuration_added()" class="hiddenlink" target="rightframe"><b>getDuration</b>
+()</A></nobr><br>
+<nobr><A HREF="android.opengl.GLUtils.html#android.opengl.GLUtils.getEGLErrorString_added(int)" class="hiddenlink" target="rightframe"><b>getEGLErrorString</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getEnabledAccessibilityServiceList_added(int)" class="hiddenlink" target="rightframe"><b>getEnabledAccessibilityServiceList</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.getEngines_added()" class="hiddenlink" target="rightframe"><b>getEngines</b>
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getField
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getFields_changed()" class="hiddenlink" target="rightframe">getFields
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getFocusAreas</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getFromIndex_changed()" class="hiddenlink" target="rightframe">getFromIndex
+()</A></nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.getHinting_added()" class="hiddenlink" target="rightframe"><b>getHinting</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getId_added()" class="hiddenlink" target="rightframe"><b>getId</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getInstalledAccessibilityServiceList_added()" class="hiddenlink" target="rightframe"><b>getInstalledAccessibilityServiceList</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getItemCount_changed()" class="hiddenlink" target="rightframe">getItemCount
+()</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.getLastInputMethodSubtype_added()" class="hiddenlink" target="rightframe"><b>getLastInputMethodSubtype</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.getMainLooper_changed()" class="hiddenlink" target="rightframe">getMainLooper
+()</A></nobr><br>
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapHeight_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapHeight</b>
+()</A></nobr><br>
+<nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.getMaximumBitmapWidth_added()" class="hiddenlink" target="rightframe"><b>getMaximumBitmapWidth</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumDetectedFaces_added()" class="hiddenlink" target="rightframe"><b>getMaxNumDetectedFaces</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumFocusAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumFocusAreas</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMaxNumMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMaxNumMeteringAreas</b>
+()</A></nobr><br>
+<i>getMaxTransceiveLength</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcB.html#android.nfc.tech.NfcB.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcB
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcV.html#android.nfc.tech.NfcV.getMaxTransceiveLength_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcV
+</A></nobr><br>
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getMeasureAllChildren_added()" class="hiddenlink" target="rightframe"><b>getMeasureAllChildren</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.Handler.html#android.os.Handler.getMessageName_added(android.os.Message)" class="hiddenlink" target="rightframe"><b>getMessageName</b>
+(<code>Message</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.getMeteringAreas_added()" class="hiddenlink" target="rightframe"><b>getMeteringAreas</b>
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethods_changed()" class="hiddenlink" target="rightframe">getMethods
+()</A></nobr><br>
+<i>getName</i><br>
+ <nobr><A HREF="android.app.FragmentManager.BackStackEntry.html#android.app.FragmentManager.BackStackEntry.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.app.FragmentManager.BackStackEntry
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.BaseObj.html#android.renderscript.BaseObj.getName_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.renderscript.BaseObj
+</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.getOffsetForPosition_added(float, float)" class="hiddenlink" target="rightframe"><b>getOffsetForPosition</b>
+(<code>float, float</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherLabel_added(int)" class="hiddenlink" target="rightframe"><b>getOtherLabel</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPrivateDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPrivateDirty</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherPss_added(int)" class="hiddenlink" target="rightframe"><b>getOtherPss</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.MemoryInfo.html#android.os.Debug.MemoryInfo.getOtherSharedDirty_added(int)" class="hiddenlink" target="rightframe"><b>getOtherSharedDirty</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getParcelableData_changed()" class="hiddenlink" target="rightframe">getParcelableData
+()</A></nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getPointerProperties_added(int, android.view.MotionEvent.PointerProperties)" class="hiddenlink" target="rightframe"><b>getPointerProperties</b>
+(<code>int, PointerProperties</code>)</A></nobr><br>
+<nobr><A HREF="android.bluetooth.BluetoothAdapter.html#android.bluetooth.BluetoothAdapter.getProfileConnectionState_added(int)" class="hiddenlink" target="rightframe"><b>getProfileConnectionState</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Debug.html#android.os.Debug.getPss_added()" class="hiddenlink" target="rightframe"><b>getPss</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.Build.html#android.os.Build.getRadioVersion_added()" class="hiddenlink" target="rightframe"><b>getRadioVersion</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecord_added(int)" class="hiddenlink" target="rightframe"><b>getRecord</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRecordCount_added()" class="hiddenlink" target="rightframe"><b>getRecordCount</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRemovedCount_changed()" class="hiddenlink" target="rightframe">getRemovedCount
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getResolveInfo_added()" class="hiddenlink" target="rightframe"><b>getResolveInfo</b>
+()</A></nobr><br>
+<nobr><A HREF="android.content.SyncAdapterType.html#android.content.SyncAdapterType.getSettingsActivity_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivity</b>
+()</A></nobr><br>
+<nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html#android.accessibilityservice.AccessibilityServiceInfo.getSettingsActivityName_added()" class="hiddenlink" target="rightframe"><b>getSettingsActivityName</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.getStartDelay_added()" class="hiddenlink" target="rightframe"><b>getStartDelay</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOff_changed()" class="hiddenlink" target="rightframe">getSummaryOff
+()</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOn_changed()" class="hiddenlink" target="rightframe">getSummaryOn
+()</A></nobr><br>
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.getTag_added()" class="hiddenlink" target="rightframe"><b>getTag</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getText_changed()" class="hiddenlink" target="rightframe">getText
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextSize_changed()" class="hiddenlink" target="rightframe">getTextSize
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextZoom_added()" class="hiddenlink" target="rightframe"><b>getTextZoom</b>
+()</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.getThemedContext_added()" class="hiddenlink" target="rightframe"><b>getThemedContext</b>
+()</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.getThreadStatsTag_added()" class="hiddenlink" target="rightframe"><b>getThreadStatsTag</b>
+()</A></nobr><br>
+<i>getTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html#android.nfc.tech.IsoDep.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.IsoDep
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.getTimeout_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.getTimestamp_added()" class="hiddenlink" target="rightframe"><b>getTimestamp</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getTitleRes_added()" class="hiddenlink" target="rightframe"><b>getTitleRes</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.getToolType_added(int)" class="hiddenlink" target="rightframe"><b>getToolType</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.getUrl_added()" class="hiddenlink" target="rightframe"><b>getUrl</b>
+()</A></nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>hashCode</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.io.FilePermission
+</A></nobr><br>
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.net.SocketPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.AllPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.BasicPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.Permission
+</A></nobr><br>
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.UnresolvedPermission
+</A></nobr><br>
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<nobr><A HREF="android.view.ViewConfiguration.html#android.view.ViewConfiguration.hasPermanentMenuKey_added()" class="hiddenlink" target="rightframe"><b>hasPermanentMenuKey</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.hide_removed()" class="hiddenlink" target="rightframe"><strike>hide</strike>
+()</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.I8_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>I8_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<i>incrementOperationCount</i><br>
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+ <nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.incrementOperationCount_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.net.TrafficStats
+</A></nobr><br>
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.inflate_added(int)" class="hiddenlink" target="rightframe"><b>inflate</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.FragmentManager.html#android.app.FragmentManager.invalidateOptionsMenu_added()" class="hiddenlink" target="rightframe"><b>invalidateOptionsMenu</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.isActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>isActionViewExpanded</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoExposureLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoExposureLockSupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isAutoWhiteBalanceLockSupported_added()" class="hiddenlink" target="rightframe"><b>isAutoWhiteBalanceLockSupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.isAuxiliary_added()" class="hiddenlink" target="rightframe"><b>isAuxiliary</b>
+()</A></nobr><br>
+<i>isChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.isCompatible_added(android.renderscript.Element)" class="hiddenlink" target="rightframe"><b>isCompatible</b>
+(<code>Element</code>)</A></nobr><br>
+<nobr><A HREF="android.bluetooth.BluetoothSocket.html#android.bluetooth.BluetoothSocket.isConnected_added()" class="hiddenlink" target="rightframe"><b>isConnected</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isEnabled_changed()" class="hiddenlink" target="rightframe">isEnabled
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isFullScreen_changed()" class="hiddenlink" target="rightframe">isFullScreen
+()</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.isHovered_added()" class="hiddenlink" target="rightframe"><b>isHovered</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isPassword_changed()" class="hiddenlink" target="rightframe">isPassword
+()</A></nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.html#android.provider.ContactsContract.isProfileId_added(long)" class="hiddenlink" target="rightframe"><b>isProfileId</b>
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.text.Layout.html#android.text.Layout.isRtlCharAt_added(int)" class="hiddenlink" target="rightframe"><b>isRtlCharAt</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.animation.Animator.html#android.animation.Animator.isStarted_added()" class="hiddenlink" target="rightframe"><b>isStarted</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.isSuggestionsEnabled_added()" class="hiddenlink" target="rightframe"><b>isSuggestionsEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.isTouchExplorationEnabled_added()" class="hiddenlink" target="rightframe"><b>isTouchExplorationEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.isVideoSnapshotSupported_added()" class="hiddenlink" target="rightframe"><b>isVideoSnapshotSupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.isWiredHeadsetOn_changed()" class="hiddenlink" target="rightframe">isWiredHeadsetOn
+()</A></nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.loop_changed()" class="hiddenlink" target="rightframe">loop
+()</A></nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myLooper_changed()" class="hiddenlink" target="rightframe">myLooper
+()</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myQueue_changed()" class="hiddenlink" target="rightframe">myQueue
+()</A></nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.newChooseAccountIntent_added(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle)" class="hiddenlink" target="rightframe"><b>newChooseAccountIntent</b>
+(<code>Account, ArrayList<Account>, String[], boolean, String, String, String[], Bundle</code>)</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_removed(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</strike> in android.view.MotionEvent
+</A></nobr><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, PointerProperties[], PointerCoords[], int, int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+ <nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_added(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</b> in android.view.MotionEvent
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.obtain_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>AccessibilityEvent</code>)</b> in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<i>ofFloat</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofFloat_added(T, android.util.Property<T, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Float>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofFloat_added(android.util.Property<?, java.lang.Float>, float...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Float>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<i>ofInt</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofInt_added(T, android.util.Property<T, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, Integer>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofInt_added(android.util.Property<?, java.lang.Integer>, int...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property<?, Integer>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofKeyframe_added(android.util.Property, android.animation.Keyframe...)" class="hiddenlink" target="rightframe"><b>ofKeyframe</b>
+(<code>Property, </code>)</A></nobr><br>
+<i>ofObject</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.ofObject_added(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>T, Property<T, V>, TypeEvaluator<V>, </code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.ofObject_added(android.util.Property, android.animation.TypeEvaluator<V>, V...)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property, TypeEvaluator<V>, </code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewCollapsed_added()" class="hiddenlink" target="rightframe"><b>onActionViewCollapsed</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.onActionViewExpanded_added()" class="hiddenlink" target="rightframe"><b>onActionViewExpanded</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.onBuildStartFragmentIntent_added(java.lang.String, android.os.Bundle, int, int)" class="hiddenlink" target="rightframe"><b>onBuildStartFragmentIntent</b>
+(<code>String, Bundle, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onFullBackup_added(android.app.backup.FullBackupDataOutput)" class="hiddenlink" target="rightframe"><b>onFullBackup</b>
+(<code>FullBackupDataOutput</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverChanged_added(boolean)" class="hiddenlink" target="rightframe"><b>onHoverChanged</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onInitializeAccessibilityNodeInfo_added(android.view.accessibility.AccessibilityNodeInfo)" class="hiddenlink" target="rightframe"><b>onInitializeAccessibilityNodeInfo</b>
+(<code>AccessibilityNodeInfo</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onInterceptHoverEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>onInterceptHoverEvent</b>
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onPopulateAccessibilityEvent_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onPopulateAccessibilityEvent</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.onRequestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>onRequestSendAccessibilityEvent</b>
+(<code>View, AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.app.backup.BackupAgent.html#android.app.backup.BackupAgent.onRestoreFile_added(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long)" class="hiddenlink" target="rightframe"><b>onRestoreFile</b>
+(<code>ParcelFileDescriptor, long, File, int, long, long</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, int, CustomViewCallback</code>)</A></nobr><br>
+<nobr><A HREF="android.app.Service.html#android.app.Service.onTaskRemoved_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>onTaskRemoved</b>
+(<code>Intent</code>)</A></nobr><br>
+<i>onTrimMemory</i><br>
+ <nobr><A HREF="android.app.Activity.html#android.app.Activity.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Activity
+</A></nobr><br>
+ <nobr><A HREF="android.app.Application.html#android.app.Application.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Application
+</A></nobr><br>
+ <nobr><A HREF="android.app.Fragment.html#android.app.Fragment.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Fragment
+</A></nobr><br>
+ <nobr><A HREF="android.app.Service.html#android.app.Service.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.Service
+</A></nobr><br>
+ <nobr><A HREF="android.content.ContentProvider.html#android.content.ContentProvider.onTrimMemory_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.content.ContentProvider
+</A></nobr><br>
+<nobr><A HREF="android.inputmethodservice.InputMethodService.html#android.inputmethodservice.InputMethodService.onViewClicked_added(boolean)" class="hiddenlink" target="rightframe"><b>onViewClicked</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.provider.ContactsContract.Contacts.html#android.provider.ContactsContract.Contacts.openContactPhotoInputStream_added(android.content.ContentResolver, android.net.Uri, boolean)" class="hiddenlink" target="rightframe"><b>openContactPhotoInputStream</b>
+(<code>ContentResolver, Uri, boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html#android.view.inputmethod.InputMethodSubtype.overridesImplicitlyEnabledSubtype_added()" class="hiddenlink" target="rightframe"><b>overridesImplicitlyEnabledSubtype</b>
+()</A></nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.opengl.Matrix.html#android.opengl.Matrix.perspectiveM_added(float[], int, float, float, float, float)" class="hiddenlink" target="rightframe"><b>perspectiveM</b>
+(<code>float[], int, float, float, float, float</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepare_changed()" class="hiddenlink" target="rightframe">prepare
+()</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepareMainLooper_changed()" class="hiddenlink" target="rightframe">prepareMainLooper
+()</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>readData</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<nobr><A HREF="android.os.RecoverySystem.html#android.os.RecoverySystem.rebootWipeCache_added(android.content.Context)" class="hiddenlink" target="rightframe"><b>rebootWipeCache</b>
+(<code>Context</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.recycle_changed()" class="hiddenlink" target="rightframe">recycle
+()</A></nobr><br>
+<nobr><A HREF="android.app.Application.html#android.app.Application.registerActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>registerActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.registerComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>registerComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.registerRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>registerRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<i>release</i><br>
+ <nobr><A HREF="android.graphics.SurfaceTexture.html#android.graphics.SurfaceTexture.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.graphics.SurfaceTexture
+</A></nobr><br>
+ <nobr><A HREF="android.view.Surface.html#android.view.Surface.release_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.Surface
+</A></nobr><br>
+<nobr><A HREF="java.lang.ref.ReferenceQueue.html#java.lang.ref.ReferenceQueue.remove_changed(long)" class="hiddenlink" target="rightframe">remove
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.removeAccessibilityStateChangeListener_added(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeAccessibilityStateChangeListener</b>
+(<code>AccessibilityStateChangeListener</code>)</A></nobr><br>
+<i>requestSendAccessibilityEvent</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewGroup
+</A></nobr><br>
+ <nobr><A HREF="android.view.ViewParent.html#android.view.ViewParent.requestSendAccessibilityEvent_added(android.view.View, android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe">type <b>
+(<code>View, AccessibilityEvent</code>)</b> in android.view.ViewParent
+</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedDrawables_added()" class="hiddenlink" target="rightframe"><b>resetResolvedDrawables</b>
+()</A></nobr><br>
+<i>resetResolvedLayoutDirection</i><br>
+ <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.view.ViewGroup
+</A></nobr><br>
+ <nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resetResolvedLayoutDirection_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.widget.TextView
+</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.resetResolvedTextDirection_added()" class="hiddenlink" target="rightframe"><b>resetResolvedTextDirection</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveDrawables_added()" class="hiddenlink" target="rightframe"><b>resolveDrawables</b>
+()</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.resolveTextDirection_added()" class="hiddenlink" target="rightframe"><b>resolveTextDirection</b>
+()</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.PendingIntent.html#android.app.PendingIntent.send_added(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>send</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<nobr><A HREF="android.content.IntentSender.html#android.content.IntentSender.sendIntent_added(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String)" class="hiddenlink" target="rightframe"><b>sendIntent</b>
+(<code>Context, int, Intent, OnFinished, Handler, String</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setAccessibilityDelegate_added(android.view.View.AccessibilityDelegate)" class="hiddenlink" target="rightframe"><b>setAccessibilityDelegate</b>
+(<code>AccessibilityDelegate</code>)</A></nobr><br>
+<i>setAccessible</i><br>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(java.lang.reflect.AccessibleObject[], boolean)" class="hiddenlink" target="rightframe">type
+(<code>AccessibleObject[], boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setActionProvider_added(android.view.ActionProvider)" class="hiddenlink" target="rightframe"><b>setActionProvider</b>
+(<code>ActionProvider</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setAddedCount_changed(int)" class="hiddenlink" target="rightframe">setAddedCount
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.setAdditionalInputMethodSubtypes_added(java.lang.String, android.view.inputmethod.InputMethodSubtype[])" class="hiddenlink" target="rightframe"><b>setAdditionalInputMethodSubtypes</b>
+(<code>String, InputMethodSubtype[]</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.TextView.html#android.widget.TextView.setAllCaps_added(boolean)" class="hiddenlink" target="rightframe"><b>setAllCaps</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setAlpha_removed(float)" class="hiddenlink" target="rightframe"><strike>setAlpha</strike>
+(<code>float</code>)</A></nobr><br>
+<nobr><A HREF="android.animation.LayoutTransition.html#android.animation.LayoutTransition.setAnimateParentHierarchy_added(boolean)" class="hiddenlink" target="rightframe"><b>setAnimateParentHierarchy</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoExposureLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoExposureLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setAutoWhiteBalanceLock_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoWhiteBalanceLock</b>
+(<code>boolean</code>)</A></nobr><br>
+<i>setAuxiliaryOutputFile</i><br>
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.io.FileDescriptor)" class="hiddenlink" target="rightframe">type
+(<code>FileDescriptor</code>) in android.media.MediaRecorder
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.lang.String)" class="hiddenlink" target="rightframe">type
+(<code>String</code>) in android.media.MediaRecorder
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setBeforeText_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setBeforeText
+(<code>CharSequence</code>)</A></nobr><br>
+<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setCameraDisabled_added(android.content.ComponentName, boolean)" class="hiddenlink" target="rightframe"><b>setCameraDisabled</b>
+(<code>ComponentName, boolean</code>)</A></nobr><br>
+<i>setChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setClassName_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setClassName
+(<code>CharSequence</code>)</A></nobr><br>
+<i>setContentDescription</i><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+ <nobr><A HREF="android.app.ActionBar.Tab.html#android.app.ActionBar.Tab.setContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.app.ActionBar.Tab
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setContentDescription_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type
+(<code>CharSequence</code>) in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setCurrentItemIndex_changed(int)" class="hiddenlink" target="rightframe">setCurrentItemIndex
+(<code>int</code>)</A></nobr><br>
+<i>setDataSource</i><br>
+ <nobr><A HREF="android.media.MediaMetadataRetriever.html#android.media.MediaMetadataRetriever.setDataSource_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>String, Map<String, String></code>)</b> in android.media.MediaMetadataRetriever
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_removed(java.lang.String)" class="hiddenlink" target="rightframe">type <strike>
+(<code>String</code>)</strike> in android.media.MediaPlayer
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, Uri, Map<String, String></code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_added(java.lang.String)" class="hiddenlink" target="rightframe">type <b>
+(<code>String</code>)</b> in android.media.MediaPlayer
+</A></nobr><br>
+<nobr><A HREF="android.view.Window.html#android.view.Window.setDimAmount_added(float)" class="hiddenlink" target="rightframe"><b>setDimAmount</b>
+(<code>float</code>)</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setDisableDependentsState_changed(boolean)" class="hiddenlink" target="rightframe">setDisableDependentsState
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.LinearLayout.html#android.widget.LinearLayout.setDividerPadding_added(int)" class="hiddenlink" target="rightframe"><b>setDividerPadding</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setEnabled_changed(boolean)" class="hiddenlink" target="rightframe">setEnabled
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="java.util.logging.Handler.html#java.util.logging.Handler.setEncoding_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEncoding
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.setEngineByPackageName_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEngineByPackageName
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.setFaceDetectionListener_added(android.hardware.Camera.FaceDetectionListener)" class="hiddenlink" target="rightframe"><b>setFaceDetectionListener</b>
+(<code>FaceDetectionListener</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setFitsSystemWindows_added(boolean)" class="hiddenlink" target="rightframe"><b>setFitsSystemWindows</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFlags_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setFlags</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setFocusAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setFocusAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFreezeTint_removed(int)" class="hiddenlink" target="rightframe"><strike>setFreezeTint</strike>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFromIndex_changed(int)" class="hiddenlink" target="rightframe">setFromIndex
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFullScreen_changed(boolean)" class="hiddenlink" target="rightframe">setFullScreen
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.graphics.Paint.html#android.graphics.Paint.setHinting_added(int)" class="hiddenlink" target="rightframe"><b>setHinting</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setHomeButtonEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setHomeButtonEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setHovered_added(boolean)" class="hiddenlink" target="rightframe"><b>setHovered</b>
+(<code>boolean</code>)</A></nobr><br>
+<i>setIcon</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setIcon_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setImeOptions_added(int)" class="hiddenlink" target="rightframe"><b>setImeOptions</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.SearchView.html#android.widget.SearchView.setInputType_added(int)" class="hiddenlink" target="rightframe"><b>setInputType</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setItemCount_changed(int)" class="hiddenlink" target="rightframe">setItemCount
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setKeyManagers_added(javax.net.ssl.KeyManager[])" class="hiddenlink" target="rightframe"><b>setKeyManagers</b>
+(<code>KeyManager[]</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setLayer_removed(int)" class="hiddenlink" target="rightframe"><strike>setLayer</strike>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setLocation_added(float, float)" class="hiddenlink" target="rightframe"><b>setLocation</b>
+(<code>float, float</code>)</A></nobr><br>
+<i>setLogo</i><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+ <nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setLogo_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.app.ActionBar
+</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setMatrix_removed(float, float, float, float)" class="hiddenlink" target="rightframe"><strike>setMatrix</strike>
+(<code>float, float, float, float</code>)</A></nobr><br>
+<nobr><A HREF="android.app.Fragment.html#android.app.Fragment.setMenuVisibility_added(boolean)" class="hiddenlink" target="rightframe"><b>setMenuVisibility</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setMeteringAreas_added(java.util.List<android.hardware.Camera.Area>)" class="hiddenlink" target="rightframe"><b>setMeteringAreas</b>
+(<code>List<Area></code>)</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessage_added(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessage</b>
+(<code>NdefMessage, Activity, </code>)</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setNdefPushMessageCallback_added(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setNdefPushMessageCallback</b>
+(<code>CreateNdefMessageCallback, Activity, </code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setOnActionExpandListener_added(android.view.MenuItem.OnActionExpandListener)" class="hiddenlink" target="rightframe"><b>setOnActionExpandListener</b>
+(<code>OnActionExpandListener</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.PopupMenu.html#android.widget.PopupMenu.setOnDismissListener_added(android.widget.PopupMenu.OnDismissListener)" class="hiddenlink" target="rightframe"><b>setOnDismissListener</b>
+(<code>OnDismissListener</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setOnHoverListener_added(android.view.View.OnHoverListener)" class="hiddenlink" target="rightframe"><b>setOnHoverListener</b>
+(<code>OnHoverListener</code>)</A></nobr><br>
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.setOnNdefPushCompleteCallback_added(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...)" class="hiddenlink" target="rightframe"><b>setOnNdefPushCompleteCallback</b>
+(<code>OnNdefPushCompleteCallback, Activity, </code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setOrientation_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setOrientation</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setParcelableData_changed(android.os.Parcelable)" class="hiddenlink" target="rightframe">setParcelableData
+(<code>Parcelable</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setPassword_changed(boolean)" class="hiddenlink" target="rightframe">setPassword
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setPosition_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setPosition</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.Notification.Builder.html#android.app.Notification.Builder.setProgress_added(int, int, boolean)" class="hiddenlink" target="rightframe"><b>setProgress</b>
+(<code>int, int, boolean</code>)</A></nobr><br>
+<i>setProperty</i><br>
+ <nobr><A HREF="android.animation.ObjectAnimator.html#android.animation.ObjectAnimator.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.ObjectAnimator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html#android.animation.PropertyValuesHolder.setProperty_added(android.util.Property)" class="hiddenlink" target="rightframe">type <b>
+(<code>Property</code>)</b> in android.animation.PropertyValuesHolder
+</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setRecordingHint_added(boolean)" class="hiddenlink" target="rightframe"><b>setRecordingHint</b>
+(<code>boolean</code>)</A></nobr><br>
+<i>setRemoteAdapter</i><br>
+ <nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_added(int, android.content.Intent)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, Intent</code>)</b> in android.widget.RemoteViews
+</A></nobr><br>
+ <nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_changed(int, int, android.content.Intent)" class="hiddenlink" target="rightframe">type
+(<code>int, int, Intent</code>) in android.widget.RemoteViews
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setRemovedCount_changed(int)" class="hiddenlink" target="rightframe">setRemovedCount
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollX_added(int)" class="hiddenlink" target="rightframe"><b>setScrollX</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.setScrollY_added(int)" class="hiddenlink" target="rightframe"><b>setScrollY</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.MenuItem.html#android.view.MenuItem.setShowAsActionFlags_added(int)" class="hiddenlink" target="rightframe"><b>setShowAsActionFlags</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setSize_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setSize</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setSplitBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setSplitBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<nobr><A HREF="android.app.ActionBar.html#android.app.ActionBar.setStackedBackgroundDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>setStackedBackgroundDrawable</b>
+(<code>Drawable</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.setStartDelay_added(long)" class="hiddenlink" target="rightframe"><b>setStartDelay</b>
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.database.sqlite.SQLiteQueryBuilder.html#android.database.sqlite.SQLiteQueryBuilder.setStrict_added(boolean)" class="hiddenlink" target="rightframe"><b>setStrict</b>
+(<code>boolean</code>)</A></nobr><br>
+<i>setSummaryOff</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<i>setSummaryOn</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setSurface_added(android.view.Surface)" class="hiddenlink" target="rightframe"><b>setSurface</b>
+(<code>Surface</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.RenderScriptGL.html#android.renderscript.RenderScriptGL.setSurfaceTexture_added(android.graphics.SurfaceTexture, int, int)" class="hiddenlink" target="rightframe"><b>setSurfaceTexture</b>
+(<code>SurfaceTexture, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ActionMode.html#android.view.ActionMode.setTag_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>setTag</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextSize_changed(android.webkit.WebSettings.TextSize)" class="hiddenlink" target="rightframe">setTextSize
+(<code>TextSize</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextZoom_added(int)" class="hiddenlink" target="rightframe"><b>setTextZoom</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.setThreadStatsTag_added(int)" class="hiddenlink" target="rightframe"><b>setThreadStatsTag</b>
+(<code>int</code>)</A></nobr><br>
+<i>setTimeout</i><br>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html#android.nfc.tech.MifareClassic.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareClassic
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html#android.nfc.tech.MifareUltralight.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.MifareUltralight
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcA.html#android.nfc.tech.NfcA.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcA
+</A></nobr><br>
+ <nobr><A HREF="android.nfc.tech.NfcF.html#android.nfc.tech.NfcF.setTimeout_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.nfc.tech.NfcF
+</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setTransparentRegionHint_removed(android.graphics.Region)" class="hiddenlink" target="rightframe"><strike>setTransparentRegionHint</strike>
+(<code>Region</code>)</A></nobr><br>
+<nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.setTrustManagers_added(javax.net.ssl.TrustManager[])" class="hiddenlink" target="rightframe"><b>setTrustManagers</b>
+(<code>TrustManager[]</code>)</A></nobr><br>
+<i>setUiOptions</i><br>
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.view.Window
+</A></nobr><br>
+ <nobr><A HREF="android.view.Window.html#android.view.Window.setUiOptions_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.view.Window
+</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.shouldDelayChildPressedState_added()" class="hiddenlink" target="rightframe"><b>shouldDelayChildPressedState</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.show_removed()" class="hiddenlink" target="rightframe"><strike>show</strike>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewPropertyAnimator.html#android.view.ViewPropertyAnimator.start_added()" class="hiddenlink" target="rightframe"><b>start</b>
+()</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.startFaceDetection_added()" class="hiddenlink" target="rightframe"><b>startFaceDetection</b>
+()</A></nobr><br>
+<nobr><A HREF="android.preference.PreferenceActivity.html#android.preference.PreferenceActivity.startWithFragment_added(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int)" class="hiddenlink" target="rightframe"><b>startWithFragment</b>
+(<code>String, Bundle, Fragment, int, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.hardware.Camera.html#android.hardware.Camera.stopFaceDetection_added()" class="hiddenlink" target="rightframe"><b>stopFaceDetection</b>
+()</A></nobr><br>
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData_removed(int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subData</strike>
+(<code>int, FieldPacker</code>)</A></nobr><br>
+<i>subData1D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, byte[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, byte[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, short[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, short[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<i>subData2D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subElementData_removed(int, int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subElementData</strike>
+(<code>int, int, FieldPacker</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Process.html#android.os.Process.supportsProcesses_changed()" class="hiddenlink" target="rightframe">supportsProcesses
+()</A></nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.tagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>tagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<nobr><A HREF="android.graphics.RectF.html#android.graphics.RectF.toShortString_added()" class="hiddenlink" target="rightframe"><b>toShortString</b>
+()</A></nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U16_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U16_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U32_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U32_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U64_4_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U64_4</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_2_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_2</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.renderscript.Element.html#android.renderscript.Element.U8_3_added(android.renderscript.RenderScript)" class="hiddenlink" target="rightframe"><b>U8_3</b>
+(<code>RenderScript</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.unfreeze_removed()" class="hiddenlink" target="rightframe"><strike>unfreeze</strike>
+()</A></nobr><br>
+<nobr><A HREF="android.app.Application.html#android.app.Application.unregisterActivityLifecycleCallbacks_added(android.app.Application.ActivityLifecycleCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterActivityLifecycleCallbacks</b>
+(<code>ActivityLifecycleCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.content.Context.html#android.content.Context.unregisterComponentCallbacks_added(android.content.ComponentCallbacks)" class="hiddenlink" target="rightframe"><b>unregisterComponentCallbacks</b>
+(<code>ComponentCallbacks</code>)</A></nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.unregisterRemoteControlClient_added(android.media.RemoteControlClient)" class="hiddenlink" target="rightframe"><b>unregisterRemoteControlClient</b>
+(<code>RemoteControlClient</code>)</A></nobr><br>
+<nobr><A HREF="android.net.TrafficStats.html#android.net.TrafficStats.untagSocket_added(java.net.Socket)" class="hiddenlink" target="rightframe"><b>untagSocket</b>
+(<code>Socket</code>)</A></nobr><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>verifyPendingInstall</i><br>
+ <nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.content.pm.PackageManager
+</A></nobr><br>
+ <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.verifyPendingInstall_added(int, int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int</code>)</b> in android.test.mock.MockPackageManager
+</A></nobr><br>
+<i>viewClicked</i><br>
+ <nobr><A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html#android.inputmethodservice.InputMethodService.InputMethodSessionImpl.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.inputmethodservice.InputMethodService.InputMethodSessionImpl
+</A></nobr><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodManager.html#android.view.inputmethod.InputMethodManager.viewClicked_added(android.view.View)" class="hiddenlink" target="rightframe">type <b>
+(<code>View</code>)</b> in android.view.inputmethod.InputMethodManager
+</A></nobr><br>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSession.html#android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>boolean</code>)</b> in android.view.inputmethod.InputMethodSession
+</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_changes.html b/docs/html/sdk/api_diff/14/changes/methods_index_changes.html
new file mode 100644
index 0000000..73a7207
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_changes.html
@@ -0,0 +1,465 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<A HREF="methods_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>clone</i><br>
+ <nobr><A HREF="android.util.SparseArray.html#android.util.SparseArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseArray
+</A></nobr><br>
+ <nobr><A HREF="android.util.SparseBooleanArray.html#android.util.SparseBooleanArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseBooleanArray
+</A></nobr><br>
+ <nobr><A HREF="android.util.SparseIntArray.html#android.util.SparseIntArray.clone_changed()" class="hiddenlink" target="rightframe">type
+() in android.util.SparseIntArray
+</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.disableForegroundNdefPush_changed(android.app.Activity)" class="hiddenlink" target="rightframe">disableForegroundNdefPush
+(<code>Activity</code>)</A></nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.nfc.NfcAdapter.html#android.nfc.NfcAdapter.enableForegroundNdefPush_changed(android.app.Activity, android.nfc.NdefMessage)" class="hiddenlink" target="rightframe">enableForegroundNdefPush
+(<code>Activity, NdefMessage</code>)</A></nobr><br>
+<nobr><A HREF="java.io.ObjectOutputStream.html#java.io.ObjectOutputStream.enableReplaceObject_changed(boolean)" class="hiddenlink" target="rightframe">enableReplaceObject
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="java.io.ObjectInputStream.html#java.io.ObjectInputStream.enableResolveObject_changed(boolean)" class="hiddenlink" target="rightframe">enableResolveObject
+(<code>boolean</code>)</A></nobr><br>
+<i>equals</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.io.FilePermission
+</A></nobr><br>
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.net.SocketPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.AllPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.BasicPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.Permission
+</A></nobr><br>
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in java.security.UnresolvedPermission
+</A></nobr><br>
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.equals_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<i>evaluate</i><br>
+ <nobr><A HREF="android.animation.FloatEvaluator.html#android.animation.FloatEvaluator.evaluate_changed(float, java.lang.Number, java.lang.Number)" class="hiddenlink" target="rightframe">type
+(<code>float, Number, Number</code>) in android.animation.FloatEvaluator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.IntEvaluator.html#android.animation.IntEvaluator.evaluate_changed(float, java.lang.Integer, java.lang.Integer)" class="hiddenlink" target="rightframe">type
+(<code>float, Integer, Integer</code>) in android.animation.IntEvaluator
+</A></nobr><br>
+ <nobr><A HREF="android.animation.TypeEvaluator.html#android.animation.TypeEvaluator.evaluate_changed(float, T, T)" class="hiddenlink" target="rightframe">type
+(<code>float, T, T</code>) in android.animation.TypeEvaluator
+</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="dalvik.system.PathClassLoader.html#dalvik.system.PathClassLoader.findLibrary_changed(java.lang.String)" class="hiddenlink" target="rightframe">findLibrary
+(<code>String</code>)</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityManager.html#android.view.accessibility.AccessibilityManager.getAccessibilityServiceList_changed()" class="hiddenlink" target="rightframe">getAccessibilityServiceList
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getAddedCount_changed()" class="hiddenlink" target="rightframe">getAddedCount
+()</A></nobr><br>
+<nobr><A HREF="android.accounts.AccountManager.html#android.accounts.AccountManager.getAuthToken_changed(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler)" class="hiddenlink" target="rightframe">getAuthToken
+(<code>Account, String, boolean, AccountManagerCallback<Bundle>, Handler</code>)</A></nobr><br>
+<nobr><A HREF="android.net.ConnectivityManager.html#android.net.ConnectivityManager.getBackgroundDataSetting_changed()" class="hiddenlink" target="rightframe">getBackgroundDataSetting
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getBeforeText_changed()" class="hiddenlink" target="rightframe">getBeforeText
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getClassName_changed()" class="hiddenlink" target="rightframe">getClassName
+()</A></nobr><br>
+<nobr><A HREF="android.widget.FrameLayout.html#android.widget.FrameLayout.getConsiderGoneChildrenWhenMeasuring_changed()" class="hiddenlink" target="rightframe">getConsiderGoneChildrenWhenMeasuring
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getConstructors_changed()" class="hiddenlink" target="rightframe">getConstructors
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getContentDescription_changed()" class="hiddenlink" target="rightframe">getContentDescription
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getCurrentItemIndex_changed()" class="hiddenlink" target="rightframe">getCurrentItemIndex
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredClasses_changed()" class="hiddenlink" target="rightframe">getDeclaredClasses
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructor_changed(java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredConstructor
+(<code>Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredConstructors_changed()" class="hiddenlink" target="rightframe">getDeclaredConstructors
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getDeclaredField
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredFields_changed()" class="hiddenlink" target="rightframe">getDeclaredFields
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getDeclaredMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getDeclaredMethods_changed()" class="hiddenlink" target="rightframe">getDeclaredMethods
+()</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getDisableDependentsState_changed()" class="hiddenlink" target="rightframe">getDisableDependentsState
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getField_changed(java.lang.String)" class="hiddenlink" target="rightframe">getField
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getFields_changed()" class="hiddenlink" target="rightframe">getFields
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getFromIndex_changed()" class="hiddenlink" target="rightframe">getFromIndex
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getItemCount_changed()" class="hiddenlink" target="rightframe">getItemCount
+()</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.getMainLooper_changed()" class="hiddenlink" target="rightframe">getMainLooper
+()</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethod_changed(java.lang.String, java.lang.Class<?>...)" class="hiddenlink" target="rightframe">getMethod
+(<code>String, Class<?></code>)</A></nobr><br>
+<nobr><A HREF="java.lang.Class.html#java.lang.Class.getMethods_changed()" class="hiddenlink" target="rightframe">getMethods
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getParcelableData_changed()" class="hiddenlink" target="rightframe">getParcelableData
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getRemovedCount_changed()" class="hiddenlink" target="rightframe">getRemovedCount
+()</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOff_changed()" class="hiddenlink" target="rightframe">getSummaryOff
+()</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.getSummaryOn_changed()" class="hiddenlink" target="rightframe">getSummaryOn
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.getText_changed()" class="hiddenlink" target="rightframe">getText
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getTextSize_changed()" class="hiddenlink" target="rightframe">getTextSize
+()</A></nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>hashCode</i><br>
+ <nobr><A HREF="java.io.FilePermission.html#java.io.FilePermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.io.FilePermission
+</A></nobr><br>
+ <nobr><A HREF="java.net.SocketPermission.html#java.net.SocketPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.net.SocketPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.AllPermission.html#java.security.AllPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.AllPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.BasicPermission.html#java.security.BasicPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.BasicPermission
+</A></nobr><br>
+ <nobr><A HREF="java.security.Permission.html#java.security.Permission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.Permission
+</A></nobr><br>
+ <nobr><A HREF="java.security.UnresolvedPermission.html#java.security.UnresolvedPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in java.security.UnresolvedPermission
+</A></nobr><br>
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html#javax.security.auth.PrivateCredentialPermission.hashCode_changed()" class="hiddenlink" target="rightframe">type
+() in javax.security.auth.PrivateCredentialPermission
+</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>isChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isChecked_changed()" class="hiddenlink" target="rightframe">type
+() in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isEnabled_changed()" class="hiddenlink" target="rightframe">isEnabled
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isFullScreen_changed()" class="hiddenlink" target="rightframe">isFullScreen
+()</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.isPassword_changed()" class="hiddenlink" target="rightframe">isPassword
+()</A></nobr><br>
+<nobr><A HREF="android.media.AudioManager.html#android.media.AudioManager.isWiredHeadsetOn_changed()" class="hiddenlink" target="rightframe">isWiredHeadsetOn
+()</A></nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.loop_changed()" class="hiddenlink" target="rightframe">loop
+()</A></nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myLooper_changed()" class="hiddenlink" target="rightframe">myLooper
+()</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.myQueue_changed()" class="hiddenlink" target="rightframe">myQueue
+()</A></nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepare_changed()" class="hiddenlink" target="rightframe">prepare
+()</A></nobr><br>
+<nobr><A HREF="android.os.Looper.html#android.os.Looper.prepareMainLooper_changed()" class="hiddenlink" target="rightframe">prepareMainLooper
+()</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.recycle_changed()" class="hiddenlink" target="rightframe">recycle
+()</A></nobr><br>
+<nobr><A HREF="java.lang.ref.ReferenceQueue.html#java.lang.ref.ReferenceQueue.remove_changed(long)" class="hiddenlink" target="rightframe">remove
+(<code>long</code>)</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>setAccessible</i><br>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(java.lang.reflect.AccessibleObject[], boolean)" class="hiddenlink" target="rightframe">type
+(<code>AccessibleObject[], boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html#java.lang.reflect.AccessibleObject.setAccessible_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in java.lang.reflect.AccessibleObject
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setAddedCount_changed(int)" class="hiddenlink" target="rightframe">setAddedCount
+(<code>int</code>)</A></nobr><br>
+<i>setAuxiliaryOutputFile</i><br>
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.io.FileDescriptor)" class="hiddenlink" target="rightframe">type
+(<code>FileDescriptor</code>) in android.media.MediaRecorder
+</A></nobr><br>
+ <nobr><A HREF="android.media.MediaRecorder.html#android.media.MediaRecorder.setAuxiliaryOutputFile_changed(java.lang.String)" class="hiddenlink" target="rightframe">type
+(<code>String</code>) in android.media.MediaRecorder
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setBeforeText_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setBeforeText
+(<code>CharSequence</code>)</A></nobr><br>
+<i>setChecked</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setChecked_changed(boolean)" class="hiddenlink" target="rightframe">type
+(<code>boolean</code>) in android.view.accessibility.AccessibilityEvent
+</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setClassName_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setClassName
+(<code>CharSequence</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setContentDescription_changed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">setContentDescription
+(<code>CharSequence</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setCurrentItemIndex_changed(int)" class="hiddenlink" target="rightframe">setCurrentItemIndex
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setDisableDependentsState_changed(boolean)" class="hiddenlink" target="rightframe">setDisableDependentsState
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setEnabled_changed(boolean)" class="hiddenlink" target="rightframe">setEnabled
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="java.util.logging.Handler.html#java.util.logging.Handler.setEncoding_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEncoding
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.setEngineByPackageName_changed(java.lang.String)" class="hiddenlink" target="rightframe">setEngineByPackageName
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFromIndex_changed(int)" class="hiddenlink" target="rightframe">setFromIndex
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setFullScreen_changed(boolean)" class="hiddenlink" target="rightframe">setFullScreen
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setItemCount_changed(int)" class="hiddenlink" target="rightframe">setItemCount
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setParcelableData_changed(android.os.Parcelable)" class="hiddenlink" target="rightframe">setParcelableData
+(<code>Parcelable</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setPassword_changed(boolean)" class="hiddenlink" target="rightframe">setPassword
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.setRemoteAdapter_changed(int, int, android.content.Intent)" class="hiddenlink" target="rightframe">setRemoteAdapter
+(<code>int, int, Intent</code>)</A></nobr><br>
+<nobr><A HREF="android.view.accessibility.AccessibilityEvent.html#android.view.accessibility.AccessibilityEvent.setRemovedCount_changed(int)" class="hiddenlink" target="rightframe">setRemovedCount
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setTextSize_changed(android.webkit.WebSettings.TextSize)" class="hiddenlink" target="rightframe">setTextSize
+(<code>TextSize</code>)</A></nobr><br>
+<nobr><A HREF="android.os.Process.html#android.os.Process.supportsProcesses_changed()" class="hiddenlink" target="rightframe">supportsProcesses
+()</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_removals.html b/docs/html/sdk/api_diff/14/changes/methods_index_removals.html
new file mode 100644
index 0000000..1faf343
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_removals.html
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.freeze_removed()" class="hiddenlink" target="rightframe"><strike>freeze</strike>
+()</A></nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.hide_removed()" class="hiddenlink" target="rightframe"><strike>hide</strike>
+()</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.MotionEvent.html#android.view.MotionEvent.obtain_removed(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int)" class="hiddenlink" target="rightframe"><strike>obtain</strike>
+(<code>long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>readData</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.readData_removed(int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setAlpha_removed(float)" class="hiddenlink" target="rightframe"><strike>setAlpha</strike>
+(<code>float</code>)</A></nobr><br>
+<nobr><A HREF="android.media.MediaPlayer.html#android.media.MediaPlayer.setDataSource_removed(java.lang.String)" class="hiddenlink" target="rightframe"><strike>setDataSource</strike>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFlags_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setFlags</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setFreezeTint_removed(int)" class="hiddenlink" target="rightframe"><strike>setFreezeTint</strike>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setLayer_removed(int)" class="hiddenlink" target="rightframe"><strike>setLayer</strike>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setMatrix_removed(float, float, float, float)" class="hiddenlink" target="rightframe"><strike>setMatrix</strike>
+(<code>float, float, float, float</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setOrientation_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setOrientation</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setPosition_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setPosition</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setSize_removed(int, int)" class="hiddenlink" target="rightframe"><strike>setSize</strike>
+(<code>int, int</code>)</A></nobr><br>
+<i>setSummaryOff</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOff_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<i>setSummaryOn</i><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(int)" class="hiddenlink" target="rightframe">type <strike>
+(<code>int</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html#android.preference.CheckBoxPreference.setSummaryOn_removed(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <strike>
+(<code>CharSequence</code>)</strike> in android.preference.CheckBoxPreference
+</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.setTransparentRegionHint_removed(android.graphics.Region)" class="hiddenlink" target="rightframe"><strike>setTransparentRegionHint</strike>
+(<code>Region</code>)</A></nobr><br>
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.show_removed()" class="hiddenlink" target="rightframe"><strike>show</strike>
+()</A></nobr><br>
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData_removed(int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subData</strike>
+(<code>int, FieldPacker</code>)</A></nobr><br>
+<i>subData1D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, byte[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, byte[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData1D_removed(int, int, short[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, short[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<i>subData2D</i><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, float[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, float[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subData2D_removed(int, int, int, int, int[])" class="hiddenlink" target="rightframe">type <strike>
+(<code>int, int, int, int, int[]</code>)</strike> in android.renderscript.AllocationAdapter
+</A></nobr><br>
+<nobr><A HREF="android.renderscript.AllocationAdapter.html#android.renderscript.AllocationAdapter.subElementData_removed(int, int, android.renderscript.FieldPacker)" class="hiddenlink" target="rightframe"><strike>subElementData</strike>
+(<code>int, int, FieldPacker</code>)</A></nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.view.Surface.html#android.view.Surface.unfreeze_removed()" class="hiddenlink" target="rightframe"><strike>unfreeze</strike>
+()</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_additions.html b/docs/html/sdk/api_diff/14/changes/packages_index_additions.html
new file mode 100644
index 0000000..04ac28c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_additions.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="changes-summary.html#android.media.effect" class="hiddenlink" target="rightframe"><b>android.media.effect</b></A><br>
+<A HREF="changes-summary.html#android.net.wifi.p2p" class="hiddenlink" target="rightframe"><b>android.net.wifi.p2p</b></A><br>
+<A HREF="changes-summary.html#android.security" class="hiddenlink" target="rightframe"><b>android.security</b></A><br>
+<A HREF="changes-summary.html#android.service.textservice" class="hiddenlink" target="rightframe"><b>android.service.textservice</b></A><br>
+<A HREF="changes-summary.html#android.view.textservice" class="hiddenlink" target="rightframe"><b>android.view.textservice</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_all.html b/docs/html/sdk/api_diff/14/changes/packages_index_all.html
new file mode 100644
index 0000000..8aa185d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_all.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Packages</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<A HREF="pkg_android.accessibilityservice.html" class="hiddenlink" target="rightframe">android.accessibilityservice</A><br>
+<A HREF="pkg_android.accounts.html" class="hiddenlink" target="rightframe">android.accounts</A><br>
+<A HREF="pkg_android.animation.html" class="hiddenlink" target="rightframe">android.animation</A><br>
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<A HREF="pkg_android.app.admin.html" class="hiddenlink" target="rightframe">android.app.admin</A><br>
+<A HREF="pkg_android.app.backup.html" class="hiddenlink" target="rightframe">android.app.backup</A><br>
+<A HREF="pkg_android.appwidget.html" class="hiddenlink" target="rightframe">android.appwidget</A><br>
+<A HREF="pkg_android.bluetooth.html" class="hiddenlink" target="rightframe">android.bluetooth</A><br>
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<A HREF="pkg_android.database.sqlite.html" class="hiddenlink" target="rightframe">android.database.sqlite</A><br>
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<A HREF="pkg_android.hardware.html" class="hiddenlink" target="rightframe">android.hardware</A><br>
+<A HREF="pkg_android.inputmethodservice.html" class="hiddenlink" target="rightframe">android.inputmethodservice</A><br>
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<A HREF="changes-summary.html#android.media.effect" class="hiddenlink" target="rightframe"><b>android.media.effect</b></A><br>
+<A HREF="pkg_android.net.html" class="hiddenlink" target="rightframe">android.net</A><br>
+<A HREF="pkg_android.net.http.html" class="hiddenlink" target="rightframe">android.net.http</A><br>
+<A HREF="pkg_android.net.wifi.html" class="hiddenlink" target="rightframe">android.net.wifi</A><br>
+<A HREF="changes-summary.html#android.net.wifi.p2p" class="hiddenlink" target="rightframe"><b>android.net.wifi.p2p</b></A><br>
+<A HREF="pkg_android.nfc.html" class="hiddenlink" target="rightframe">android.nfc</A><br>
+<A HREF="pkg_android.nfc.tech.html" class="hiddenlink" target="rightframe">android.nfc.tech</A><br>
+<A HREF="pkg_android.opengl.html" class="hiddenlink" target="rightframe">android.opengl</A><br>
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<A HREF="pkg_android.preference.html" class="hiddenlink" target="rightframe">android.preference</A><br>
+<A HREF="pkg_android.provider.html" class="hiddenlink" target="rightframe">android.provider</A><br>
+<A HREF="pkg_android.renderscript.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<A HREF="changes-summary.html#android.security" class="hiddenlink" target="rightframe"><b>android.security</b></A><br>
+<A HREF="changes-summary.html#android.service.textservice" class="hiddenlink" target="rightframe"><b>android.service.textservice</b></A><br>
+<A HREF="pkg_android.service.wallpaper.html" class="hiddenlink" target="rightframe">android.service.wallpaper</A><br>
+<A HREF="pkg_android.speech.html" class="hiddenlink" target="rightframe">android.speech</A><br>
+<A HREF="pkg_android.speech.tts.html" class="hiddenlink" target="rightframe">android.speech.tts</A><br>
+<A HREF="pkg_android.test.mock.html" class="hiddenlink" target="rightframe">android.test.mock</A><br>
+<A HREF="pkg_android.text.html" class="hiddenlink" target="rightframe">android.text</A><br>
+<A HREF="pkg_android.text.style.html" class="hiddenlink" target="rightframe">android.text.style</A><br>
+<A HREF="pkg_android.util.html" class="hiddenlink" target="rightframe">android.util</A><br>
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<A HREF="pkg_android.view.accessibility.html" class="hiddenlink" target="rightframe">android.view.accessibility</A><br>
+<A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
+<A HREF="changes-summary.html#android.view.textservice" class="hiddenlink" target="rightframe"><b>android.view.textservice</b></A><br>
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<A NAME="D"></A>
+<A HREF="pkg_dalvik.annotation.html" class="hiddenlink" target="rightframe">dalvik.annotation</A><br>
+<A HREF="pkg_dalvik.system.html" class="hiddenlink" target="rightframe">dalvik.system</A><br>
+<A NAME="J"></A>
+<A HREF="pkg_java.io.html" class="hiddenlink" target="rightframe">java.io</A><br>
+<A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
+<A HREF="pkg_java.lang.ref.html" class="hiddenlink" target="rightframe">java.lang.ref</A><br>
+<A HREF="pkg_java.lang.reflect.html" class="hiddenlink" target="rightframe">java.lang.reflect</A><br>
+<A HREF="pkg_java.net.html" class="hiddenlink" target="rightframe">java.net</A><br>
+<A HREF="pkg_java.security.html" class="hiddenlink" target="rightframe">java.security</A><br>
+<A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<A HREF="pkg_javax.security.auth.html" class="hiddenlink" target="rightframe">javax.security.auth</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_changes.html b/docs/html/sdk/api_diff/14/changes/packages_index_changes.html
new file mode 100644
index 0000000..f0e838c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_changes.html
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<A HREF="pkg_android.accessibilityservice.html" class="hiddenlink" target="rightframe">android.accessibilityservice</A><br>
+<A HREF="pkg_android.accounts.html" class="hiddenlink" target="rightframe">android.accounts</A><br>
+<A HREF="pkg_android.animation.html" class="hiddenlink" target="rightframe">android.animation</A><br>
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<A HREF="pkg_android.app.admin.html" class="hiddenlink" target="rightframe">android.app.admin</A><br>
+<A HREF="pkg_android.app.backup.html" class="hiddenlink" target="rightframe">android.app.backup</A><br>
+<A HREF="pkg_android.appwidget.html" class="hiddenlink" target="rightframe">android.appwidget</A><br>
+<A HREF="pkg_android.bluetooth.html" class="hiddenlink" target="rightframe">android.bluetooth</A><br>
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<A HREF="pkg_android.database.sqlite.html" class="hiddenlink" target="rightframe">android.database.sqlite</A><br>
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<A HREF="pkg_android.hardware.html" class="hiddenlink" target="rightframe">android.hardware</A><br>
+<A HREF="pkg_android.inputmethodservice.html" class="hiddenlink" target="rightframe">android.inputmethodservice</A><br>
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<A HREF="pkg_android.net.html" class="hiddenlink" target="rightframe">android.net</A><br>
+<A HREF="pkg_android.net.http.html" class="hiddenlink" target="rightframe">android.net.http</A><br>
+<A HREF="pkg_android.net.wifi.html" class="hiddenlink" target="rightframe">android.net.wifi</A><br>
+<A HREF="pkg_android.nfc.html" class="hiddenlink" target="rightframe">android.nfc</A><br>
+<A HREF="pkg_android.nfc.tech.html" class="hiddenlink" target="rightframe">android.nfc.tech</A><br>
+<A HREF="pkg_android.opengl.html" class="hiddenlink" target="rightframe">android.opengl</A><br>
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<A HREF="pkg_android.preference.html" class="hiddenlink" target="rightframe">android.preference</A><br>
+<A HREF="pkg_android.provider.html" class="hiddenlink" target="rightframe">android.provider</A><br>
+<A HREF="pkg_android.renderscript.html" class="hiddenlink" target="rightframe">android.renderscript</A><br>
+<A HREF="pkg_android.service.wallpaper.html" class="hiddenlink" target="rightframe">android.service.wallpaper</A><br>
+<A HREF="pkg_android.speech.html" class="hiddenlink" target="rightframe">android.speech</A><br>
+<A HREF="pkg_android.speech.tts.html" class="hiddenlink" target="rightframe">android.speech.tts</A><br>
+<A HREF="pkg_android.test.mock.html" class="hiddenlink" target="rightframe">android.test.mock</A><br>
+<A HREF="pkg_android.text.html" class="hiddenlink" target="rightframe">android.text</A><br>
+<A HREF="pkg_android.text.style.html" class="hiddenlink" target="rightframe">android.text.style</A><br>
+<A HREF="pkg_android.util.html" class="hiddenlink" target="rightframe">android.util</A><br>
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<A HREF="pkg_android.view.accessibility.html" class="hiddenlink" target="rightframe">android.view.accessibility</A><br>
+<A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<A NAME="D"></A>
+<A HREF="pkg_dalvik.annotation.html" class="hiddenlink" target="rightframe">dalvik.annotation</A><br>
+<A HREF="pkg_dalvik.system.html" class="hiddenlink" target="rightframe">dalvik.system</A><br>
+<A NAME="J"></A>
+<A HREF="pkg_java.io.html" class="hiddenlink" target="rightframe">java.io</A><br>
+<A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
+<A HREF="pkg_java.lang.ref.html" class="hiddenlink" target="rightframe">java.lang.ref</A><br>
+<A HREF="pkg_java.lang.reflect.html" class="hiddenlink" target="rightframe">java.lang.reflect</A><br>
+<A HREF="pkg_java.net.html" class="hiddenlink" target="rightframe">java.net</A><br>
+<A HREF="pkg_java.security.html" class="hiddenlink" target="rightframe">java.security</A><br>
+<A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
+<A HREF="pkg_javax.security.auth.html" class="hiddenlink" target="rightframe">javax.security.auth</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_removals.html b/docs/html/sdk/api_diff/14/changes/packages_index_removals.html
new file mode 100644
index 0000000..d0ffabc
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_removals.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html b/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
new file mode 100644
index 0000000..0ab9feb
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.accessibilityservice
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/accessibilityservice/package-summary.html" target="_top"><font size="+1"><code>android.accessibilityservice</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityService"></A>
+ <nobr><A HREF="android.accessibilityservice.AccessibilityService.html">AccessibilityService</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityServiceInfo"></A>
+ <nobr><A HREF="android.accessibilityservice.AccessibilityServiceInfo.html">AccessibilityServiceInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html
new file mode 100644
index 0000000..b19da2d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.accounts
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/accounts/package-summary.html" target="_top"><font size="+1"><code>android.accounts</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccountManager"></A>
+ <nobr><A HREF="android.accounts.AccountManager.html">AccountManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html b/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html
new file mode 100644
index 0000000..21148bf
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.animation
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/animation/package-summary.html" target="_top"><font size="+1"><code>android.animation</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Animator"></A>
+ <nobr><A HREF="android.animation.Animator.html">Animator</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FloatEvaluator"></A>
+ <nobr><A HREF="android.animation.FloatEvaluator.html">FloatEvaluator</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="IntEvaluator"></A>
+ <nobr><A HREF="android.animation.IntEvaluator.html">IntEvaluator</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LayoutTransition"></A>
+ <nobr><A HREF="android.animation.LayoutTransition.html">LayoutTransition</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ObjectAnimator"></A>
+ <nobr><A HREF="android.animation.ObjectAnimator.html">ObjectAnimator</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PropertyValuesHolder"></A>
+ <nobr><A HREF="android.animation.PropertyValuesHolder.html">PropertyValuesHolder</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TypeEvaluator"></A>
+ <nobr><A HREF="android.animation.TypeEvaluator.html"><I>TypeEvaluator</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html
new file mode 100644
index 0000000..4dfa032
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.admin
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/app/admin/package-summary.html" target="_top"><font size="+1"><code>android.app.admin</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DeviceAdminInfo"></A>
+ <nobr><A HREF="android.app.admin.DeviceAdminInfo.html">DeviceAdminInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DevicePolicyManager"></A>
+ <nobr><A HREF="android.app.admin.DevicePolicyManager.html">DevicePolicyManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html b/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html
new file mode 100644
index 0000000..dd5324b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.backup
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/app/backup/package-summary.html" target="_top"><font size="+1"><code>android.app.backup</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FullBackupDataOutput"></A>
+ <nobr><A HREF="../../../../reference/android/app/backup/FullBackupDataOutput.html" target="_top"><code>FullBackupDataOutput</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BackupAgent"></A>
+ <nobr><A HREF="android.app.backup.BackupAgent.html">BackupAgent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.app.html b/docs/html/sdk/api_diff/14/changes/pkg_android.app.html
new file mode 100644
index 0000000..8e6d724
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.app.html
@@ -0,0 +1,253 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/app/package-summary.html" target="_top"><font size="+1"><code>android.app</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Application.ActivityLifecycleCallbacks"></A>
+ <nobr><A HREF="../../../../reference/android/app/Application.ActivityLifecycleCallbacks.html" target="_top"><code><I>Application.ActivityLifecycleCallbacks</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ApplicationErrorReport"></A>
+ <nobr><A HREF="../../../../reference/android/app/ApplicationErrorReport.html" target="_top"><code>ApplicationErrorReport</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ApplicationErrorReport.AnrInfo"></A>
+ <nobr><A HREF="../../../../reference/android/app/ApplicationErrorReport.AnrInfo.html" target="_top"><code>ApplicationErrorReport.<br>AnrInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ApplicationErrorReport.BatteryInfo"></A>
+ <nobr><A HREF="../../../../reference/android/app/ApplicationErrorReport.BatteryInfo.html" target="_top"><code>ApplicationErrorReport.<br>BatteryInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ApplicationErrorReport.CrashInfo"></A>
+ <nobr><A HREF="../../../../reference/android/app/ApplicationErrorReport.CrashInfo.html" target="_top"><code>ApplicationErrorReport.<br>CrashInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ApplicationErrorReport.RunningServiceInfo"></A>
+ <nobr><A HREF="../../../../reference/android/app/ApplicationErrorReport.RunningServiceInfo.html" target="_top"><code>ApplicationErrorReport.<br>RunningServiceInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionBar"></A>
+ <nobr><A HREF="android.app.ActionBar.html">ActionBar</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionBar.Tab"></A>
+ <nobr><A HREF="android.app.ActionBar.Tab.html">ActionBar.Tab</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Activity"></A>
+ <nobr><A HREF="android.app.Activity.html">Activity</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AlertDialog"></A>
+ <nobr><A HREF="android.app.AlertDialog.html">AlertDialog</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Application"></A>
+ <nobr><A HREF="android.app.Application.html">Application</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Fragment"></A>
+ <nobr><A HREF="android.app.Fragment.html">Fragment</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FragmentManager"></A>
+ <nobr><A HREF="android.app.FragmentManager.html">FragmentManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FragmentManager.BackStackEntry"></A>
+ <nobr><A HREF="android.app.FragmentManager.BackStackEntry.html"><I>FragmentManager.BackStackEntry</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Notification.Builder"></A>
+ <nobr><A HREF="android.app.Notification.Builder.html">Notification.Builder</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PendingIntent"></A>
+ <nobr><A HREF="android.app.PendingIntent.html">PendingIntent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchManager"></A>
+ <nobr><A HREF="android.app.SearchManager.html">SearchManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Service"></A>
+ <nobr><A HREF="android.app.Service.html">Service</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WallpaperManager"></A>
+ <nobr><A HREF="android.app.WallpaperManager.html">WallpaperManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html
new file mode 100644
index 0000000..a8651f3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.appwidget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/appwidget/package-summary.html" target="_top"><font size="+1"><code>android.appwidget</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppWidgetProviderInfo"></A>
+ <nobr><A HREF="android.appwidget.AppWidgetProviderInfo.html">AppWidgetProviderInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html
new file mode 100644
index 0000000..1a5556c
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.bluetooth
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/bluetooth/package-summary.html" target="_top"><font size="+1"><code>android.bluetooth</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BluetoothHealth"></A>
+ <nobr><A HREF="../../../../reference/android/bluetooth/BluetoothHealth.html" target="_top"><code>BluetoothHealth</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BluetoothHealthAppConfiguration"></A>
+ <nobr><A HREF="../../../../reference/android/bluetooth/BluetoothHealthAppConfiguration.html" target="_top"><code>BluetoothHealthAppConfiguration</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BluetoothHealthCallback"></A>
+ <nobr><A HREF="../../../../reference/android/bluetooth/BluetoothHealthCallback.html" target="_top"><code>BluetoothHealthCallback</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BluetoothAdapter"></A>
+ <nobr><A HREF="android.bluetooth.BluetoothAdapter.html">BluetoothAdapter</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BluetoothProfile"></A>
+ <nobr><A HREF="android.bluetooth.BluetoothProfile.html"><I>BluetoothProfile</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BluetoothSocket"></A>
+ <nobr><A HREF="android.bluetooth.BluetoothSocket.html">BluetoothSocket</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.content.html b/docs/html/sdk/api_diff/14/changes/pkg_android.content.html
new file mode 100644
index 0000000..60d7c7e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.content.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/content/package-summary.html" target="_top"><font size="+1"><code>android.content</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ComponentCallbacks2"></A>
+ <nobr><A HREF="../../../../reference/android/content/ComponentCallbacks2.html" target="_top"><code><I>ComponentCallbacks2</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContentProvider"></A>
+ <nobr><A HREF="android.content.ContentProvider.html">ContentProvider</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Context"></A>
+ <nobr><A HREF="android.content.Context.html">Context</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Intent"></A>
+ <nobr><A HREF="android.content.Intent.html">Intent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="IntentSender"></A>
+ <nobr><A HREF="android.content.IntentSender.html">IntentSender</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SyncAdapterType"></A>
+ <nobr><A HREF="android.content.SyncAdapterType.html">SyncAdapterType</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html
new file mode 100644
index 0000000..81ac942
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/content/pm/package-summary.html" target="_top"><font size="+1"><code>android.content.pm</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActivityInfo"></A>
+ <nobr><A HREF="android.content.pm.ActivityInfo.html">ActivityInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ApplicationInfo"></A>
+ <nobr><A HREF="android.content.pm.ApplicationInfo.html">ApplicationInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PackageManager"></A>
+ <nobr><A HREF="android.content.pm.PackageManager.html">PackageManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PackageStats"></A>
+ <nobr><A HREF="android.content.pm.PackageStats.html">PackageStats</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ServiceInfo"></A>
+ <nobr><A HREF="android.content.pm.ServiceInfo.html">ServiceInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
new file mode 100644
index 0000000..39291b9
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.database.sqlite
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/database/sqlite/package-summary.html" target="_top"><font size="+1"><code>android.database.sqlite</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SQLiteOpenHelper"></A>
+ <nobr><A HREF="android.database.sqlite.SQLiteOpenHelper.html">SQLiteOpenHelper</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SQLiteQueryBuilder"></A>
+ <nobr><A HREF="android.database.sqlite.SQLiteQueryBuilder.html">SQLiteQueryBuilder</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html
new file mode 100644
index 0000000..b4b1517
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/graphics/package-summary.html" target="_top"><font size="+1"><code>android.graphics</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Canvas"></A>
+ <nobr><A HREF="android.graphics.Canvas.html">Canvas</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Paint"></A>
+ <nobr><A HREF="android.graphics.Paint.html">Paint</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RectF"></A>
+ <nobr><A HREF="android.graphics.RectF.html">RectF</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SurfaceTexture"></A>
+ <nobr><A HREF="android.graphics.SurfaceTexture.html">SurfaceTexture</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html
new file mode 100644
index 0000000..6e6d40e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.hardware
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/hardware/package-summary.html" target="_top"><font size="+1"><code>android.hardware</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Camera.Area"></A>
+ <nobr><A HREF="../../../../reference/android/hardware/Camera.Area.html" target="_top"><code>Camera.Area</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Camera.Face"></A>
+ <nobr><A HREF="../../../../reference/android/hardware/Camera.Face.html" target="_top"><code>Camera.Face</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Camera.FaceDetectionListener"></A>
+ <nobr><A HREF="../../../../reference/android/hardware/Camera.FaceDetectionListener.html" target="_top"><code><I>Camera.FaceDetectionListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Camera"></A>
+ <nobr><A HREF="android.hardware.Camera.html">Camera</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Camera.Parameters"></A>
+ <nobr><A HREF="android.hardware.Camera.Parameters.html">Camera.Parameters</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Sensor"></A>
+ <nobr><A HREF="android.hardware.Sensor.html">Sensor</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.html b/docs/html/sdk/api_diff/14/changes/pkg_android.html
new file mode 100644
index 0000000..7f15e82
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/package-summary.html" target="_top"><font size="+1"><code>android</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Manifest.permission"></A>
+ <nobr><A HREF="android.Manifest.permission.html">Manifest.permission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="R.attr"></A>
+ <nobr><A HREF="android.R.attr.html">R.attr</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="R.color"></A>
+ <nobr><A HREF="android.R.color.html">R.color</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="R.integer"></A>
+ <nobr><A HREF="android.R.integer.html">R.integer</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="R.string"></A>
+ <nobr><A HREF="android.R.string.html">R.string</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="R.style"></A>
+ <nobr><A HREF="android.R.style.html">R.style</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
new file mode 100644
index 0000000..c020347
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.inputmethodservice
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/inputmethodservice/package-summary.html" target="_top"><font size="+1"><code>android.inputmethodservice</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="InputMethodService"></A>
+ <nobr><A HREF="android.inputmethodservice.InputMethodService.html">InputMethodService</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="InputMethodService.InputMethodSessionImpl"></A>
+ <nobr><A HREF="android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html">InputMethodService.InputMethodSessionImpl</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.media.html b/docs/html/sdk/api_diff/14/changes/pkg_android.media.html
new file mode 100644
index 0000000..6269a65
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.media.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/media/package-summary.html" target="_top"><font size="+1"><code>android.media</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RemoteControlClient"></A>
+ <nobr><A HREF="../../../../reference/android/media/RemoteControlClient.html" target="_top"><code>RemoteControlClient</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RemoteControlClient.MetadataEditor"></A>
+ <nobr><A HREF="../../../../reference/android/media/RemoteControlClient.MetadataEditor.html" target="_top"><code>RemoteControlClient.MetadataEditor</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AudioManager"></A>
+ <nobr><A HREF="android.media.AudioManager.html">AudioManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaMetadataRetriever"></A>
+ <nobr><A HREF="android.media.MediaMetadataRetriever.html">MediaMetadataRetriever</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaPlayer"></A>
+ <nobr><A HREF="android.media.MediaPlayer.html">MediaPlayer</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaRecorder"></A>
+ <nobr><A HREF="android.media.MediaRecorder.html">MediaRecorder</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.net.html b/docs/html/sdk/api_diff/14/changes/pkg_android.net.html
new file mode 100644
index 0000000..3deb6bd
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.net.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/net/package-summary.html" target="_top"><font size="+1"><code>android.net</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="VpnService"></A>
+ <nobr><A HREF="../../../../reference/android/net/VpnService.html" target="_top"><code>VpnService</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="VpnService.Builder"></A>
+ <nobr><A HREF="../../../../reference/android/net/VpnService.Builder.html" target="_top"><code>VpnService.Builder</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ConnectivityManager"></A>
+ <nobr><A HREF="android.net.ConnectivityManager.html">ConnectivityManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SSLCertificateSocketFactory"></A>
+ <nobr><A HREF="android.net.SSLCertificateSocketFactory.html">SSLCertificateSocketFactory</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TrafficStats"></A>
+ <nobr><A HREF="android.net.TrafficStats.html">TrafficStats</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html b/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html
new file mode 100644
index 0000000..cd51c20
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.http
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/net/http/package-summary.html" target="_top"><font size="+1"><code>android.net.http</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SslError"></A>
+ <nobr><A HREF="android.net.http.SslError.html">SslError</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html
new file mode 100644
index 0000000..5ae5932
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.net.wifi
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/net/wifi/package-summary.html" target="_top"><font size="+1"><code>android.net.wifi</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WpsInfo"></A>
+ <nobr><A HREF="../../../../reference/android/net/wifi/WpsInfo.html" target="_top"><code>WpsInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WifiManager"></A>
+ <nobr><A HREF="android.net.wifi.WifiManager.html">WifiManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html
new file mode 100644
index 0000000..a044e01
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/nfc/package-summary.html" target="_top"><font size="+1"><code>android.nfc</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcAdapter.CreateNdefMessageCallback"></A>
+ <nobr><A HREF="../../../../reference/android/nfc/NfcAdapter.CreateNdefMessageCallback.html" target="_top"><code><I>NfcAdapter.CreateNdefMessageCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcAdapter.OnNdefPushCompleteCallback"></A>
+ <nobr><A HREF="../../../../reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback.html" target="_top"><code><I>NfcAdapter.OnNdefPushCompleteCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcEvent"></A>
+ <nobr><A HREF="../../../../reference/android/nfc/NfcEvent.html" target="_top"><code>NfcEvent</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NdefRecord"></A>
+ <nobr><A HREF="android.nfc.NdefRecord.html">NdefRecord</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcAdapter"></A>
+ <nobr><A HREF="android.nfc.NfcAdapter.html">NfcAdapter</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
new file mode 100644
index 0000000..c7e562d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.nfc.tech
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/nfc/tech/package-summary.html" target="_top"><font size="+1"><code>android.nfc.tech</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="IsoDep"></A>
+ <nobr><A HREF="android.nfc.tech.IsoDep.html">IsoDep</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MifareClassic"></A>
+ <nobr><A HREF="android.nfc.tech.MifareClassic.html">MifareClassic</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MifareUltralight"></A>
+ <nobr><A HREF="android.nfc.tech.MifareUltralight.html">MifareUltralight</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcA"></A>
+ <nobr><A HREF="android.nfc.tech.NfcA.html">NfcA</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcB"></A>
+ <nobr><A HREF="android.nfc.tech.NfcB.html">NfcB</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcF"></A>
+ <nobr><A HREF="android.nfc.tech.NfcF.html">NfcF</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NfcV"></A>
+ <nobr><A HREF="android.nfc.tech.NfcV.html">NfcV</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html
new file mode 100644
index 0000000..0d66ed8
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.opengl
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/opengl/package-summary.html" target="_top"><font size="+1"><code>android.opengl</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GLUtils"></A>
+ <nobr><A HREF="android.opengl.GLUtils.html">GLUtils</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Matrix"></A>
+ <nobr><A HREF="android.opengl.Matrix.html">Matrix</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.os.html b/docs/html/sdk/api_diff/14/changes/pkg_android.os.html
new file mode 100644
index 0000000..1a56e37
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.os.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/os/package-summary.html" target="_top"><font size="+1"><code>android.os</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Build"></A>
+ <nobr><A HREF="android.os.Build.html">Build</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Build.VERSION_CODES"></A>
+ <nobr><A HREF="android.os.Build.VERSION_CODES.html">Build.VERSION_CODES</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Debug"></A>
+ <nobr><A HREF="android.os.Debug.html">Debug</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Debug.MemoryInfo"></A>
+ <nobr><A HREF="android.os.Debug.MemoryInfo.html">Debug.MemoryInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Handler"></A>
+ <nobr><A HREF="android.os.Handler.html">Handler</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Looper"></A>
+ <nobr><A HREF="android.os.Looper.html">Looper</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ParcelFileDescriptor"></A>
+ <nobr><A HREF="android.os.ParcelFileDescriptor.html">ParcelFileDescriptor</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Process"></A>
+ <nobr><A HREF="android.os.Process.html">Process</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RecoverySystem"></A>
+ <nobr><A HREF="android.os.RecoverySystem.html">RecoverySystem</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html b/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html
new file mode 100644
index 0000000..ded1274
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.preference
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/preference/package-summary.html" target="_top"><font size="+1"><code>android.preference</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SwitchPreference"></A>
+ <nobr><A HREF="../../../../reference/android/preference/SwitchPreference.html" target="_top"><code>SwitchPreference</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TwoStatePreference"></A>
+ <nobr><A HREF="../../../../reference/android/preference/TwoStatePreference.html" target="_top"><code>TwoStatePreference</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CheckBoxPreference"></A>
+ <nobr><A HREF="android.preference.CheckBoxPreference.html">CheckBoxPreference</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Preference"></A>
+ <nobr><A HREF="android.preference.Preference.html">Preference</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PreferenceActivity"></A>
+ <nobr><A HREF="android.preference.PreferenceActivity.html">PreferenceActivity</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html
new file mode 100644
index 0000000..23a6407
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html
@@ -0,0 +1,463 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.provider
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/provider/package-summary.html" target="_top"><font size="+1"><code>android.provider</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.html" target="_top"><code>CalendarContract</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.Attendees"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.Attendees.html" target="_top"><code>CalendarContract.Attendees</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.AttendeesColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.AttendeesColumns.html" target="_top"><code><I>CalendarContract.AttendeesColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarAlerts"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarAlerts.html" target="_top"><code>CalendarContract.CalendarAlerts</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarAlertsColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarAlertsColumns.html" target="_top"><code><I>CalendarContract.CalendarAlertsColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarCache"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarCache.html" target="_top"><code>CalendarContract.CalendarCache</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarCacheColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarCacheColumns.html" target="_top"><code><I>CalendarContract.CalendarCacheColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarColumns.html" target="_top"><code><I>CalendarContract.CalendarColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarEntity"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarEntity.html" target="_top"><code>CalendarContract.CalendarEntity</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.CalendarSyncColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.CalendarSyncColumns.html" target="_top"><code><I>CalendarContract.CalendarSyncColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.Calendars"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.Calendars.html" target="_top"><code>CalendarContract.Calendars</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.EventDays"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.EventDays.html" target="_top"><code>CalendarContract.EventDays</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.EventDaysColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.EventDaysColumns.html" target="_top"><code><I>CalendarContract.EventDaysColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.Events"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.Events.html" target="_top"><code>CalendarContract.Events</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.EventsColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.EventsColumns.html" target="_top"><code><I>CalendarContract.EventsColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.EventsEntity"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.EventsEntity.html" target="_top"><code>CalendarContract.EventsEntity</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.ExtendedProperties"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.ExtendedProperties.html" target="_top"><code>CalendarContract.ExtendedProperties</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.ExtendedPropertiesColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.ExtendedPropertiesColumns.html" target="_top"><code><I>CalendarContract.ExtendedPropertiesColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.Instances"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.Instances.html" target="_top"><code>CalendarContract.Instances</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.Reminders"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.Reminders.html" target="_top"><code>CalendarContract.Reminders</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.RemindersColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.RemindersColumns.html" target="_top"><code><I>CalendarContract.RemindersColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.SyncColumns"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.SyncColumns.html" target="_top"><code><I>CalendarContract.SyncColumns</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CalendarContract.SyncState"></A>
+ <nobr><A HREF="../../../../reference/android/provider/CalendarContract.SyncState.html" target="_top"><code>CalendarContract.SyncState</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.CommonDataKinds.Identity"></A>
+ <nobr><A HREF="../../../../reference/android/provider/ContactsContract.CommonDataKinds.Identity.html" target="_top"><code>ContactsContract.CommonDataKinds.<br>Identity</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.DataUsageFeedback"></A>
+ <nobr><A HREF="../../../../reference/android/provider/ContactsContract.DataUsageFeedback.html" target="_top"><code>ContactsContract.DataUsageFeedback</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.DisplayPhoto"></A>
+ <nobr><A HREF="../../../../reference/android/provider/ContactsContract.DisplayPhoto.html" target="_top"><code>ContactsContract.DisplayPhoto</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.Profile"></A>
+ <nobr><A HREF="../../../../reference/android/provider/ContactsContract.Profile.html" target="_top"><code>ContactsContract.Profile</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.ProfileSyncState"></A>
+ <nobr><A HREF="../../../../reference/android/provider/ContactsContract.ProfileSyncState.html" target="_top"><code>ContactsContract.ProfileSyncState</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.RawContacts.DisplayPhoto"></A>
+ <nobr><A HREF="../../../../reference/android/provider/ContactsContract.RawContacts.DisplayPhoto.html" target="_top"><code>ContactsContract.RawContacts.<br>DisplayPhoto</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="VoicemailContract"></A>
+ <nobr><A HREF="../../../../reference/android/provider/VoicemailContract.html" target="_top"><code>VoicemailContract</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="VoicemailContract.Status"></A>
+ <nobr><A HREF="../../../../reference/android/provider/VoicemailContract.Status.html" target="_top"><code>VoicemailContract.Status</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="VoicemailContract.Voicemails"></A>
+ <nobr><A HREF="../../../../reference/android/provider/VoicemailContract.Voicemails.html" target="_top"><code>VoicemailContract.Voicemails</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CallLog.Calls"></A>
+ <nobr><A HREF="android.provider.CallLog.Calls.html">CallLog.Calls</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract"></A>
+ <nobr><A HREF="android.provider.ContactsContract.html">ContactsContract</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.CommonDataKinds.Photo"></A>
+ <nobr><A HREF="android.provider.ContactsContract.CommonDataKinds.Photo.html">ContactsContract.CommonDataKinds.<br>Photo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.Contacts"></A>
+ <nobr><A HREF="android.provider.ContactsContract.Contacts.html">ContactsContract.Contacts</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.Contacts.Photo"></A>
+ <nobr><A HREF="android.provider.ContactsContract.Contacts.Photo.html">ContactsContract.Contacts.<br>Photo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.ContactsColumns"></A>
+ <nobr><A HREF="android.provider.ContactsContract.ContactsColumns.html"><I>ContactsContract.ContactsColumns</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.GroupsColumns"></A>
+ <nobr><A HREF="android.provider.ContactsContract.GroupsColumns.html"><I>ContactsContract.GroupsColumns</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.Intents"></A>
+ <nobr><A HREF="android.provider.ContactsContract.Intents.html">ContactsContract.Intents</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.RawContactsColumns"></A>
+ <nobr><A HREF="android.provider.ContactsContract.RawContactsColumns.html"><I>ContactsContract.RawContactsColumns</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.RawContactsEntity"></A>
+ <nobr><A HREF="android.provider.ContactsContract.RawContactsEntity.html">ContactsContract.RawContactsEntity</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.SettingsColumns"></A>
+ <nobr><A HREF="android.provider.ContactsContract.SettingsColumns.html"><I>ContactsContract.SettingsColumns</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContactsContract.StatusUpdates"></A>
+ <nobr><A HREF="android.provider.ContactsContract.StatusUpdates.html">ContactsContract.StatusUpdates</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LiveFolders"></A>
+ <nobr><A HREF="android.provider.LiveFolders.html">LiveFolders</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaStore.Audio.AudioColumns"></A>
+ <nobr><A HREF="android.provider.MediaStore.Audio.AudioColumns.html"><I>MediaStore.Audio.AudioColumns</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Settings"></A>
+ <nobr><A HREF="android.provider.Settings.html">Settings</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Settings.Secure"></A>
+ <nobr><A HREF="android.provider.Settings.Secure.html">Settings.Secure</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Settings.System"></A>
+ <nobr><A HREF="android.provider.Settings.System.html">Settings.System</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html b/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html
new file mode 100644
index 0000000..03563af
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html
@@ -0,0 +1,281 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.renderscript
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/renderscript/package-summary.html" target="_top"><font size="+1"><code>android.renderscript</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Double2"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Double2.html" target="_top"><code>Double2</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Double3"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Double3.html" target="_top"><code>Double3</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Double4"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/Double4.html" target="_top"><code>Double4</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RSTextureView"></A>
+ <nobr><A HREF="../../../../reference/android/renderscript/RSTextureView.html" target="_top"><code>RSTextureView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Allocation"></A>
+ <nobr><A HREF="android.renderscript.Allocation.html">Allocation</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AllocationAdapter"></A>
+ <nobr><A HREF="android.renderscript.AllocationAdapter.html">AllocationAdapter</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BaseObj"></A>
+ <nobr><A HREF="android.renderscript.BaseObj.html">BaseObj</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Byte2"></A>
+ <nobr><A HREF="android.renderscript.Byte2.html">Byte2</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Byte3"></A>
+ <nobr><A HREF="android.renderscript.Byte3.html">Byte3</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Byte4"></A>
+ <nobr><A HREF="android.renderscript.Byte4.html">Byte4</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Element"></A>
+ <nobr><A HREF="android.renderscript.Element.html">Element</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FieldPacker"></A>
+ <nobr><A HREF="android.renderscript.FieldPacker.html">FieldPacker</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Int2"></A>
+ <nobr><A HREF="android.renderscript.Int2.html">Int2</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Int3"></A>
+ <nobr><A HREF="android.renderscript.Int3.html">Int3</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Int4"></A>
+ <nobr><A HREF="android.renderscript.Int4.html">Int4</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Long2"></A>
+ <nobr><A HREF="android.renderscript.Long2.html">Long2</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Long3"></A>
+ <nobr><A HREF="android.renderscript.Long3.html">Long3</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Long4"></A>
+ <nobr><A HREF="android.renderscript.Long4.html">Long4</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RenderScriptGL"></A>
+ <nobr><A HREF="android.renderscript.RenderScriptGL.html">RenderScriptGL</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Script"></A>
+ <nobr><A HREF="android.renderscript.Script.html">Script</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Short2"></A>
+ <nobr><A HREF="android.renderscript.Short2.html">Short2</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Short3"></A>
+ <nobr><A HREF="android.renderscript.Short3.html">Short3</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Short4"></A>
+ <nobr><A HREF="android.renderscript.Short4.html">Short4</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html b/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
new file mode 100644
index 0000000..c1bdfb1
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.service.wallpaper
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/service/wallpaper/package-summary.html" target="_top"><font size="+1"><code>android.service.wallpaper</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WallpaperService.Engine"></A>
+ <nobr><A HREF="android.service.wallpaper.WallpaperService.Engine.html">WallpaperService.Engine</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html
new file mode 100644
index 0000000..bfbe14e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.speech
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/speech/package-summary.html" target="_top"><font size="+1"><code>android.speech</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RecognizerIntent"></A>
+ <nobr><A HREF="android.speech.RecognizerIntent.html">RecognizerIntent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SpeechRecognizer"></A>
+ <nobr><A HREF="android.speech.SpeechRecognizer.html">SpeechRecognizer</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html
new file mode 100644
index 0000000..21fca52
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.speech.tts
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/speech/tts/package-summary.html" target="_top"><font size="+1"><code>android.speech.tts</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SynthesisCallback"></A>
+ <nobr><A HREF="../../../../reference/android/speech/tts/SynthesisCallback.html" target="_top"><code><I>SynthesisCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SynthesisRequest"></A>
+ <nobr><A HREF="../../../../reference/android/speech/tts/SynthesisRequest.html" target="_top"><code>SynthesisRequest</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextToSpeech.EngineInfo"></A>
+ <nobr><A HREF="../../../../reference/android/speech/tts/TextToSpeech.EngineInfo.html" target="_top"><code>TextToSpeech.EngineInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextToSpeechService"></A>
+ <nobr><A HREF="../../../../reference/android/speech/tts/TextToSpeechService.html" target="_top"><code>TextToSpeechService</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextToSpeech"></A>
+ <nobr><A HREF="android.speech.tts.TextToSpeech.html">TextToSpeech</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextToSpeech.Engine"></A>
+ <nobr><A HREF="android.speech.tts.TextToSpeech.Engine.html">TextToSpeech.Engine</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html
new file mode 100644
index 0000000..169b498
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.test.mock
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/test/mock/package-summary.html" target="_top"><font size="+1"><code>android.test.mock</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MockPackageManager"></A>
+ <nobr><A HREF="android.test.mock.MockPackageManager.html">MockPackageManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.text.html b/docs/html/sdk/api_diff/14/changes/pkg_android.text.html
new file mode 100644
index 0000000..b286fa1
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.text.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.text
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/text/package-summary.html" target="_top"><font size="+1"><code>android.text</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Layout"></A>
+ <nobr><A HREF="android.text.Layout.html">Layout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html
new file mode 100644
index 0000000..dfda61e
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.text.style
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/text/style/package-summary.html" target="_top"><font size="+1"><code>android.text.style</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="EasyEditSpan"></A>
+ <nobr><A HREF="../../../../reference/android/text/style/EasyEditSpan.html" target="_top"><code>EasyEditSpan</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SuggestionSpan"></A>
+ <nobr><A HREF="../../../../reference/android/text/style/SuggestionSpan.html" target="_top"><code>SuggestionSpan</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.util.html b/docs/html/sdk/api_diff/14/changes/pkg_android.util.html
new file mode 100644
index 0000000..6b9a20b
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.util.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.util
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/util/package-summary.html" target="_top"><font size="+1"><code>android.util</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NoSuchPropertyException"></A>
+ <nobr><A HREF="../../../../reference/android/util/NoSuchPropertyException.html" target="_top"><code>NoSuchPropertyException</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Property"></A>
+ <nobr><A HREF="../../../../reference/android/util/Property.html" target="_top"><code>Property</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Config"></A>
+ <nobr><A HREF="android.util.Config.html">Config</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Patterns"></A>
+ <nobr><A HREF="android.util.Patterns.html">Patterns</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SparseArray"></A>
+ <nobr><A HREF="android.util.SparseArray.html">SparseArray</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SparseBooleanArray"></A>
+ <nobr><A HREF="android.util.SparseBooleanArray.html">SparseBooleanArray</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SparseIntArray"></A>
+ <nobr><A HREF="android.util.SparseIntArray.html">SparseIntArray</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html b/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
new file mode 100644
index 0000000..c78a800
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.accessibility
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/view/accessibility/package-summary.html" target="_top"><font size="+1"><code>android.view.accessibility</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityManager.AccessibilityStateChangeListener"></A>
+ <nobr><A HREF="../../../../reference/android/view/accessibility/AccessibilityManager.AccessibilityStateChangeListener.html" target="_top"><code><I>AccessibilityManager.<br>AccessibilityStateChangeListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeInfo"></A>
+ <nobr><A HREF="../../../../reference/android/view/accessibility/AccessibilityNodeInfo.html" target="_top"><code>AccessibilityNodeInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityRecord"></A>
+ <nobr><A HREF="../../../../reference/android/view/accessibility/AccessibilityRecord.html" target="_top"><code>AccessibilityRecord</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityEvent"></A>
+ <nobr><A HREF="android.view.accessibility.AccessibilityEvent.html">AccessibilityEvent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityManager"></A>
+ <nobr><A HREF="android.view.accessibility.AccessibilityManager.html">AccessibilityManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.view.html b/docs/html/sdk/api_diff/14/changes/pkg_android.view.html
new file mode 100644
index 0000000..58e2441
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.view.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/view/package-summary.html" target="_top"><font size="+1"><code>android.view</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionProvider"></A>
+ <nobr><A HREF="../../../../reference/android/view/ActionProvider.html" target="_top"><code>ActionProvider</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CollapsibleActionView"></A>
+ <nobr><A HREF="../../../../reference/android/view/CollapsibleActionView.html" target="_top"><code><I>CollapsibleActionView</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MenuItem.OnActionExpandListener"></A>
+ <nobr><A HREF="../../../../reference/android/view/MenuItem.OnActionExpandListener.html" target="_top"><code><I>MenuItem.OnActionExpandListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MotionEvent.PointerProperties"></A>
+ <nobr><A HREF="../../../../reference/android/view/MotionEvent.PointerProperties.html" target="_top"><code>MotionEvent.PointerProperties</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextureView"></A>
+ <nobr><A HREF="../../../../reference/android/view/TextureView.html" target="_top"><code>TextureView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextureView.SurfaceTextureListener"></A>
+ <nobr><A HREF="../../../../reference/android/view/TextureView.SurfaceTextureListener.html" target="_top"><code><I>TextureView.SurfaceTextureListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="View.AccessibilityDelegate"></A>
+ <nobr><A HREF="../../../../reference/android/view/View.AccessibilityDelegate.html" target="_top"><code>View.AccessibilityDelegate</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="View.OnHoverListener"></A>
+ <nobr><A HREF="../../../../reference/android/view/View.OnHoverListener.html" target="_top"><code><I>View.OnHoverListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionMode"></A>
+ <nobr><A HREF="android.view.ActionMode.html">ActionMode</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Gravity"></A>
+ <nobr><A HREF="android.view.Gravity.html">Gravity</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="InputDevice"></A>
+ <nobr><A HREF="android.view.InputDevice.html">InputDevice</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="KeyEvent"></A>
+ <nobr><A HREF="android.view.KeyEvent.html">KeyEvent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MenuItem"></A>
+ <nobr><A HREF="android.view.MenuItem.html"><I>MenuItem</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MotionEvent"></A>
+ <nobr><A HREF="android.view.MotionEvent.html">MotionEvent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Surface"></A>
+ <nobr><A HREF="android.view.Surface.html">Surface</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="View"></A>
+ <nobr><A HREF="android.view.View.html">View</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewConfiguration"></A>
+ <nobr><A HREF="android.view.ViewConfiguration.html">ViewConfiguration</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewGroup"></A>
+ <nobr><A HREF="android.view.ViewGroup.html">ViewGroup</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewParent"></A>
+ <nobr><A HREF="android.view.ViewParent.html"><I>ViewParent</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewPropertyAnimator"></A>
+ <nobr><A HREF="android.view.ViewPropertyAnimator.html">ViewPropertyAnimator</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Window"></A>
+ <nobr><A HREF="android.view.Window.html">Window</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WindowManager.LayoutParams"></A>
+ <nobr><A HREF="android.view.WindowManager.LayoutParams.html">WindowManager.LayoutParams</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
new file mode 100644
index 0000000..d422a5d
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.inputmethod
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/view/inputmethod/package-summary.html" target="_top"><font size="+1"><code>android.view.inputmethod</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="InputMethodManager"></A>
+ <nobr><A HREF="android.view.inputmethod.InputMethodManager.html">InputMethodManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="InputMethodSession"></A>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSession.html"><I>InputMethodSession</I></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="InputMethodSubtype"></A>
+ <nobr><A HREF="android.view.inputmethod.InputMethodSubtype.html">InputMethodSubtype</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html
new file mode 100644
index 0000000..8d52055
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/webkit/package-summary.html" target="_top"><font size="+1"><code>android.webkit</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebChromeClient"></A>
+ <nobr><A HREF="android.webkit.WebChromeClient.html">WebChromeClient</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebSettings"></A>
+ <nobr><A HREF="android.webkit.WebSettings.html">WebSettings</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebSettings.TextSize"></A>
+ <nobr><A HREF="android.webkit.WebSettings.TextSize.html">WebSettings.TextSize</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebView.HitTestResult"></A>
+ <nobr><A HREF="android.webkit.WebView.HitTestResult.html">WebView.HitTestResult</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html
new file mode 100644
index 0000000..f5a9ede
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/widget/package-summary.html" target="_top"><font size="+1"><code>android.widget</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="EdgeEffect"></A>
+ <nobr><A HREF="../../../../reference/android/widget/EdgeEffect.html" target="_top"><code>EdgeEffect</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout"></A>
+ <nobr><A HREF="../../../../reference/android/widget/GridLayout.html" target="_top"><code>GridLayout</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout.Alignment"></A>
+ <nobr><A HREF="../../../../reference/android/widget/GridLayout.Alignment.html" target="_top"><code>GridLayout.Alignment</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout.LayoutParams"></A>
+ <nobr><A HREF="../../../../reference/android/widget/GridLayout.LayoutParams.html" target="_top"><code>GridLayout.LayoutParams</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout.Spec"></A>
+ <nobr><A HREF="../../../../reference/android/widget/GridLayout.Spec.html" target="_top"><code>GridLayout.Spec</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PopupMenu.OnDismissListener"></A>
+ <nobr><A HREF="../../../../reference/android/widget/PopupMenu.OnDismissListener.html" target="_top"><code><I>PopupMenu.OnDismissListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ShareActionProvider"></A>
+ <nobr><A HREF="../../../../reference/android/widget/ShareActionProvider.html" target="_top"><code>ShareActionProvider</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ShareActionProvider.OnShareTargetSelectedListener"></A>
+ <nobr><A HREF="../../../../reference/android/widget/ShareActionProvider.OnShareTargetSelectedListener.html" target="_top"><code><I>ShareActionProvider.OnShareTargetSelectedListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Space"></A>
+ <nobr><A HREF="../../../../reference/android/widget/Space.html" target="_top"><code>Space</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Switch"></A>
+ <nobr><A HREF="../../../../reference/android/widget/Switch.html" target="_top"><code>Switch</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AbsListView"></A>
+ <nobr><A HREF="android.widget.AbsListView.html">AbsListView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AdapterViewAnimator"></A>
+ <nobr><A HREF="android.widget.AdapterViewAnimator.html">AdapterViewAnimator</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ExpandableListView"></A>
+ <nobr><A HREF="android.widget.ExpandableListView.html">ExpandableListView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FrameLayout"></A>
+ <nobr><A HREF="android.widget.FrameLayout.html">FrameLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LinearLayout"></A>
+ <nobr><A HREF="android.widget.LinearLayout.html">LinearLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="OverScroller"></A>
+ <nobr><A HREF="android.widget.OverScroller.html">OverScroller</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PopupMenu"></A>
+ <nobr><A HREF="android.widget.PopupMenu.html">PopupMenu</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RemoteViews"></A>
+ <nobr><A HREF="android.widget.RemoteViews.html">RemoteViews</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Scroller"></A>
+ <nobr><A HREF="android.widget.Scroller.html">Scroller</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchView"></A>
+ <nobr><A HREF="android.widget.SearchView.html">SearchView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="StackView"></A>
+ <nobr><A HREF="android.widget.StackView.html">StackView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextView"></A>
+ <nobr><A HREF="android.widget.TextView.html">TextView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
new file mode 100644
index 0000000..5d6987a
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+dalvik.annotation
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/dalvik/annotation/package-summary.html" target="_top"><font size="+1"><code>dalvik.annotation</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TestTarget"></A>
+ <nobr><A HREF="dalvik.annotation.TestTarget.html">TestTarget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TestTargetClass"></A>
+ <nobr><A HREF="dalvik.annotation.TestTargetClass.html">TestTargetClass</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html
new file mode 100644
index 0000000..246b8dd
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+dalvik.system
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/dalvik/system/package-summary.html" target="_top"><font size="+1"><code>dalvik.system</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BaseDexClassLoader"></A>
+ <nobr><A HREF="../../../../reference/dalvik/system/BaseDexClassLoader.html" target="_top"><code>BaseDexClassLoader</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DexClassLoader"></A>
+ <nobr><A HREF="dalvik.system.DexClassLoader.html">DexClassLoader</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PathClassLoader"></A>
+ <nobr><A HREF="dalvik.system.PathClassLoader.html">PathClassLoader</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.io.html b/docs/html/sdk/api_diff/14/changes/pkg_java.io.html
new file mode 100644
index 0000000..4291f38
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.io.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.io
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/io/package-summary.html" target="_top"><font size="+1"><code>java.io</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FilePermission"></A>
+ <nobr><A HREF="java.io.FilePermission.html">FilePermission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ObjectInputStream"></A>
+ <nobr><A HREF="java.io.ObjectInputStream.html">ObjectInputStream</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ObjectOutputStream"></A>
+ <nobr><A HREF="java.io.ObjectOutputStream.html">ObjectOutputStream</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html
new file mode 100644
index 0000000..fcf6b25
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/lang/package-summary.html" target="_top"><font size="+1"><code>java.lang</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Class"></A>
+ <nobr><A HREF="java.lang.Class.html">Class</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html
new file mode 100644
index 0000000..1aabf82
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.ref
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/lang/ref/package-summary.html" target="_top"><font size="+1"><code>java.lang.ref</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ReferenceQueue"></A>
+ <nobr><A HREF="java.lang.ref.ReferenceQueue.html">ReferenceQueue</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
new file mode 100644
index 0000000..ca050ee
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.lang.reflect
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/lang/reflect/package-summary.html" target="_top"><font size="+1"><code>java.lang.reflect</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibleObject"></A>
+ <nobr><A HREF="java.lang.reflect.AccessibleObject.html">AccessibleObject</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Constructor"></A>
+ <nobr><A HREF="java.lang.reflect.Constructor.html">Constructor</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Field"></A>
+ <nobr><A HREF="java.lang.reflect.Field.html">Field</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Method"></A>
+ <nobr><A HREF="java.lang.reflect.Method.html">Method</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.net.html b/docs/html/sdk/api_diff/14/changes/pkg_java.net.html
new file mode 100644
index 0000000..37a8105
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.net.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.net
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/net/package-summary.html" target="_top"><font size="+1"><code>java.net</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SocketPermission"></A>
+ <nobr><A HREF="java.net.SocketPermission.html">SocketPermission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.security.html b/docs/html/sdk/api_diff/14/changes/pkg_java.security.html
new file mode 100644
index 0000000..38d8f1f
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.security.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.security
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/security/package-summary.html" target="_top"><font size="+1"><code>java.security</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AllPermission"></A>
+ <nobr><A HREF="java.security.AllPermission.html">AllPermission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BasicPermission"></A>
+ <nobr><A HREF="java.security.BasicPermission.html">BasicPermission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Permission"></A>
+ <nobr><A HREF="java.security.Permission.html">Permission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="UnresolvedPermission"></A>
+ <nobr><A HREF="java.security.UnresolvedPermission.html">UnresolvedPermission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html b/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html
new file mode 100644
index 0000000..cac83f2
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+java.util.logging
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/java/util/logging/package-summary.html" target="_top"><font size="+1"><code>java.util.logging</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Handler"></A>
+ <nobr><A HREF="java.util.logging.Handler.html">Handler</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html b/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html
new file mode 100644
index 0000000..9c134cf
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+javax.security.auth
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">14</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">13</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2011.10.06 23:19</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/javax/security/auth/package-summary.html" target="_top"><font size="+1"><code>javax.security.auth</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PrivateCredentialPermission"></A>
+ <nobr><A HREF="javax.security.auth.PrivateCredentialPermission.html">PrivateCredentialPermission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/14/stylesheet-jdiff.css b/docs/html/sdk/api_diff/14/stylesheet-jdiff.css
new file mode 100644
index 0000000..edafaa3
--- /dev/null
+++ b/docs/html/sdk/api_diff/14/stylesheet-jdiff.css
@@ -0,0 +1,44 @@
+
+/* (http://www.jdiff.org) */
+
+div.and-diff-id {border: 1px solid #eee;position:relative;float:right;clear:both;padding:0px;}
+table.diffspectable {border:1px;padding:0px;margin:0px;}
+.diffspechead {background-color:#eee;}
+.diffspectable tr {border:0px;padding:0px;}
+.diffspectable td {background-color:eee;border:0px;font-size:90%;font-weight:normal;padding:0px;padding-left:1px;padding-right:1px;text-align:center;color:777;}
+td.diffvalueold {color:orange;background-color:white;border:0px;font-size:80%;font-style:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffvaluenew {color:green;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffvalue {color:444;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffspec {background-color:white;border:0px;font-size:80%;font-weight:normal;padding:1px;color:444;text-align:right;padding-right:.5em;line-height:.95em;}
+tt {font-size:11pt;font-family:monospace;}
+.indexHeader {
+ font-size:96%;
+ line-height:.8em;}
+.jdiffIndex td {
+ font-size:96%;
+ xline-height:.8em;
+ padding:2px;
+ padding-left:1em;}
+.indexText {
+ font-size:100%;
+ padding-left:1em;}
+#indexTableCaption {
+ font-size:96%;
+ margin-top:.25em;
+ margin-bottom:0;
+ }
+.hiddenlink {
+ font-size:96%;
+ line-height:.8em;
+ text-decoration:none;}
+a {
+ text-decoration:none;}
+a:hover {
+ text-decoration:underline;}
+.indexBox {
+ border: 1px solid red;
+ margin:1em 0 0 0;}
+.letterIndexHead {
+ font-size: 1.5em;font-weight:9;
+ margin:0 0 0em 0;
+ border: 1px solid red;}
diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd
index bbf7cbe..333efa2 100644
--- a/docs/html/sdk/eclipse-adt.jd
+++ b/docs/html/sdk/eclipse-adt.jd
@@ -1,8 +1,8 @@
page.title=ADT Plugin for Eclipse
-adt.zip.version=12.0.0
-adt.zip.download=ADT-12.0.0.zip
-adt.zip.bytes=5651973
-adt.zip.checksum=8ad85d0f3da4a2b8dadfddcc2d66dbcb
+adt.zip.version=14.0.0
+adt.zip.download=ADT-14.0.0.zip
+adt.zip.bytes=6745584
+adt.zip.checksum=a645330d90fd9dae6187662bb1c3c644
@jd:body
@@ -22,7 +22,7 @@
</li>
<li><a href="#updating">Updating the ADT Plugin</a></li>
</ol>
-
+
<h2>See also</h2>
<ol>
<li><a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a></li>
@@ -110,6 +110,124 @@
<a href="#" onclick="return toggleDiv(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
width="9px" />
+ADT 14.0.0</a> <em>(October 2011)</em>
+ <div class="toggleme">
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 14.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r14</a>.
+If you haven't already installed SDK Tools r14 into your SDK, use the Android SDK and AVD Manager to
+do so.</dd>
+
+<dt>Build system</dt>
+<dd>
+ <ul>
+ <li>Changed <code>default.properties</code> to <code>project.properties</code> and
+ <code>build.properties</code> to <code>ant.properties</code>. ADT automatically
+ renames these files, if necessary, when you open a project in Eclipse.</li>
+ <li>Changed how library projects are built in Eclipse.</a></li>
+ <li>Changed output of <code>javac</code> from <code>bin/</code> to <code>bin/classes</code>
+ in Eclipse.</li>
+ <li>Improved incremental builds so that resource compilation runs less frequently. Builds no
+ longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
+ run once for each library project.</li>
+ <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
+ crunching all existing PNG files, all the time.</li>
+ <li>Modified resource compilation so it no longer happens for normal save operations. It only
+ happens when running or debugging (the build option that lets you disable the packaging
+ step, which was introduced in ADT 12, is now on by default.)</li>
+ </ul>
+<p>For a complete overview of the build system changes and what you need to do to support them,
+see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
+site</a>.</p>
+</dd>
+
+<dt>General improvements</dt>
+<dd>
+ <ul>
+
+
+<li>Added a Welcome Wizard to help with the initial setup of the Android
+development environment (<a href="http://tools.android.com/recent/welcomewizard">more
+info</a>).</li>
+<li>Integrated the Android Asset Studio, which helps you create icons for things
+like the launcher, menus, and tabs. (<a
+href="http://tools.android.com/recent/assetstudiointegration">more
+info</a>).</li>
+<li>Revamped the Logcat view and added support to display and filter logs by
+ application names as well as PIDs (<a
+ href="http://tools.android.com/recent/updatedlogcatviewer">more info</a>).</li>
+<li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
+info</a>).</li>
+<li>Revamped the New Project and the New XML File wizards to have
+multiple pages. Sample projects are now copied into the workspace such that they can be modified
+and deleted without affecting the master copy
+(<a href="http://tools.android.com/recent/revampedwizards">more info</a>).</li>
+<li>Removed the dependency on Eclipse GEF.</li>
+</ul>
+</dd>
+
+<dt>XML and Java editors</dt>
+<dd>
+ <ul>
+ <li>Added a new XML formatter that formats all XML files according to the
+ standard Android coding style. The formatter can also reorder
+ attributes to follow a recommended order and processes any changes made in the Layout editor.
+(<a href="http://tools.android.com/recent/xmlformatter">more info</a>).</li>
+ <li>Added the "Go to Matching" (Ctrl-Shift-P) feature, which lets you jump
+between opening and closing tags in XML files.</li>
+ <li>Added support for the "Select Enclosing Element" feature on Mac.</li>
+ <li>Added a Quickfix for extracting Strings when the caret is inside a String (<a href="">see
+more</a>).</li>
+ <li>Improved "smart indent", which allows automatic indentation and un-indentation
+ when pressing the Return key in XML editors (<a
+href="http://tools.android.com/recent/xmleditingimprovements">more info</a>).</li>
+
+ </ul>
+</dd>
+
+<dt>Layout editor</dt>
+<dd>
+ <ul>
+ <li>Added tooltip feedback for dragging and resizing operations. For
+ example, when dragging in a relative layout, the proposed
+ constraints are shown. When resizing, the new dimensions are
+ shown (<a href="http://tools.android.com/recent/layouteditorfeedbacktooltips">more
+info</a>).</li>
+ <li>Added the ability to suppress rendering fidelity warnings (<a
+href="http://tools.android.com/recent/suppressrenderwarnings">more info</a>).</li>
+ <li>Added "Remove Container" visual refactoring that removes the
+ children of a container up to the top level and transfers
+ namespace and layout attributes if necessary (<a
+href="http://tools.android.com/recent/removecontainervisualrefactoring">more info</a>).</li>
+ <li>Added pull-right menus to the context menu for accessing
+ properties of the parents, which is useful when the children fully
+ cover the parent and make it hard to select on their own.</li>
+ <li>Improved access to properties in the context menu. The most
+ frequently set attributes for each view are listed at the top of
+ the menu. The Properties menu offers access to the most
+ recently set attributes, attributes organized by their defining
+ view, and layout attributes only or all attributes alphabetically (<a
+href="http://tools.android.com/recent/layouteditorcontextmenuimprovements">more info</a>).</li>
+ </ul>
+</dd>
+
+<dt>Bug fixes</dt>
+<dd>Fixed many bugs and added <a
+href="http://tools.android.com/recent/miscellaneousrecentfixes">minor improvements</a>, in
+particular some <a href="http://tools.android.com/recent/linuxfixes">critical bug fixes on
+Linux</a>.</dd>
+
+</div>
+</div>
+
+
+
+<div class="toggleable closed">
+ <a href="#" onclick="return toggleDiv(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
ADT 12.0.0</a> <em>(July 2011)</em>
<div class="toggleme">
<dl>
@@ -141,7 +259,7 @@
<dt>Build system</dt>
<dd>
<ul>
- <li>A new option lets you disable the packaging step in the automatic
+ <li id="build-option">A new option lets you disable the packaging step in the automatic
builders. This improves performance when saving files by not
performing a full build, which can take a long time for large projects.
If the option is enabled, the APK is packaged when the
@@ -225,7 +343,7 @@
href="http://tools.android.com/recent/customviewsinthepalette">more info</a>).</li>
<li>Fragments are available in the palette for placement in your layout. In the tool, you can
choose which layout to show rendered for a given fragment tag. Go to declaration works for fragment
-classes (<a href="http://tools.android.com/recent/fragmentsupport">more info</a>).</li>
+classes (<a href="http://tools.android.com/recent/fragmentsupport">more info</a>).</li>
<li>The layout editor automatically applies a "zoom to fit" for newly
opened files as well as on device size and orientation changes to
ensure that large layouts are always fully visible unless you
@@ -253,7 +371,7 @@
<dt>XML editors:</dt>
<dd>
-<ul>
+<ul>
<li>Code completion has been significantly improved. It now works
with {@code <style>} elements, completes dimensional units,
sorts resource paths in values based on the attribute name, and more. There are also many fixes to
@@ -270,7 +388,7 @@
<dt>DDMS:</dt>
<dd>
-<ul>
+<ul>
<li>"New Folder" action in the File Explorer.</li>
<li>The screenshot dialog will add timestamps to the filenames and preserve the orientation on
snapshot refresh.</li>
@@ -367,7 +485,7 @@
(<a href="http://tools.android.com/recent/improvedsupportformergetags">details</a>).</li>
<li>Improved rendering error diagnostics.</li>
</ul>
- </li>
+ </li>
</ul>
</dd>
</dl>
@@ -391,14 +509,14 @@
<dt>General notes:</dt>
<dd>
- <ul>
+ <ul>
<li>"Go To Declaration" hyperlink support: You can jump directly from code references (such as
<code>R.id.main</code>) to the corresponding XML declaration, or from XML attributes (such as
<code>@string</code>) to the corresponding resource definition, or from manifest XML
registrations to activities and services.</li>
<li>Improvements were made to name refactoring.</li>
<li>AVDs now automatically save their state, so they can restart almost instantly. You can enable this feature when
- creating an AVD or by editing an AVD with the AVD Manager.</li>
+ creating an AVD or by editing an AVD with the AVD Manager.</li>
<li>Improvements to the Visual Layout Editor:
<ul>
<li>Support for rendering targets: You can now choose an arbitrary Android platform to
@@ -436,10 +554,10 @@
into an {@link android.widget.AdapterView}.</li>
<li>Outline reordering: Reordering your views in the Outline tab is much easier
(<a href="http://tools.android.com/recent/outlineimprovements">Details</a>).</li>
- <li>Fix for keybinding bug where keyboard shortcuts did not work (Issues
- <a href="http://code.google.com/p/android/issues/detail?id=13231">13231</a> and
+ <li>Fix for keybinding bug where keyboard shortcuts did not work (Issues
+ <a href="http://code.google.com/p/android/issues/detail?id=13231">13231</a> and
<a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
- <li>Fix for problems with Custom layout attribute menu (Issue
+ <li>Fix for problems with Custom layout attribute menu (Issue
<a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
<li>Automatic configuration for various view types: Certain views have properties configured
by default. For example, the width of an {@link android.widget.EditText} object is set to
@@ -455,7 +573,7 @@
and <a href="http://code.google.com/p/android/issues/detail?id=13092">13092</a>).</li>
<li>Included layouts can be rendered and edited in the context of the layouts that include
them. From a layout using an <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
- <code><include></code></a> tag, double-clicking on the
+ <code><include></code></a> tag, double-clicking on the
<a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
<code><include></code></a> element edits the referenced layout in the context of the
current layout. Additionally, when editing a layout that is included by other layouts,
@@ -466,12 +584,12 @@
<li>This release fixes many other bugs, but the most important ones are listed below:
<ul>
<li>Fixed issue that prevented launching debug builds on productions devices when
- <code>debuggable=true</code> was not set in the Android manifest.</li>
+ <code>debuggable=true</code> was not set in the Android manifest.</li>
<li>The LogCat view in DDMS properly handles UTF-8 characters.</li>
<li>The SDK Manager is more reliable on Windows
(<a href="http://tools.android.com/recent/sdkmanagerfixes">Details</a>).</li>
- <li>A JUnit initialization bug that prevented you from working with JUnit tests was fixed
- (Issue <a href="http://code.google.com/p/android/issues/detail?id=12411">12411</a>).</li>
+ <li>A JUnit initialization bug that prevented you from working with JUnit tests was fixed
+ (Issue <a href="http://code.google.com/p/android/issues/detail?id=12411">12411</a>).</li>
</ul>
</li>
</ul>
@@ -828,7 +946,7 @@
<ul>
<li>If Eclipse is already installed on your computer, make sure that it is
-a version that is compatible with ADT and the Android SDK.
+a version that is compatible with ADT and the Android SDK.
<li>If you need to install or update Eclipse, you can download it from this
location:
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 105c868..065f41b 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,21 +1,21 @@
page.title=Android SDK
sdk.redirect=0
-sdk.win_installer=installer_r13-windows.exe
-sdk.win_installer_bytes=36533357
-sdk.win_installer_checksum=cd3a76fe2b8ed62b2d03cf1851692e2d
+sdk.win_installer=installer_r14-windows.exe
+sdk.win_installer_bytes=33860145
+sdk.win_installer_checksum=7a563491bf4671d09b9da0dcde85f212
-sdk.win_download=android-sdk_r13-windows.zip
-sdk.win_bytes=36487911
-sdk.win_checksum=de8a039891e5e65b7742f188f07b992d
+sdk.win_download=android-sdk_r14-windows.zip
+sdk.win_bytes=33852972
+sdk.win_checksum=d1381a0cc8e6f9358174aa6d051ba379
-sdk.mac_download=android-sdk_r13-mac_x86.zip
-sdk.mac_bytes=30233944
-sdk.mac_checksum=f4002a0344b48856c09dec796acecd4d
+sdk.mac_download=android-sdk_r14-macosx.zip
+sdk.mac_bytes=30426052
+sdk.mac_checksum=df0a5c5b5327ffcaf256ce735998e12a
-sdk.linux_download=android-sdk_r13-linux_x86.tgz
-sdk.linux_bytes=30034328
-sdk.linux_checksum=d80d7530a46c665644ae76084a9a0dc4
+sdk.linux_download=android-sdk_r14-linux.tgz
+sdk.linux_bytes=26083315
+sdk.linux_checksum=2049d5c1a164fcae47a5e93c52200752
@jd:body
@@ -39,7 +39,7 @@
<style type="text/css">
.offline-message { display:none; }
</style>
-
+
<p class="offline-message">For more information about how to set up your
development environment, read the guide to <a href="installing.html">Installing the SDK</a>.</p>
diff --git a/docs/html/sdk/oem-usb.jd b/docs/html/sdk/oem-usb.jd
index ad3be4a..88bf008 100644
--- a/docs/html/sdk/oem-usb.jd
+++ b/docs/html/sdk/oem-usb.jd
@@ -55,6 +55,14 @@
</tr>
<tr>
<td>
+ Fujitsu
+ </td>
+ <td><a
+href="http://www.fmworld.net/product/phone/sp/android/develop/">http://www.fmworld.net/product/phone/sp/android/develop/</a>
+ </td>
+ </tr>
+ <tr>
+ <td>
Fujitsu Toshiba
</td>
<td><a
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 8a57312..9bc9b9a 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -22,7 +22,7 @@
<span style="display:none" class="ja">ダウンロード</span>
<span style="display:none" class="zh-CN">下载</span>
<span style="display:none" class="zh-TW">下載</span>
- </a></li><?cs
+ </a></li><?cs
/if ?>
<li><a href="<?cs var:toroot ?>sdk/installing.html">
<span class="en">Installing the SDK</span>
@@ -76,6 +76,14 @@
</ul>
<ul>
<li class="toggle-list">
+ <div><a href="<?cs var:toroot ?>sdk/android-4.0.html">
+ <span class="en">Android 4.0 Platform</span></a> <span class="new">new!</span></div>
+ <ul>
+ <!-- <li><a href="<?cs var:toroot ?>sdk/android-4.0-highlights.html">Platform Highlights</a></li> -->
+ <li><a href="<?cs var:toroot ?>sdk/api_diff/14/changes.html">API Differences Report »</a></li>
+ </ul>
+ </li>
+ <li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-3.2.html">
<span class="en">Android 3.2 Platform</span></a></div>
<ul>
@@ -87,7 +95,7 @@
<div><a href="<?cs var:toroot ?>sdk/android-3.1.html">
<span class="en">Android 3.1 Platform</span></a></div>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/android-3.1-highlights.html">Platform Highlights</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/android-3.1-highlights.html">Platform Highlights</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/12/changes.html">API Differences Report »</a></li>
</ul>
</li>
@@ -95,7 +103,7 @@
<div><a href="<?cs var:toroot ?>sdk/android-3.0.html">
<span class="en">Android 3.0 Platform</span></a></div>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/11/changes.html">API Differences Report »</a></li>
</ul>
</li>
@@ -104,14 +112,14 @@
<div><a href="<?cs var:toroot ?>sdk/android-2.3.3.html">
<span class="en">Android 2.3.3 Platform</span></a></div>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/api_diff/10/changes.html">API Differences Report »</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/api_diff/10/changes.html">API Differences Report »</a></li>
</ul>
</li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-2.2.html">
<span class="en">Android 2.2 Platform</span></a></div>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/android-2.2-highlights.html">Platform Highlights</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/android-2.2-highlights.html">Platform Highlights</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/8/changes.html">API Differences Report »</a></li>
</ul>
</li>
@@ -129,8 +137,8 @@
<div><a href="<?cs var:toroot ?>sdk/android-2.3.html">
<span class="en">Android 2.3 Platform</span></a></div>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/android-2.3-highlights.html">Platform Highlights</a></li>
- <li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report »</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/android-2.3-highlights.html">Platform Highlights</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report »</a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>sdk/android-2.0.1.html">Android 2.0.1 Platform</a></li>
@@ -142,7 +150,7 @@
</li>
</ul>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r13</a> <span
+ <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r14</a> <span
class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
<li><a href="<?cs var:toroot ?>sdk/compatibility-library.html">Compatibility Package,
@@ -161,14 +169,15 @@
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 12.0.0
+ <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 14.0.0
<span style="display:none" class="de"></span>
<span style="display:none" class="es"></span>
<span style="display:none" class="fr"></span>
<span style="display:none" class="it"></span>
<span style="display:none" class="ja"></span>
<span style="display:none" class="zh-CN"></span>
- <span style="display:none" class="zh-TW"></span></a>
+ <span style="display:none" class="zh-TW"></span></a> <span
+class="new">new!</span>
</li>
</ul>
</li>
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
index 2179cec..2d044ed 100644
--- a/docs/html/sdk/tools-notes.jd
+++ b/docs/html/sdk/tools-notes.jd
@@ -2,7 +2,7 @@
@jd:body
<p>SDK Tools is a downloadable component for the Android SDK. It includes the
-complete set of development and debugging tools for the Android SDK. </p>
+complete set of development and debugging tools for the Android SDK.</p>
<p>If you are new to the Android SDK, the <a
href="{@docRoot}sdk/index.html">SDK starter package</a> installs the
@@ -13,7 +13,7 @@
update, rather than downloading a new SDK starter package. For more information
about how to update, see <a
href="{@docRoot}sdk/adding-components.html#UpdatingComponents">Updating SDK
-Components</a>. </p>
+Components</a>.</p>
<h2 id="notes">Revisions</h2>
@@ -62,10 +62,56 @@
}
</style>
-
<div class="toggleable opened">
<a href="#" onclick="return toggleDiv(this)">
- <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
+ <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
+ width="9px" />SDK Tools, Revision 14</a> <em>(October 2011)</em>
+ <div class="toggleme">
+ <dl>
+<dt>Dependencies:</dt>
+<dd>
+ <ul><li>Android SDK Platform-tools revision 8 or later.</li>
+ <li>If you are developing in Eclipse with ADT, note that the SDK Tools r14 is designed for use
+ with ADT 14.0.0 and later. If you haven't already, we highly recommend updating your <a
+ href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 14.0.0.</li>
+ <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+ Ant</a> 1.8 or later.</li>
+</ul>
+
+<dt>General notes:</dt>
+<dd>
+ <ul>
+ <li>Changed <code>default.properties</code> to <code>project.properties</code> and
+ <code>build.properties</code> to <code>ant.properties</code>. Any existing
+ projects that you build with Ant must be updated with the <code>android update project</code>
+ command.</li>
+ <li>Changed Ant <code>build.xml</code> file to support improvements to the
+ build system and added and modified Ant commands to support these changes. For a list of Ant
+commands, see the
+<a href="{@docRoot}guide/developing/building/building-cmdline.html#AntReference">Ant Command
+Reference</a>.</li>
+
+ <li>Changed how library projects are built.</a></li>
+ <li>Improved incremental builds, so that resource compilation runs less frequently. Builds no
+ longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
+ run once for each library project.</li>
+ <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
+ crunching all existing PNG files, all the time.</li>
+ <li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
+info</a>).</li>
+ </ul>
+ <p>For a complete overview of the build system changes and what you need to do to support them,
+see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
+site</a>.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+ <a href="#" onclick="return toggleDiv(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+ width="9px" />
SDK Tools, Revision 13</a> <em>(September 2011)</em>
<div class="toggleme">
<dl>
diff --git a/docs/html/search.jd b/docs/html/search.jd
index 339ce2d..407bc86 100644
--- a/docs/html/search.jd
+++ b/docs/html/search.jd
@@ -64,11 +64,14 @@
// upon ajax search, refresh the url and search title
searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
+ $("#searchTitle").html("search results for <em>" + escapeHTML(query) + "</em>");
+
// save the tab index from the hash
tabIndex = location.hash.split("&t=")[1];
-
- $("#searchTitle").html("search results for <em>" + escapeHTML(query) + "</em>");
$.history.add('q=' + query + '&t=' + tabIndex);
+ });
+
+ searchControl.setSearchCompleteCallback(this, function(control, searcher) {
openTab();
});
diff --git a/docs/html/shareables/icon_templates-v4.0.zip b/docs/html/shareables/icon_templates-v4.0.zip
new file mode 100644
index 0000000..49e629f
--- /dev/null
+++ b/docs/html/shareables/icon_templates-v4.0.zip
Binary files differ
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index de0fabc..50964d5 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -285,7 +285,7 @@
of the fill (if any) without worrying about blending artifacts.
*/
final boolean useLayer = haveStroke && haveFill && st.mShape != LINE &&
- currStrokeAlpha < 255;
+ currStrokeAlpha < 255 && (mAlpha < 255 || mColorFilter != null);
/* Drawing with a layer is slower than direct drawing, but it
allows us to apply paint effects like alpha and colorfilter to
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index e2950d5e..d3d65a3 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -865,13 +865,7 @@
}
static int getTargetSdkVersion(Context ctx) {
- try {
- PackageManager pm = ctx.getPackageManager();
- ApplicationInfo app = pm.getApplicationInfo(ctx.getPackageName(), 0);
- return app.targetSdkVersion;
- } catch (Exception e) {
- throw new RSDriverException("Error calculating target SDK version for RS.");
- }
+ return ctx.getApplicationInfo().targetSdkVersion;
}
/**
diff --git a/include/android_runtime/AndroidRuntime.h b/include/android_runtime/AndroidRuntime.h
index 32cd4f5..fd33d59 100644
--- a/include/android_runtime/AndroidRuntime.h
+++ b/include/android_runtime/AndroidRuntime.h
@@ -31,8 +31,6 @@
namespace android {
-class CursorWindow;
-
class AndroidRuntime
{
public:
@@ -133,8 +131,6 @@
static int javaThreadShell(void* args);
};
-extern CursorWindow * get_window_from_object(JNIEnv * env, jobject javaWindow);
-
}
#endif
diff --git a/include/binder/CursorWindow.h b/include/binder/CursorWindow.h
index f0b2909..5d490ed 100644
--- a/include/binder/CursorWindow.h
+++ b/include/binder/CursorWindow.h
@@ -21,18 +21,8 @@
#include <stddef.h>
#include <stdint.h>
-#include <binder/IMemory.h>
-#include <utils/RefBase.h>
-
-#define DEFAULT_WINDOW_SIZE 4096
-#define WINDOW_ALLOCATION_SIZE 4096
-
-#define ROW_SLOT_CHUNK_NUM_ROWS 16
-
-// Row slots are allocated in chunks of ROW_SLOT_CHUNK_NUM_ROWS,
-// with an offset after the rows that points to the next chunk
-#define ROW_SLOT_CHUNK_SIZE ((ROW_SLOT_CHUNK_NUM_ROWS * sizeof(row_slot_t)) + sizeof(uint32_t))
-
+#include <binder/Parcel.h>
+#include <utils/String8.h>
#if LOG_NDEBUG
@@ -46,152 +36,157 @@
#endif
-
-// When defined to true strings are stored as UTF8, otherwise they're UTF16
-#define WINDOW_STORAGE_UTF8 1
-
-// When defined to true numberic values are stored inline in the field_slot_t, otherwise they're allocated in the window
-#define WINDOW_STORAGE_INLINE_NUMERICS 1
-
namespace android {
-typedef struct
-{
- uint32_t numRows;
- uint32_t numColumns;
-} window_header_t;
-
-typedef struct
-{
- uint32_t offset;
-} row_slot_t;
-
-typedef struct
-{
- uint8_t type;
- union {
- double d;
- int64_t l;
- struct {
- uint32_t offset;
- uint32_t size;
- } buffer;
- } data;
-} __attribute__((packed)) field_slot_t;
-
-#define FIELD_TYPE_NULL 0
-#define FIELD_TYPE_INTEGER 1
-#define FIELD_TYPE_FLOAT 2
-#define FIELD_TYPE_STRING 3
-#define FIELD_TYPE_BLOB 4
-
/**
* This class stores a set of rows from a database in a buffer. The begining of the
- * window has first chunk of row_slot_ts, which are offsets to the row directory, followed by
- * an offset to the next chunk in a linked-list of additional chunk of row_slot_ts in case
+ * window has first chunk of RowSlots, which are offsets to the row directory, followed by
+ * an offset to the next chunk in a linked-list of additional chunk of RowSlots in case
* the pre-allocated chunk isn't big enough to refer to all rows. Each row directory has a
- * field_slot_t per column, which has the size, offset, and type of the data for that field.
+ * FieldSlot per column, which has the size, offset, and type of the data for that field.
* Note that the data types come from sqlite3.h.
+ *
+ * Strings are stored in UTF-8.
*/
-class CursorWindow
-{
+class CursorWindow {
+ CursorWindow(const String8& name, int ashmemFd,
+ void* data, size_t size, bool readOnly);
+
public:
- CursorWindow(size_t maxSize);
- CursorWindow(){}
- bool setMemory(const sp<IMemory>&);
- ~CursorWindow();
+ /* Field types. */
+ enum {
+ FIELD_TYPE_NULL = 0,
+ FIELD_TYPE_INTEGER = 1,
+ FIELD_TYPE_FLOAT = 2,
+ FIELD_TYPE_STRING = 3,
+ FIELD_TYPE_BLOB = 4,
+ };
- bool initBuffer(bool localOnly);
- sp<IMemory> getMemory() {return mMemory;}
+ /* Opaque type that describes a field slot. */
+ struct FieldSlot {
+ private:
+ int32_t type;
+ union {
+ double d;
+ int64_t l;
+ struct {
+ uint32_t offset;
+ uint32_t size;
+ } buffer;
+ } data;
- size_t size() {return mSize;}
- uint8_t * data() {return mData;}
- uint32_t getNumRows() {return mHeader->numRows;}
- uint32_t getNumColumns() {return mHeader->numColumns;}
- void freeLastRow() {
- if (mHeader->numRows > 0) {
- mHeader->numRows--;
- }
- }
- bool setNumColumns(uint32_t numColumns)
- {
- uint32_t cur = mHeader->numColumns;
- if (cur > 0 && cur != numColumns) {
- LOGE("Trying to go from %d columns to %d", cur, numColumns);
- return false;
- }
- mHeader->numColumns = numColumns;
- return true;
- }
+ friend class CursorWindow;
+ } __attribute((packed));
- int32_t freeSpace();
+ ~CursorWindow();
- void clear();
+ static status_t create(const String8& name, size_t size, bool localOnly,
+ CursorWindow** outCursorWindow);
+ static status_t createFromParcel(Parcel* parcel, CursorWindow** outCursorWindow);
- /**
- * Allocate a row slot and its directory. The returned
- * pointer points to the begining of the row's directory
- * or NULL if there wasn't room. The directory is
- * initialied with NULL entries for each field.
- */
- field_slot_t * allocRow();
+ status_t writeToParcel(Parcel* parcel);
- /**
- * Allocate a portion of the window. Returns the offset
- * of the allocation, or 0 if there isn't enough space.
- * If aligned is true, the allocation gets 4 byte alignment.
- */
- uint32_t alloc(size_t size, bool aligned = false);
+ inline String8 name() { return mName; }
+ inline size_t size() { return mSize; }
+ inline size_t freeSpace() { return mSize - mHeader->freeOffset; }
+ inline uint32_t getNumRows() { return mHeader->numRows; }
+ inline uint32_t getNumColumns() { return mHeader->numColumns; }
- uint32_t read_field_slot(int row, int column, field_slot_t * slot);
-
- /**
- * Copy data into the window at the given offset.
- */
- void copyIn(uint32_t offset, uint8_t const * data, size_t size);
- void copyIn(uint32_t offset, int64_t data);
- void copyIn(uint32_t offset, double data);
-
- void copyOut(uint32_t offset, uint8_t * data, size_t size);
- int64_t copyOutLong(uint32_t offset);
- double copyOutDouble(uint32_t offset);
-
- bool putLong(unsigned int row, unsigned int col, int64_t value);
- bool putDouble(unsigned int row, unsigned int col, double value);
- bool putNull(unsigned int row, unsigned int col);
-
- bool getLong(unsigned int row, unsigned int col, int64_t * valueOut);
- bool getDouble(unsigned int row, unsigned int col, double * valueOut);
- bool getNull(unsigned int row, unsigned int col, bool * valueOut);
-
- uint8_t * offsetToPtr(uint32_t offset) {return mData + offset;}
-
- row_slot_t * allocRowSlot();
-
- row_slot_t * getRowSlot(int row);
-
- /**
- * return NULL if Failed to find rowSlot or
- * Invalid rowSlot
- */
- field_slot_t * getFieldSlotWithCheck(int row, int column);
- field_slot_t * getFieldSlot(int row, int column)
- {
- int fieldDirOffset = getRowSlot(row)->offset;
- return ((field_slot_t *)offsetToPtr(fieldDirOffset)) + column;
- }
-
-private:
- uint8_t * mData;
- size_t mSize;
- size_t mMaxSize;
- window_header_t * mHeader;
- sp<IMemory> mMemory;
+ status_t clear();
+ status_t setNumColumns(uint32_t numColumns);
/**
- * Offset of the lowest unused data byte in the array.
+ * Allocate a row slot and its directory.
+ * The row is initialized will null entries for each field.
*/
- uint32_t mFreeOffset;
+ status_t allocRow();
+ status_t freeLastRow();
+
+ status_t putBlob(uint32_t row, uint32_t column, const void* value, size_t size);
+ status_t putString(uint32_t row, uint32_t column, const char* value, size_t sizeIncludingNull);
+ status_t putLong(uint32_t row, uint32_t column, int64_t value);
+ status_t putDouble(uint32_t row, uint32_t column, double value);
+ status_t putNull(uint32_t row, uint32_t column);
+
+ /**
+ * Gets the field slot at the specified row and column.
+ * Returns null if the requested row or column is not in the window.
+ */
+ FieldSlot* getFieldSlot(uint32_t row, uint32_t column);
+
+ inline int32_t getFieldSlotType(FieldSlot* fieldSlot) {
+ return fieldSlot->type;
+ }
+
+ inline int64_t getFieldSlotValueLong(FieldSlot* fieldSlot) {
+ return fieldSlot->data.l;
+ }
+
+ inline double getFieldSlotValueDouble(FieldSlot* fieldSlot) {
+ return fieldSlot->data.d;
+ }
+
+ inline const char* getFieldSlotValueString(FieldSlot* fieldSlot,
+ size_t* outSizeIncludingNull) {
+ *outSizeIncludingNull = fieldSlot->data.buffer.size;
+ return static_cast<char*>(offsetToPtr(fieldSlot->data.buffer.offset));
+ }
+
+ inline const void* getFieldSlotValueBlob(FieldSlot* fieldSlot, size_t* outSize) {
+ *outSize = fieldSlot->data.buffer.size;
+ return offsetToPtr(fieldSlot->data.buffer.offset);
+ }
+
+private:
+ static const size_t ROW_SLOT_CHUNK_NUM_ROWS = 100;
+
+ struct Header {
+ // Offset of the lowest unused byte in the window.
+ uint32_t freeOffset;
+
+ // Offset of the first row slot chunk.
+ uint32_t firstChunkOffset;
+
+ uint32_t numRows;
+ uint32_t numColumns;
+ };
+
+ struct RowSlot {
+ uint32_t offset;
+ };
+
+ struct RowSlotChunk {
+ RowSlot slots[ROW_SLOT_CHUNK_NUM_ROWS];
+ uint32_t nextChunkOffset;
+ };
+
+ String8 mName;
+ int mAshmemFd;
+ void* mData;
+ size_t mSize;
+ bool mReadOnly;
+ Header* mHeader;
+
+ inline void* offsetToPtr(uint32_t offset) {
+ return static_cast<uint8_t*>(mData) + offset;
+ }
+
+ inline uint32_t offsetFromPtr(void* ptr) {
+ return static_cast<uint8_t*>(ptr) - static_cast<uint8_t*>(mData);
+ }
+
+ /**
+ * Allocate a portion of the window. Returns the offset
+ * of the allocation, or 0 if there isn't enough space.
+ * If aligned is true, the allocation gets 4 byte alignment.
+ */
+ uint32_t alloc(size_t size, bool aligned = false);
+
+ RowSlot* getRowSlot(uint32_t row);
+ RowSlot* allocRowSlot();
+
+ status_t putBlobOrString(uint32_t row, uint32_t column,
+ const void* value, size_t size, int32_t type);
};
}; // namespace android
diff --git a/include/binder/Parcel.h b/include/binder/Parcel.h
index bfe13f0..3fa2acb 100644
--- a/include/binder/Parcel.h
+++ b/include/binder/Parcel.h
@@ -38,6 +38,9 @@
class Parcel
{
public:
+ class ReadableBlob;
+ class WritableBlob;
+
Parcel();
~Parcel();
@@ -46,7 +49,7 @@
size_t dataAvail() const;
size_t dataPosition() const;
size_t dataCapacity() const;
-
+
status_t setDataSize(size_t size);
void setDataPosition(size_t pos) const;
status_t setDataCapacity(size_t size);
@@ -56,6 +59,9 @@
status_t appendFrom(const Parcel *parcel,
size_t start, size_t len);
+ bool pushAllowFds(bool allowFds);
+ void restoreAllowFds(bool lastValue);
+
bool hasFileDescriptors() const;
// Writes the RPC header.
@@ -109,7 +115,13 @@
// Place a file descriptor into the parcel. A dup of the fd is made, which
// will be closed once the parcel is destroyed.
status_t writeDupFileDescriptor(int fd);
-
+
+ // Writes a blob to the parcel.
+ // If the blob is small, then it is stored in-place, otherwise it is
+ // transferred by way of an anonymous shared memory region.
+ // The caller should call release() on the blob after writing its contents.
+ status_t writeBlob(size_t len, WritableBlob* outBlob);
+
status_t writeObject(const flat_binder_object& val, bool nullMetaData);
// Like Parcel.java's writeNoException(). Just writes a zero int32.
@@ -157,7 +169,11 @@
// Retrieve a file descriptor from the parcel. This returns the raw fd
// in the parcel, which you do not own -- use dup() to get your own copy.
int readFileDescriptor() const;
-
+
+ // Reads a blob from the parcel.
+ // The caller should call release() on the blob after reading its contents.
+ status_t readBlob(size_t len, ReadableBlob* outBlob) const;
+
const flat_binder_object* readObject(bool nullMetaData) const;
// Explicitly close all file descriptors in the parcel.
@@ -177,7 +193,7 @@
release_func relFunc, void* relCookie);
void print(TextOutput& to, uint32_t flags = 0) const;
-
+
private:
Parcel(const Parcel& o);
Parcel& operator=(const Parcel& o);
@@ -212,9 +228,40 @@
mutable bool mFdsKnown;
mutable bool mHasFds;
+ bool mAllowFds;
release_func mOwner;
void* mOwnerCookie;
+
+ class Blob {
+ public:
+ Blob();
+ ~Blob();
+
+ void release();
+ inline size_t size() const { return mSize; }
+
+ protected:
+ void init(bool mapped, void* data, size_t size);
+ void clear();
+
+ bool mMapped;
+ void* mData;
+ size_t mSize;
+ };
+
+public:
+ class ReadableBlob : public Blob {
+ friend class Parcel;
+ public:
+ inline const void* data() const { return mData; }
+ };
+
+ class WritableBlob : public Blob {
+ friend class Parcel;
+ public:
+ inline void* data() { return mData; }
+ };
};
// ---------------------------------------------------------------------------
diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h
index a520a6a..ef4cf5c 100644
--- a/include/camera/CameraParameters.h
+++ b/include/camera/CameraParameters.h
@@ -283,7 +283,8 @@
// outside the current field of view, even when using zoom.
//
// Focus area only has effect if the current focus mode is FOCUS_MODE_AUTO,
- // FOCUS_MODE_MACRO, or FOCUS_MODE_CONTINOUS_VIDEO.
+ // FOCUS_MODE_MACRO, FOCUS_MODE_CONTINUOUS_VIDEO, or
+ // FOCUS_MODE_CONTINUOUS_PICTURE.
// Example value: "(-10,-10,0,0,300),(0,0,10,10,700)". Read/write.
static const char KEY_FOCUS_AREAS[];
// Focal length in millimeter.
@@ -504,6 +505,25 @@
// Example value: "true" or "false". Read only.
static const char KEY_VIDEO_SNAPSHOT_SUPPORTED[];
+ // The state of the video stabilization. If set to true, both the
+ // preview stream and the recorded video stream are stabilized by
+ // the camera. Only valid to set if KEY_VIDEO_STABILIZATION_SUPPORTED is
+ // set to true.
+ //
+ // The value of this key can be changed any time the camera is
+ // open. If preview or recording is active, it is acceptable for
+ // there to be a slight video glitch when video stabilization is
+ // toggled on and off.
+ //
+ // This only stabilizes video streams (between-frames stabilization), and
+ // has no effect on still image capture.
+ static const char KEY_VIDEO_STABILIZATION[];
+
+ // Returns true if video stabilization is supported. That is, applications
+ // can set KEY_VIDEO_STABILIZATION to true and have a stabilized preview
+ // stream and record stabilized videos.
+ static const char KEY_VIDEO_STABILIZATION_SUPPORTED[];
+
// Value for KEY_ZOOM_SUPPORTED or KEY_SMOOTH_ZOOM_SUPPORTED.
static const char TRUE[];
static const char FALSE[];
@@ -610,19 +630,29 @@
// recording because the focus changes smoothly . Applications still can
// call CameraHardwareInterface.takePicture in this mode but the subject may
// not be in focus. Auto focus starts when the parameter is set.
- // Applications should not call CameraHardwareInterface.autoFocus in this
- // mode. To stop continuous focus, applications should change the focus mode
- // to other modes.
+ //
+ // Applications can call CameraHardwareInterface.autoFocus in this mode. The
+ // focus callback will immediately return with a boolean that indicates
+ // whether the focus is sharp or not. The focus position is locked after
+ // autoFocus call. If applications want to resume the continuous focus,
+ // cancelAutoFocus must be called. Restarting the preview will not resume
+ // the continuous autofocus. To stop continuous focus, applications should
+ // change the focus mode to other modes.
static const char FOCUS_MODE_CONTINUOUS_VIDEO[];
// Continuous auto focus mode intended for taking pictures. The camera
// continuously tries to focus. The speed of focus change is more aggressive
// than FOCUS_MODE_CONTINUOUS_VIDEO. Auto focus starts when the parameter is
- // set. If applications call autoFocus in this mode, the focus callback will
- // immediately return with a boolean that indicates the focus is sharp or
- // not. The apps can then decide if they want to take a picture immediately
- // or to change the focus mode to auto, and run a full autofocus cycle. To
- // stop continuous focus, applications should change the focus mode to other
- // modes.
+ // set.
+ //
+ // If applications call CameraHardwareInterface.autoFocus in this mode, the
+ // focus callback will immediately return with a boolean that indicates
+ // whether the focus is sharp or not. The apps can then decide if they want
+ // to take a picture immediately or to change the focus mode to auto, and
+ // run a full autofocus cycle. The focus position is locked after autoFocus
+ // call. If applications want to resume the continuous focus,
+ // cancelAutoFocus must be called. Restarting the preview will not resume
+ // the continuous autofocus. To stop continuous focus, applications should
+ // change the focus mode to other modes.
static const char FOCUS_MODE_CONTINUOUS_PICTURE[];
private:
diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h
index 926eb9a..e2d6179 100644
--- a/include/gui/SurfaceTexture.h
+++ b/include/gui/SurfaceTexture.h
@@ -20,6 +20,7 @@
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
#include <gui/ISurfaceTexture.h>
@@ -61,7 +62,8 @@
// tex indicates the name OpenGL texture to which images are to be streamed.
// This texture name cannot be changed once the SurfaceTexture is created.
- SurfaceTexture(GLuint tex, bool allowSynchronousMode = true);
+ SurfaceTexture(GLuint tex, bool allowSynchronousMode = true,
+ GLenum texTarget = GL_TEXTURE_EXTERNAL_OES);
virtual ~SurfaceTexture();
@@ -458,6 +460,14 @@
// member variables are accessed.
mutable Mutex mMutex;
+ // mTexTarget is the GL texture target with which the GL texture object is
+ // associated. It is set in the constructor and never changed. It is
+ // almost always GL_TEXTURE_EXTERNAL_OES except for one use case in Android
+ // Browser. In that case it is set to GL_TEXTURE_2D to allow
+ // glCopyTexSubImage to read from the texture. This is a hack to work
+ // around a GL driver limitation on the number of FBO attachments, which the
+ // browser's tile cache exceeds.
+ const GLenum mTexTarget;
};
// ----------------------------------------------------------------------------
diff --git a/include/media/stagefright/MediaDefs.h b/include/media/stagefright/MediaDefs.h
index 3e48459..2eb259e 100644
--- a/include/media/stagefright/MediaDefs.h
+++ b/include/media/stagefright/MediaDefs.h
@@ -31,7 +31,9 @@
extern const char *MEDIA_MIMETYPE_AUDIO_AMR_NB;
extern const char *MEDIA_MIMETYPE_AUDIO_AMR_WB;
-extern const char *MEDIA_MIMETYPE_AUDIO_MPEG;
+extern const char *MEDIA_MIMETYPE_AUDIO_MPEG; // layer III
+extern const char *MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I;
+extern const char *MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II;
extern const char *MEDIA_MIMETYPE_AUDIO_AAC;
extern const char *MEDIA_MIMETYPE_AUDIO_QCELP;
extern const char *MEDIA_MIMETYPE_AUDIO_VORBIS;
@@ -47,6 +49,7 @@
extern const char *MEDIA_MIMETYPE_CONTAINER_MATROSKA;
extern const char *MEDIA_MIMETYPE_CONTAINER_MPEG2TS;
extern const char *MEDIA_MIMETYPE_CONTAINER_AVI;
+extern const char *MEDIA_MIMETYPE_CONTAINER_MPEG2PS;
extern const char *MEDIA_MIMETYPE_CONTAINER_WVM;
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h
index 8baf5ec..0d5a726 100644
--- a/include/media/stagefright/OMXCodec.h
+++ b/include/media/stagefright/OMXCodec.h
@@ -228,7 +228,7 @@
void setComponentRole();
void setAMRFormat(bool isWAMR, int32_t bitRate);
- void setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate);
+ status_t setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate);
void setG711Format(int32_t numChannels);
status_t setVideoPortFormatType(
@@ -319,6 +319,8 @@
void initOutputFormat(const sp<MetaData> &inputFormat);
status_t initNativeWindow();
+ void initNativeWindowCrop();
+
void dumpPortStatus(OMX_U32 portIndex);
status_t configureCodec(const sp<MetaData> &meta);
diff --git a/include/surfaceflinger/ISurfaceComposer.h b/include/surfaceflinger/ISurfaceComposer.h
index e0f4cf9..ea022a6 100644
--- a/include/surfaceflinger/ISurfaceComposer.h
+++ b/include/surfaceflinger/ISurfaceComposer.h
@@ -80,6 +80,7 @@
eOrientation90 = 1,
eOrientation180 = 2,
eOrientation270 = 3,
+ eOrientationUnchanged = 4,
eOrientationSwapMask = 0x01
};
@@ -101,15 +102,8 @@
virtual sp<IMemoryHeap> getCblk() const = 0;
/* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
- virtual void setTransactionState(const Vector<ComposerState>& state) = 0;
-
- /* [un]freeze display. requires ACCESS_SURFACE_FLINGER permission */
- virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
- virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;
-
- /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission
- * No flags are currently defined. Set flags to 0. */
- virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) = 0;
+ virtual void setTransactionState(const Vector<ComposerState>& state,
+ int orientation) = 0;
/* signal that we're done booting.
* Requires ACCESS_SURFACE_FLINGER permission
diff --git a/include/surfaceflinger/SurfaceComposerClient.h b/include/surfaceflinger/SurfaceComposerClient.h
index ace0735..14e5b23 100644
--- a/include/surfaceflinger/SurfaceComposerClient.h
+++ b/include/surfaceflinger/SurfaceComposerClient.h
@@ -195,4 +195,3 @@
}; // namespace android
#endif // ANDROID_SF_SURFACE_COMPOSER_CLIENT_H
-
diff --git a/include/utils/Errors.h b/include/utils/Errors.h
index 81f818b..0b75b19 100644
--- a/include/utils/Errors.h
+++ b/include/utils/Errors.h
@@ -72,6 +72,7 @@
TIMED_OUT = 0x80000005,
UNKNOWN_TRANSACTION = 0x80000006,
#endif
+ FDS_NOT_ALLOWED = 0x80000007,
};
// Restore define; enumeration is in "android" namespace, so the value defined
diff --git a/include/utils/Singleton.h b/include/utils/Singleton.h
index e1ee8eb..a42ce21 100644
--- a/include/utils/Singleton.h
+++ b/include/utils/Singleton.h
@@ -20,12 +20,13 @@
#include <stdint.h>
#include <sys/types.h>
#include <utils/threads.h>
+#include <cutils/compiler.h>
namespace android {
// ---------------------------------------------------------------------------
template <typename TYPE>
-class Singleton
+class ANDROID_API Singleton
{
public:
static TYPE& getInstance() {
diff --git a/include/utils/Unicode.h b/include/utils/Unicode.h
index 6afb291..9273533 100644
--- a/include/utils/Unicode.h
+++ b/include/utils/Unicode.h
@@ -150,6 +150,13 @@
ssize_t utf8_to_utf16_length(const uint8_t* src, size_t srcLen);
/**
+ * Convert UTF-8 to UTF-16 including surrogate pairs.
+ * Returns a pointer to the end of the string (where a null terminator might go
+ * if you wanted to add one).
+ */
+char16_t* utf8_to_utf16_no_null_terminator(const uint8_t* src, size_t srcLen, char16_t* dst);
+
+/**
* Convert UTF-8 to UTF-16 including surrogate pairs. The destination buffer
* must be large enough to hold the result as measured by utf8_to_utf16_length
* plus an added NULL terminator.
diff --git a/libs/binder/CursorWindow.cpp b/libs/binder/CursorWindow.cpp
index 47bbd04..1b85a71 100644
--- a/libs/binder/CursorWindow.cpp
+++ b/libs/binder/CursorWindow.cpp
@@ -19,8 +19,9 @@
#include <utils/Log.h>
#include <binder/CursorWindow.h>
-#include <binder/MemoryHeapBase.h>
-#include <binder/MemoryBase.h>
+
+#include <cutils/ashmem.h>
+#include <sys/mman.h>
#include <assert.h>
#include <string.h>
@@ -28,385 +29,325 @@
namespace android {
-CursorWindow::CursorWindow(size_t maxSize) :
- mMaxSize(maxSize)
-{
+CursorWindow::CursorWindow(const String8& name, int ashmemFd,
+ void* data, size_t size, bool readOnly) :
+ mName(name), mAshmemFd(ashmemFd), mData(data), mSize(size), mReadOnly(readOnly) {
+ mHeader = static_cast<Header*>(mData);
}
-bool CursorWindow::setMemory(const sp<IMemory>& memory)
-{
- mMemory = memory;
- mData = (uint8_t *) memory->pointer();
- if (mData == NULL) {
- return false;
- }
- mHeader = (window_header_t *) mData;
-
- // Make the window read-only
- ssize_t size = memory->size();
- mSize = size;
- mMaxSize = size;
- mFreeOffset = size;
-LOG_WINDOW("Created CursorWindow from existing IMemory: mFreeOffset = %d, numRows = %d, numColumns = %d, mSize = %d, mMaxSize = %d, mData = %p", mFreeOffset, mHeader->numRows, mHeader->numColumns, mSize, mMaxSize, mData);
- return true;
+CursorWindow::~CursorWindow() {
+ ::munmap(mData, mSize);
+ ::close(mAshmemFd);
}
-bool CursorWindow::initBuffer(bool localOnly)
-{
- //TODO Use a non-memory dealer mmap region for localOnly
+status_t CursorWindow::create(const String8& name, size_t size, bool localOnly,
+ CursorWindow** outCursorWindow) {
+ String8 ashmemName("CursorWindow: ");
+ ashmemName.append(name);
+ ashmemName.append(localOnly ? " (local)" : " (remote)");
- sp<MemoryHeapBase> heap;
- heap = new MemoryHeapBase(mMaxSize, 0, "CursorWindow");
- if (heap != NULL) {
- mMemory = new MemoryBase(heap, 0, mMaxSize);
- if (mMemory != NULL) {
- mData = (uint8_t *) mMemory->pointer();
- if (mData) {
- mHeader = (window_header_t *) mData;
- mSize = mMaxSize;
-
- // Put the window into a clean state
- clear();
- LOG_WINDOW("Created CursorWindow with new MemoryDealer: mFreeOffset = %d, mSize = %d, mMaxSize = %d, mData = %p", mFreeOffset, mSize, mMaxSize, mData);
- return true;
- }
- }
- LOGE("CursorWindow heap allocation failed");
- return false;
+ status_t result;
+ int ashmemFd = ashmem_create_region(ashmemName.string(), size);
+ if (ashmemFd < 0) {
+ result = -errno;
} else {
- LOGE("failed to create the CursorWindow heap");
- return false;
+ result = ashmem_set_prot_region(ashmemFd, PROT_READ | PROT_WRITE);
+ if (result >= 0) {
+ void* data = ::mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFd, 0);
+ if (data == MAP_FAILED) {
+ result = -errno;
+ } else {
+ result = ashmem_set_prot_region(ashmemFd, PROT_READ);
+ if (result >= 0) {
+ CursorWindow* window = new CursorWindow(name, ashmemFd,
+ data, size, false /*readOnly*/);
+ result = window->clear();
+ if (!result) {
+ LOG_WINDOW("Created new CursorWindow: freeOffset=%d, "
+ "numRows=%d, numColumns=%d, mSize=%d, mData=%p",
+ window->mHeader->freeOffset,
+ window->mHeader->numRows,
+ window->mHeader->numColumns,
+ window->mSize, window->mData);
+ *outCursorWindow = window;
+ return OK;
+ }
+ delete window;
+ }
+ }
+ ::munmap(data, size);
+ }
+ ::close(ashmemFd);
}
+ *outCursorWindow = NULL;
+ return result;
}
-CursorWindow::~CursorWindow()
-{
- // Everything that matters is a smart pointer
+status_t CursorWindow::createFromParcel(Parcel* parcel, CursorWindow** outCursorWindow) {
+ String8 name = parcel->readString8();
+
+ status_t result;
+ int ashmemFd = parcel->readFileDescriptor();
+ if (ashmemFd == int(BAD_TYPE)) {
+ result = BAD_TYPE;
+ } else {
+ ssize_t size = ashmem_get_size_region(ashmemFd);
+ if (size < 0) {
+ result = UNKNOWN_ERROR;
+ } else {
+ int dupAshmemFd = ::dup(ashmemFd);
+ if (dupAshmemFd < 0) {
+ result = -errno;
+ } else {
+ void* data = ::mmap(NULL, size, PROT_READ, MAP_SHARED, dupAshmemFd, 0);
+ if (data == MAP_FAILED) {
+ result = -errno;
+ } else {
+ CursorWindow* window = new CursorWindow(name, dupAshmemFd,
+ data, size, true /*readOnly*/);
+ LOG_WINDOW("Created CursorWindow from parcel: freeOffset=%d, "
+ "numRows=%d, numColumns=%d, mSize=%d, mData=%p",
+ window->mHeader->freeOffset,
+ window->mHeader->numRows,
+ window->mHeader->numColumns,
+ window->mSize, window->mData);
+ *outCursorWindow = window;
+ return OK;
+ }
+ ::close(dupAshmemFd);
+ }
+ }
+ }
+ *outCursorWindow = NULL;
+ return result;
}
-void CursorWindow::clear()
-{
+status_t CursorWindow::writeToParcel(Parcel* parcel) {
+ status_t status = parcel->writeString8(mName);
+ if (!status) {
+ status = parcel->writeDupFileDescriptor(mAshmemFd);
+ }
+ return status;
+}
+
+status_t CursorWindow::clear() {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
+ }
+
+ mHeader->freeOffset = sizeof(Header) + sizeof(RowSlotChunk);
+ mHeader->firstChunkOffset = sizeof(Header);
mHeader->numRows = 0;
mHeader->numColumns = 0;
- mFreeOffset = sizeof(window_header_t) + ROW_SLOT_CHUNK_SIZE;
- // Mark the first chunk's next 'pointer' as null
- *((uint32_t *)(mData + mFreeOffset - sizeof(uint32_t))) = 0;
+
+ RowSlotChunk* firstChunk = static_cast<RowSlotChunk*>(offsetToPtr(mHeader->firstChunkOffset));
+ firstChunk->nextChunkOffset = 0;
+ return OK;
}
-int32_t CursorWindow::freeSpace()
-{
- int32_t freeSpace = mSize - mFreeOffset;
- if (freeSpace < 0) {
- freeSpace = 0;
+status_t CursorWindow::setNumColumns(uint32_t numColumns) {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
}
- return freeSpace;
+
+ uint32_t cur = mHeader->numColumns;
+ if ((cur > 0 || mHeader->numRows > 0) && cur != numColumns) {
+ LOGE("Trying to go from %d columns to %d", cur, numColumns);
+ return INVALID_OPERATION;
+ }
+ mHeader->numColumns = numColumns;
+ return OK;
}
-field_slot_t * CursorWindow::allocRow()
-{
+status_t CursorWindow::allocRow() {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
+ }
+
// Fill in the row slot
- row_slot_t * rowSlot = allocRowSlot();
+ RowSlot* rowSlot = allocRowSlot();
if (rowSlot == NULL) {
- return NULL;
+ return NO_MEMORY;
}
// Allocate the slots for the field directory
- size_t fieldDirSize = mHeader->numColumns * sizeof(field_slot_t);
- uint32_t fieldDirOffset = alloc(fieldDirSize);
+ size_t fieldDirSize = mHeader->numColumns * sizeof(FieldSlot);
+ uint32_t fieldDirOffset = alloc(fieldDirSize, true /*aligned*/);
if (!fieldDirOffset) {
mHeader->numRows--;
- LOG_WINDOW("The row failed, so back out the new row accounting from allocRowSlot %d", mHeader->numRows);
- return NULL;
+ LOG_WINDOW("The row failed, so back out the new row accounting "
+ "from allocRowSlot %d", mHeader->numRows);
+ return NO_MEMORY;
}
- field_slot_t * fieldDir = (field_slot_t *)offsetToPtr(fieldDirOffset);
- memset(fieldDir, 0x0, fieldDirSize);
+ FieldSlot* fieldDir = static_cast<FieldSlot*>(offsetToPtr(fieldDirOffset));
+ memset(fieldDir, 0, fieldDirSize);
-LOG_WINDOW("Allocated row %u, rowSlot is at offset %u, fieldDir is %d bytes at offset %u\n", (mHeader->numRows - 1), ((uint8_t *)rowSlot) - mData, fieldDirSize, fieldDirOffset);
+ LOG_WINDOW("Allocated row %u, rowSlot is at offset %u, fieldDir is %d bytes at offset %u\n",
+ mHeader->numRows - 1, offsetFromPtr(rowSlot), fieldDirSize, fieldDirOffset);
rowSlot->offset = fieldDirOffset;
-
- return fieldDir;
+ return OK;
}
-uint32_t CursorWindow::alloc(size_t requestedSize, bool aligned)
-{
- int32_t size;
+status_t CursorWindow::freeLastRow() {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
+ }
+
+ if (mHeader->numRows > 0) {
+ mHeader->numRows--;
+ }
+ return OK;
+}
+
+uint32_t CursorWindow::alloc(size_t size, bool aligned) {
uint32_t padding;
if (aligned) {
// 4 byte alignment
- padding = 4 - (mFreeOffset & 0x3);
+ padding = (~mHeader->freeOffset + 1) & 3;
} else {
padding = 0;
}
- size = requestedSize + padding;
-
- if (size > freeSpace()) {
- LOGV("need to grow: mSize = %d, size = %d, freeSpace() = %d, numRows = %d", mSize, size,
- freeSpace(), mHeader->numRows);
- // Only grow the window if the first row doesn't fit
- if (mHeader->numRows > 1) {
- LOGV("not growing since there are already %d row(s), max size %d", mHeader->numRows,
- mMaxSize);
- return 0;
- }
-
- // Find a new size that will fit the allocation
- int allocated = mSize - freeSpace();
- int newSize = mSize + WINDOW_ALLOCATION_SIZE;
- while (size > (newSize - allocated)) {
- newSize += WINDOW_ALLOCATION_SIZE;
- if (newSize > mMaxSize) {
- LOGE("Attempting to grow window beyond max size (%d)", mMaxSize);
- return 0;
- }
- }
-LOG_WINDOW("found size %d", newSize);
- mSize = newSize;
+ uint32_t offset = mHeader->freeOffset + padding;
+ uint32_t nextFreeOffset = offset + size;
+ if (nextFreeOffset > mSize) {
+ LOGE("Window is full: requested allocation %d bytes, "
+ "free space %d bytes, window size %d bytes",
+ size, freeSpace(), mSize);
+ return 0;
}
- uint32_t offset = mFreeOffset + padding;
- mFreeOffset += size;
+ mHeader->freeOffset = nextFreeOffset;
return offset;
}
-row_slot_t * CursorWindow::getRowSlot(int row)
-{
- LOG_WINDOW("enter getRowSlot current row num %d, this row %d", mHeader->numRows, row);
- int chunkNum = row / ROW_SLOT_CHUNK_NUM_ROWS;
- int chunkPos = row % ROW_SLOT_CHUNK_NUM_ROWS;
- int chunkPtrOffset = sizeof(window_header_t) + ROW_SLOT_CHUNK_SIZE - sizeof(uint32_t);
- uint8_t * rowChunk = mData + sizeof(window_header_t);
- for (int i = 0; i < chunkNum; i++) {
- rowChunk = offsetToPtr(*((uint32_t *)(mData + chunkPtrOffset)));
- chunkPtrOffset = rowChunk - mData + (ROW_SLOT_CHUNK_NUM_ROWS * sizeof(row_slot_t));
+CursorWindow::RowSlot* CursorWindow::getRowSlot(uint32_t row) {
+ uint32_t chunkPos = row;
+ RowSlotChunk* chunk = static_cast<RowSlotChunk*>(
+ offsetToPtr(mHeader->firstChunkOffset));
+ while (chunkPos >= ROW_SLOT_CHUNK_NUM_ROWS) {
+ chunk = static_cast<RowSlotChunk*>(offsetToPtr(chunk->nextChunkOffset));
+ chunkPos -= ROW_SLOT_CHUNK_NUM_ROWS;
}
- return (row_slot_t *)(rowChunk + (chunkPos * sizeof(row_slot_t)));
- LOG_WINDOW("exit getRowSlot current row num %d, this row %d", mHeader->numRows, row);
+ return &chunk->slots[chunkPos];
}
-row_slot_t * CursorWindow::allocRowSlot()
-{
- int chunkNum = mHeader->numRows / ROW_SLOT_CHUNK_NUM_ROWS;
- int chunkPos = mHeader->numRows % ROW_SLOT_CHUNK_NUM_ROWS;
- int chunkPtrOffset = sizeof(window_header_t) + ROW_SLOT_CHUNK_SIZE - sizeof(uint32_t);
- uint8_t * rowChunk = mData + sizeof(window_header_t);
-LOG_WINDOW("Allocating row slot, mHeader->numRows is %d, chunkNum is %d, chunkPos is %d", mHeader->numRows, chunkNum, chunkPos);
- for (int i = 0; i < chunkNum; i++) {
- uint32_t nextChunkOffset = *((uint32_t *)(mData + chunkPtrOffset));
-LOG_WINDOW("nextChunkOffset is %d", nextChunkOffset);
- if (nextChunkOffset == 0) {
- // Allocate a new row chunk
- nextChunkOffset = alloc(ROW_SLOT_CHUNK_SIZE, true);
- if (nextChunkOffset == 0) {
+CursorWindow::RowSlot* CursorWindow::allocRowSlot() {
+ uint32_t chunkPos = mHeader->numRows;
+ RowSlotChunk* chunk = static_cast<RowSlotChunk*>(
+ offsetToPtr(mHeader->firstChunkOffset));
+ while (chunkPos > ROW_SLOT_CHUNK_NUM_ROWS) {
+ chunk = static_cast<RowSlotChunk*>(offsetToPtr(chunk->nextChunkOffset));
+ chunkPos -= ROW_SLOT_CHUNK_NUM_ROWS;
+ }
+ if (chunkPos == ROW_SLOT_CHUNK_NUM_ROWS) {
+ if (!chunk->nextChunkOffset) {
+ chunk->nextChunkOffset = alloc(sizeof(RowSlotChunk), true /*aligned*/);
+ if (!chunk->nextChunkOffset) {
return NULL;
}
- rowChunk = offsetToPtr(nextChunkOffset);
-LOG_WINDOW("allocated new chunk at %d, rowChunk = %p", nextChunkOffset, rowChunk);
- *((uint32_t *)(mData + chunkPtrOffset)) = rowChunk - mData;
- // Mark the new chunk's next 'pointer' as null
- *((uint32_t *)(rowChunk + ROW_SLOT_CHUNK_SIZE - sizeof(uint32_t))) = 0;
- } else {
-LOG_WINDOW("follwing 'pointer' to next chunk, offset of next pointer is %d", chunkPtrOffset);
- rowChunk = offsetToPtr(nextChunkOffset);
- chunkPtrOffset = rowChunk - mData + (ROW_SLOT_CHUNK_NUM_ROWS * sizeof(row_slot_t));
}
+ chunk = static_cast<RowSlotChunk*>(offsetToPtr(chunk->nextChunkOffset));
+ chunk->nextChunkOffset = 0;
+ chunkPos = 0;
}
- mHeader->numRows++;
-
- return (row_slot_t *)(rowChunk + (chunkPos * sizeof(row_slot_t)));
+ mHeader->numRows += 1;
+ return &chunk->slots[chunkPos];
}
-field_slot_t * CursorWindow::getFieldSlotWithCheck(int row, int column)
-{
- if (row < 0 || row >= mHeader->numRows || column < 0 || column >= mHeader->numColumns) {
- LOGE("Failed to read row# %d, column# from a CursorWindow which has %d rows, %d columns.",
- row, column, mHeader->numRows, mHeader->numColumns);
- return NULL;
- }
- row_slot_t * rowSlot = getRowSlot(row);
- if (!rowSlot) {
- LOGE("Failed to find rowSlot for row %d", row);
- return NULL;
- }
- if (rowSlot->offset == 0 || rowSlot->offset >= mSize) {
- LOGE("Invalid rowSlot, offset = %d", rowSlot->offset);
- return NULL;
- }
- int fieldDirOffset = rowSlot->offset;
- return ((field_slot_t *)offsetToPtr(fieldDirOffset)) + column;
-}
-
-uint32_t CursorWindow::read_field_slot(int row, int column, field_slot_t * slotOut)
-{
- if (row < 0 || row >= mHeader->numRows || column < 0 || column >= mHeader->numColumns) {
- LOGE("Can't read row# %d, col# %d from CursorWindow. Make sure your Cursor is initialized correctly.",
- row, column);
- return -1;
- }
- row_slot_t * rowSlot = getRowSlot(row);
+CursorWindow::FieldSlot* CursorWindow::getFieldSlot(uint32_t row, uint32_t column) {
+ if (row >= mHeader->numRows || column >= mHeader->numColumns) {
+ LOGE("Failed to read row %d, column %d from a CursorWindow which "
+ "has %d rows, %d columns.",
+ row, column, mHeader->numRows, mHeader->numColumns);
+ return NULL;
+ }
+ RowSlot* rowSlot = getRowSlot(row);
if (!rowSlot) {
- LOGE("Failed to find rowSlot for row %d", row);
- return -1;
+ LOGE("Failed to find rowSlot for row %d.", row);
+ return NULL;
}
- if (rowSlot->offset == 0 || rowSlot->offset >= mSize) {
- LOGE("Invalid rowSlot, offset = %d", rowSlot->offset);
- return -1;
+ FieldSlot* fieldDir = static_cast<FieldSlot*>(offsetToPtr(rowSlot->offset));
+ return &fieldDir[column];
+}
+
+status_t CursorWindow::putBlob(uint32_t row, uint32_t column, const void* value, size_t size) {
+ return putBlobOrString(row, column, value, size, FIELD_TYPE_BLOB);
+}
+
+status_t CursorWindow::putString(uint32_t row, uint32_t column, const char* value,
+ size_t sizeIncludingNull) {
+ return putBlobOrString(row, column, value, sizeIncludingNull, FIELD_TYPE_STRING);
+}
+
+status_t CursorWindow::putBlobOrString(uint32_t row, uint32_t column,
+ const void* value, size_t size, int32_t type) {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
}
-LOG_WINDOW("Found field directory for %d,%d at rowSlot %d, offset %d", row, column, (uint8_t *)rowSlot - mData, rowSlot->offset);
- field_slot_t * fieldDir = (field_slot_t *)offsetToPtr(rowSlot->offset);
-LOG_WINDOW("Read field_slot_t %d,%d: offset = %d, size = %d, type = %d", row, column, fieldDir[column].data.buffer.offset, fieldDir[column].data.buffer.size, fieldDir[column].type);
- // Copy the data to the out param
- slotOut->data.buffer.offset = fieldDir[column].data.buffer.offset;
- slotOut->data.buffer.size = fieldDir[column].data.buffer.size;
- slotOut->type = fieldDir[column].type;
- return 0;
-}
-
-void CursorWindow::copyIn(uint32_t offset, uint8_t const * data, size_t size)
-{
- assert(offset + size <= mSize);
- memcpy(mData + offset, data, size);
-}
-
-void CursorWindow::copyIn(uint32_t offset, int64_t data)
-{
- assert(offset + sizeof(int64_t) <= mSize);
- memcpy(mData + offset, (uint8_t *)&data, sizeof(int64_t));
-}
-
-void CursorWindow::copyIn(uint32_t offset, double data)
-{
- assert(offset + sizeof(double) <= mSize);
- memcpy(mData + offset, (uint8_t *)&data, sizeof(double));
-}
-
-void CursorWindow::copyOut(uint32_t offset, uint8_t * data, size_t size)
-{
- assert(offset + size <= mSize);
- memcpy(data, mData + offset, size);
-}
-
-int64_t CursorWindow::copyOutLong(uint32_t offset)
-{
- int64_t value;
- assert(offset + sizeof(int64_t) <= mSize);
- memcpy(&value, mData + offset, sizeof(int64_t));
- return value;
-}
-
-double CursorWindow::copyOutDouble(uint32_t offset)
-{
- double value;
- assert(offset + sizeof(double) <= mSize);
- memcpy(&value, mData + offset, sizeof(double));
- return value;
-}
-
-bool CursorWindow::putLong(unsigned int row, unsigned int col, int64_t value)
-{
- field_slot_t * fieldSlot = getFieldSlotWithCheck(row, col);
+ FieldSlot* fieldSlot = getFieldSlot(row, column);
if (!fieldSlot) {
- return false;
+ return BAD_VALUE;
}
-#if WINDOW_STORAGE_INLINE_NUMERICS
- fieldSlot->data.l = value;
-#else
- int offset = alloc(sizeof(int64_t));
+ uint32_t offset = alloc(size);
if (!offset) {
- return false;
+ return NO_MEMORY;
}
- copyIn(offset, value);
+ memcpy(offsetToPtr(offset), value, size);
+ fieldSlot->type = type;
fieldSlot->data.buffer.offset = offset;
- fieldSlot->data.buffer.size = sizeof(int64_t);
-#endif
+ fieldSlot->data.buffer.size = size;
+ return OK;
+}
+
+status_t CursorWindow::putLong(uint32_t row, uint32_t column, int64_t value) {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
+ }
+
+ FieldSlot* fieldSlot = getFieldSlot(row, column);
+ if (!fieldSlot) {
+ return BAD_VALUE;
+ }
+
fieldSlot->type = FIELD_TYPE_INTEGER;
- return true;
+ fieldSlot->data.l = value;
+ return OK;
}
-bool CursorWindow::putDouble(unsigned int row, unsigned int col, double value)
-{
- field_slot_t * fieldSlot = getFieldSlotWithCheck(row, col);
+status_t CursorWindow::putDouble(uint32_t row, uint32_t column, double value) {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
+ }
+
+ FieldSlot* fieldSlot = getFieldSlot(row, column);
if (!fieldSlot) {
- return false;
+ return BAD_VALUE;
}
-#if WINDOW_STORAGE_INLINE_NUMERICS
- fieldSlot->data.d = value;
-#else
- int offset = alloc(sizeof(int64_t));
- if (!offset) {
- return false;
- }
-
- copyIn(offset, value);
-
- fieldSlot->data.buffer.offset = offset;
- fieldSlot->data.buffer.size = sizeof(double);
-#endif
fieldSlot->type = FIELD_TYPE_FLOAT;
- return true;
+ fieldSlot->data.d = value;
+ return OK;
}
-bool CursorWindow::putNull(unsigned int row, unsigned int col)
-{
- field_slot_t * fieldSlot = getFieldSlotWithCheck(row, col);
+status_t CursorWindow::putNull(uint32_t row, uint32_t column) {
+ if (mReadOnly) {
+ return INVALID_OPERATION;
+ }
+
+ FieldSlot* fieldSlot = getFieldSlot(row, column);
if (!fieldSlot) {
- return false;
+ return BAD_VALUE;
}
fieldSlot->type = FIELD_TYPE_NULL;
fieldSlot->data.buffer.offset = 0;
fieldSlot->data.buffer.size = 0;
- return true;
-}
-
-bool CursorWindow::getLong(unsigned int row, unsigned int col, int64_t * valueOut)
-{
- field_slot_t * fieldSlot = getFieldSlotWithCheck(row, col);
- if (!fieldSlot || fieldSlot->type != FIELD_TYPE_INTEGER) {
- return false;
- }
-
-#if WINDOW_STORAGE_INLINE_NUMERICS
- *valueOut = fieldSlot->data.l;
-#else
- *valueOut = copyOutLong(fieldSlot->data.buffer.offset);
-#endif
- return true;
-}
-
-bool CursorWindow::getDouble(unsigned int row, unsigned int col, double * valueOut)
-{
- field_slot_t * fieldSlot = getFieldSlotWithCheck(row, col);
- if (!fieldSlot || fieldSlot->type != FIELD_TYPE_FLOAT) {
- return false;
- }
-
-#if WINDOW_STORAGE_INLINE_NUMERICS
- *valueOut = fieldSlot->data.d;
-#else
- *valueOut = copyOutDouble(fieldSlot->data.buffer.offset);
-#endif
- return true;
-}
-
-bool CursorWindow::getNull(unsigned int row, unsigned int col, bool * valueOut)
-{
- field_slot_t * fieldSlot = getFieldSlotWithCheck(row, col);
- if (!fieldSlot) {
- return false;
- }
-
- if (fieldSlot->type != FIELD_TYPE_NULL) {
- *valueOut = false;
- } else {
- *valueOut = true;
- }
- return true;
+ return OK;
}
}; // namespace android
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index a0fc4d0..c7180ce 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -30,12 +30,14 @@
#include <utils/TextOutput.h>
#include <utils/misc.h>
#include <utils/Flattenable.h>
+#include <cutils/ashmem.h>
#include <private/binder/binder_module.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
+#include <sys/mman.h>
#ifndef INT32_MAX
#define INT32_MAX ((int32_t)(2147483647))
@@ -54,6 +56,9 @@
// Note: must be kept in sync with android/os/Parcel.java's EX_HAS_REPLY_HEADER
#define EX_HAS_REPLY_HEADER -128
+// Maximum size of a blob to transfer in-place.
+static const size_t IN_PLACE_BLOB_LIMIT = 40 * 1024;
+
// XXX This can be made public if we want to provide
// support for typed data.
struct small_flat_data
@@ -399,6 +404,8 @@
mDataPos += len;
mDataSize += len;
+ err = NO_ERROR;
+
if (numObjects > 0) {
// grow objects
if (mObjectsCapacity < mObjectsSize + numObjects) {
@@ -430,11 +437,28 @@
flat->handle = dup(flat->handle);
flat->cookie = (void*)1;
mHasFds = mFdsKnown = true;
+ if (!mAllowFds) {
+ err = FDS_NOT_ALLOWED;
+ }
}
}
}
- return NO_ERROR;
+ return err;
+}
+
+bool Parcel::pushAllowFds(bool allowFds)
+{
+ const bool origValue = mAllowFds;
+ if (!allowFds) {
+ mAllowFds = false;
+ }
+ return origValue;
+}
+
+void Parcel::restoreAllowFds(bool lastValue)
+{
+ mAllowFds = lastValue;
}
bool Parcel::hasFileDescriptors() const
@@ -706,6 +730,54 @@
return writeObject(obj, true);
}
+status_t Parcel::writeBlob(size_t len, WritableBlob* outBlob)
+{
+ status_t status;
+
+ if (!mAllowFds || len <= IN_PLACE_BLOB_LIMIT) {
+ LOGV("writeBlob: write in place");
+ status = writeInt32(0);
+ if (status) return status;
+
+ void* ptr = writeInplace(len);
+ if (!ptr) return NO_MEMORY;
+
+ outBlob->init(false /*mapped*/, ptr, len);
+ return NO_ERROR;
+ }
+
+ LOGV("writeBlob: write to ashmem");
+ int fd = ashmem_create_region("Parcel Blob", len);
+ if (fd < 0) return NO_MEMORY;
+
+ int result = ashmem_set_prot_region(fd, PROT_READ | PROT_WRITE);
+ if (result < 0) {
+ status = result;
+ } else {
+ void* ptr = ::mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (ptr == MAP_FAILED) {
+ status = -errno;
+ } else {
+ result = ashmem_set_prot_region(fd, PROT_READ);
+ if (result < 0) {
+ status = result;
+ } else {
+ status = writeInt32(1);
+ if (!status) {
+ status = writeFileDescriptor(fd);
+ if (!status) {
+ outBlob->init(true /*mapped*/, ptr, len);
+ return NO_ERROR;
+ }
+ }
+ }
+ }
+ ::munmap(ptr, len);
+ }
+ ::close(fd);
+ return status;
+}
+
status_t Parcel::write(const Flattenable& val)
{
status_t err;
@@ -759,6 +831,9 @@
// remember if it's a file descriptor
if (val.type == BINDER_TYPE_FD) {
+ if (!mAllowFds) {
+ return FDS_NOT_ALLOWED;
+ }
mHasFds = mFdsKnown = true;
}
@@ -1025,6 +1100,32 @@
return BAD_TYPE;
}
+status_t Parcel::readBlob(size_t len, ReadableBlob* outBlob) const
+{
+ int32_t useAshmem;
+ status_t status = readInt32(&useAshmem);
+ if (status) return status;
+
+ if (!useAshmem) {
+ LOGV("readBlob: read in place");
+ const void* ptr = readInplace(len);
+ if (!ptr) return BAD_VALUE;
+
+ outBlob->init(false /*mapped*/, const_cast<void*>(ptr), len);
+ return NO_ERROR;
+ }
+
+ LOGV("readBlob: read from ashmem");
+ int fd = readFileDescriptor();
+ if (fd == int(BAD_TYPE)) return BAD_VALUE;
+
+ void* ptr = ::mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0);
+ if (!ptr) return NO_MEMORY;
+
+ outBlob->init(true /*mapped*/, ptr, len);
+ return NO_ERROR;
+}
+
status_t Parcel::read(Flattenable& val) const
{
// size
@@ -1283,6 +1384,7 @@
mNextObjectHint = 0;
mHasFds = false;
mFdsKnown = true;
+ mAllowFds = true;
return NO_ERROR;
}
@@ -1434,6 +1536,7 @@
mNextObjectHint = 0;
mHasFds = false;
mFdsKnown = true;
+ mAllowFds = true;
mOwner = NULL;
}
@@ -1452,4 +1555,33 @@
mFdsKnown = true;
}
+// --- Parcel::Blob ---
+
+Parcel::Blob::Blob() :
+ mMapped(false), mData(NULL), mSize(0) {
+}
+
+Parcel::Blob::~Blob() {
+ release();
+}
+
+void Parcel::Blob::release() {
+ if (mMapped && mData) {
+ ::munmap(mData, mSize);
+ }
+ clear();
+}
+
+void Parcel::Blob::init(bool mapped, void* data, size_t size) {
+ mMapped = mapped;
+ mData = data;
+ mSize = size;
+}
+
+void Parcel::Blob::clear() {
+ mMapped = false;
+ mData = NULL;
+ mSize = 0;
+}
+
}; // namespace android
diff --git a/libs/camera/CameraParameters.cpp b/libs/camera/CameraParameters.cpp
index 0dcab6b..c6087b4 100644
--- a/libs/camera/CameraParameters.cpp
+++ b/libs/camera/CameraParameters.cpp
@@ -88,6 +88,8 @@
const char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW[] = "max-num-detected-faces-sw";
const char CameraParameters::KEY_RECORDING_HINT[] = "recording-hint";
const char CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED[] = "video-snapshot-supported";
+const char CameraParameters::KEY_VIDEO_STABILIZATION[] = "video-stabilization";
+const char CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED[] = "video-stabilization-supported";
const char CameraParameters::TRUE[] = "true";
const char CameraParameters::FALSE[] = "false";
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index 030a83e..eb90147 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -78,7 +78,8 @@
return interface_cast<IMemoryHeap>(reply.readStrongBinder());
}
- virtual void setTransactionState(const Vector<ComposerState>& state)
+ virtual void setTransactionState(const Vector<ComposerState>& state,
+ int orientation)
{
Parcel data, reply;
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
@@ -88,38 +89,8 @@
for ( ; b != e ; ++b ) {
b->write(data);
}
- remote()->transact(BnSurfaceComposer::SET_TRANSACTION_STATE, data, &reply);
- }
-
- virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
- data.writeInt32(dpy);
- data.writeInt32(flags);
- remote()->transact(BnSurfaceComposer::FREEZE_DISPLAY, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
- data.writeInt32(dpy);
- data.writeInt32(flags);
- remote()->transact(BnSurfaceComposer::UNFREEZE_DISPLAY, data, &reply);
- return reply.readInt32();
- }
-
- virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
- data.writeInt32(dpy);
data.writeInt32(orientation);
- data.writeInt32(flags);
- remote()->transact(BnSurfaceComposer::SET_ORIENTATION, data, &reply);
- return reply.readInt32();
+ remote()->transact(BnSurfaceComposer::SET_TRANSACTION_STATE, data, &reply);
}
virtual void bootFinished()
@@ -232,26 +203,8 @@
s.read(data);
state.add(s);
}
- setTransactionState(state);
- } break;
- case SET_ORIENTATION: {
- CHECK_INTERFACE(ISurfaceComposer, data, reply);
- DisplayID dpy = data.readInt32();
int orientation = data.readInt32();
- uint32_t flags = data.readInt32();
- reply->writeInt32( setOrientation(dpy, orientation, flags) );
- } break;
- case FREEZE_DISPLAY: {
- CHECK_INTERFACE(ISurfaceComposer, data, reply);
- DisplayID dpy = data.readInt32();
- uint32_t flags = data.readInt32();
- reply->writeInt32( freezeDisplay(dpy, flags) );
- } break;
- case UNFREEZE_DISPLAY: {
- CHECK_INTERFACE(ISurfaceComposer, data, reply);
- DisplayID dpy = data.readInt32();
- uint32_t flags = data.readInt32();
- reply->writeInt32( unfreezeDisplay(dpy, flags) );
+ setTransactionState(state, orientation);
} break;
case BOOT_FINISHED: {
CHECK_INTERFACE(ISurfaceComposer, data, reply);
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 00a4bf6..5f3d608 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -91,8 +91,10 @@
mutable Mutex mLock;
SortedVector<ComposerState> mStates;
+ int mOrientation;
- Composer() : Singleton<Composer>() { }
+ Composer() : Singleton<Composer>(),
+ mOrientation(ISurfaceComposer::eOrientationUnchanged) { }
void closeGlobalTransactionImpl();
@@ -119,6 +121,7 @@
status_t setFreezeTint(
const sp<SurfaceComposerClient>& client, SurfaceID id,
uint32_t tint);
+ status_t setOrientation(int orientation);
static void closeGlobalTransaction() {
Composer::getInstance().closeGlobalTransactionImpl();
@@ -133,14 +136,18 @@
sp<ISurfaceComposer> sm(getComposerService());
Vector<ComposerState> transaction;
+ int orientation;
{ // scope for the lock
Mutex::Autolock _l(mLock);
transaction = mStates;
mStates.clear();
+
+ orientation = mOrientation;
+ mOrientation = ISurfaceComposer::eOrientationUnchanged;
}
- sm->setTransactionState(transaction);
+ sm->setTransactionState(transaction, orientation);
}
layer_state_t* Composer::getLayerStateLocked(
@@ -260,6 +267,12 @@
return NO_ERROR;
}
+status_t Composer::setOrientation(int orientation) {
+ Mutex::Autolock _l(mLock);
+ mOrientation = orientation;
+ return NO_ERROR;
+}
+
// ---------------------------------------------------------------------------
SurfaceComposerClient::SurfaceComposerClient()
@@ -427,6 +440,12 @@
return getComposer().setMatrix(this, id, dsdx, dtdx, dsdy, dtdy);
}
+status_t SurfaceComposerClient::setOrientation(DisplayID dpy,
+ int orientation, uint32_t flags)
+{
+ return Composer::getInstance().setOrientation(orientation);
+}
+
// ----------------------------------------------------------------------------
status_t SurfaceComposerClient::getDisplayInfo(
@@ -491,21 +510,14 @@
status_t SurfaceComposerClient::freezeDisplay(DisplayID dpy, uint32_t flags)
{
- sp<ISurfaceComposer> sm(getComposerService());
- return sm->freezeDisplay(dpy, flags);
+ // This has been made a no-op because it can cause Gralloc buffer deadlocks.
+ return NO_ERROR;
}
status_t SurfaceComposerClient::unfreezeDisplay(DisplayID dpy, uint32_t flags)
{
- sp<ISurfaceComposer> sm(getComposerService());
- return sm->unfreezeDisplay(dpy, flags);
-}
-
-int SurfaceComposerClient::setOrientation(DisplayID dpy,
- int orientation, uint32_t flags)
-{
- sp<ISurfaceComposer> sm(getComposerService());
- return sm->setOrientation(dpy, orientation, flags);
+ // This has been made a no-op because it can cause Gralloc buffer deadlocks.
+ return NO_ERROR;
}
// ----------------------------------------------------------------------------
@@ -572,4 +584,3 @@
// ----------------------------------------------------------------------------
}; // namespace android
-
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index dac9418..c72a45b 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -94,7 +94,8 @@
return android_atomic_inc(&globalCounter);
}
-SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) :
+SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode,
+ GLenum texTarget) :
mDefaultWidth(1),
mDefaultHeight(1),
mPixelFormat(PIXEL_FORMAT_RGBA_8888),
@@ -110,7 +111,8 @@
mSynchronousMode(false),
mAllowSynchronousMode(allowSynchronousMode),
mConnectedApi(NO_CONNECTED_API),
- mAbandoned(false) {
+ mAbandoned(false),
+ mTexTarget(texTarget) {
// Choose a name using the PID and a process-unique ID.
mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId());
@@ -698,9 +700,8 @@
ST_LOGW("updateTexImage: clearing GL error: %#04x", error);
}
- glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName);
- glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES,
- (GLeglImageOES)image);
+ glBindTexture(mTexTarget, mTexName);
+ glEGLImageTargetTexture2DOES(mTexTarget, (GLeglImageOES)image);
bool failed = false;
while ((error = glGetError()) != GL_NO_ERROR) {
@@ -735,7 +736,7 @@
mDequeueCondition.signal();
} else {
// We always bind the texture even if we don't update its contents.
- glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName);
+ glBindTexture(mTexTarget, mTexName);
}
return OK;
@@ -761,7 +762,7 @@
}
GLenum SurfaceTexture::getCurrentTextureTarget() const {
- return GL_TEXTURE_EXTERNAL_OES;
+ return mTexTarget;
}
void SurfaceTexture::getTransformMatrix(float mtx[16]) {
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index a98e4cd..9bfc94c 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -39,6 +39,7 @@
external/skia/include/utils
LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER
+ LOCAL_CFLAGS += -fvisibility=hidden
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SHARED_LIBRARIES := libcutils libutils libGLESv2 libskia libui
LOCAL_MODULE := libhwui
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index cdcbf21..9b0d7c6 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -23,6 +23,8 @@
#include <utils/Singleton.h>
+#include <cutils/compiler.h>
+
#include "Extensions.h"
#include "FontRenderer.h"
#include "GammaFontRenderer.h"
@@ -82,7 +84,7 @@
// Caches
///////////////////////////////////////////////////////////////////////////////
-class Caches: public Singleton<Caches> {
+class ANDROID_API Caches: public Singleton<Caches> {
Caches();
~Caches();
diff --git a/libs/hwui/DisplayListLogBuffer.h b/libs/hwui/DisplayListLogBuffer.h
index bf16f29..5d689bb 100644
--- a/libs/hwui/DisplayListLogBuffer.h
+++ b/libs/hwui/DisplayListLogBuffer.h
@@ -18,6 +18,7 @@
#define ANDROID_HWUI_DISPLAY_LIST_LOG_BUFFER_H
#include <utils/Singleton.h>
+
#include <stdio.h>
namespace android {
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 8cd7fea..ab475bf 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -26,6 +26,8 @@
#include <SkTDArray.h>
#include <SkTSearch.h>
+#include <cutils/compiler.h>
+
#include "DisplayListLogBuffer.h"
#include "OpenGLRenderer.h"
#include "utils/Functor.h"
@@ -58,7 +60,7 @@
class DisplayList {
public:
DisplayList(const DisplayListRenderer& recorder);
- ~DisplayList();
+ ANDROID_API ~DisplayList();
// IMPORTANT: Update the intialization of OP_NAMES in the .cpp file
// when modifying this file
@@ -107,13 +109,13 @@
void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false);
- size_t getSize();
+ ANDROID_API size_t getSize();
bool replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level = 0);
void output(OpenGLRenderer& renderer, uint32_t level = 0);
- static void outputLogBuffer(int fd);
+ ANDROID_API static void outputLogBuffer(int fd);
void setRenderable(bool renderable) {
mIsRenderable = renderable;
@@ -230,75 +232,76 @@
*/
class DisplayListRenderer: public OpenGLRenderer {
public:
- DisplayListRenderer();
- ~DisplayListRenderer();
+ ANDROID_API DisplayListRenderer();
+ virtual ~DisplayListRenderer();
- DisplayList* getDisplayList(DisplayList* displayList);
+ ANDROID_API DisplayList* getDisplayList(DisplayList* displayList);
- void setViewport(int width, int height);
- void prepareDirty(float left, float top, float right, float bottom, bool opaque);
- void finish();
+ virtual void setViewport(int width, int height);
+ virtual void prepareDirty(float left, float top, float right, float bottom, bool opaque);
+ virtual void finish();
- bool callDrawGLFunction(Functor *functor, Rect& dirty);
+ virtual bool callDrawGLFunction(Functor *functor, Rect& dirty);
- void interrupt();
- void resume();
+ virtual void interrupt();
+ virtual void resume();
- int save(int flags);
- void restore();
- void restoreToCount(int saveCount);
+ virtual int save(int flags);
+ virtual void restore();
+ virtual void restoreToCount(int saveCount);
- int saveLayer(float left, float top, float right, float bottom,
+ virtual int saveLayer(float left, float top, float right, float bottom,
SkPaint* p, int flags);
- int saveLayerAlpha(float left, float top, float right, float bottom,
+ virtual int saveLayerAlpha(float left, float top, float right, float bottom,
int alpha, int flags);
- void translate(float dx, float dy);
- void rotate(float degrees);
- void scale(float sx, float sy);
- void skew(float sx, float sy);
+ virtual void translate(float dx, float dy);
+ virtual void rotate(float degrees);
+ virtual void scale(float sx, float sy);
+ virtual void skew(float sx, float sy);
- void setMatrix(SkMatrix* matrix);
- void concatMatrix(SkMatrix* matrix);
+ virtual void setMatrix(SkMatrix* matrix);
+ virtual void concatMatrix(SkMatrix* matrix);
- bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
+ virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
- bool drawDisplayList(DisplayList* displayList, uint32_t width, uint32_t height,
+ virtual bool drawDisplayList(DisplayList* displayList, uint32_t width, uint32_t height,
Rect& dirty, uint32_t level = 0);
- void drawLayer(Layer* layer, float x, float y, SkPaint* paint);
- void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
- void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
- void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
+ virtual void drawLayer(Layer* layer, float x, float y, SkPaint* paint);
+ virtual void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
+ virtual void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
+ virtual void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
float srcRight, float srcBottom, float dstLeft, float dstTop,
float dstRight, float dstBottom, SkPaint* paint);
- void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
+ virtual void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
float* vertices, int* colors, SkPaint* paint);
- void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
+ virtual void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
float left, float top, float right, float bottom, SkPaint* paint);
- void drawColor(int color, SkXfermode::Mode mode);
- void drawRect(float left, float top, float right, float bottom, SkPaint* paint);
- void drawRoundRect(float left, float top, float right, float bottom,
+ virtual void drawColor(int color, SkXfermode::Mode mode);
+ virtual void drawRect(float left, float top, float right, float bottom, SkPaint* paint);
+ virtual void drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, SkPaint* paint);
- void drawCircle(float x, float y, float radius, SkPaint* paint);
- void drawOval(float left, float top, float right, float bottom, SkPaint* paint);
- void drawArc(float left, float top, float right, float bottom,
+ virtual void drawCircle(float x, float y, float radius, SkPaint* paint);
+ virtual void drawOval(float left, float top, float right, float bottom, SkPaint* paint);
+ virtual void drawArc(float left, float top, float right, float bottom,
float startAngle, float sweepAngle, bool useCenter, SkPaint* paint);
- void drawPath(SkPath* path, SkPaint* paint);
- void drawLines(float* points, int count, SkPaint* paint);
- void drawPoints(float* points, int count, SkPaint* paint);
- void drawText(const char* text, int bytesCount, int count, float x, float y, SkPaint* paint);
+ virtual void drawPath(SkPath* path, SkPaint* paint);
+ virtual void drawLines(float* points, int count, SkPaint* paint);
+ virtual void drawPoints(float* points, int count, SkPaint* paint);
+ virtual void drawText(const char* text, int bytesCount, int count, float x, float y,
+ SkPaint* paint);
- void resetShader();
- void setupShader(SkiaShader* shader);
+ virtual void resetShader();
+ virtual void setupShader(SkiaShader* shader);
- void resetColorFilter();
- void setupColorFilter(SkiaColorFilter* filter);
+ virtual void resetColorFilter();
+ virtual void setupColorFilter(SkiaColorFilter* filter);
- void resetShadow();
- void setupShadow(float radius, float dx, float dy, int color);
+ virtual void resetShadow();
+ virtual void setupShadow(float radius, float dx, float dy, int color);
- void reset();
+ ANDROID_API void reset();
const SkWriter32& writeStream() const {
return mWriter;
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index dd05e61..a077cbc5 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -185,7 +185,7 @@
return;
}
- SkFixed penX = SkIntToFixed(x);
+ float penX = x;
int penY = y;
int glyphsLeft = 1;
if (numGlyphs > 0) {
@@ -193,7 +193,7 @@
}
SkFixed prevRsbDelta = 0;
- penX += SK_Fixed1 / 2;
+ penX += 0.5f;
text += start;
@@ -206,25 +206,25 @@
}
CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
- penX += SkAutoKern_AdjustF(prevRsbDelta, cachedGlyph->mLsbDelta);
+ penX += SkFixedToFloat(SkAutoKern_AdjustF(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) {
switch(mode) {
case FRAMEBUFFER:
- drawCachedGlyph(cachedGlyph, SkFixedFloor(penX), penY);
+ drawCachedGlyph(cachedGlyph, (int) floorf(penX), penY);
break;
case BITMAP:
- drawCachedGlyph(cachedGlyph, SkFixedFloor(penX), penY, bitmap, bitmapW, bitmapH);
+ drawCachedGlyph(cachedGlyph, (int) floorf(penX), penY, bitmap, bitmapW, bitmapH);
break;
case MEASURE:
- measureCachedGlyph(cachedGlyph, SkFixedFloor(penX), penY, bounds);
+ measureCachedGlyph(cachedGlyph, (int) floorf(penX), penY, bounds);
break;
}
}
- penX += cachedGlyph->mAdvanceX;
+ penX += SkFixedToFloat(cachedGlyph->mAdvanceX);
// If we were given a specific number of glyphs, decrement
if (numGlyphs > 0) {
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 349b9e3..dfcc5ea 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -31,6 +31,12 @@
// Rendering
///////////////////////////////////////////////////////////////////////////////
+LayerRenderer::LayerRenderer(Layer* layer): mLayer(layer) {
+}
+
+LayerRenderer::~LayerRenderer() {
+}
+
void LayerRenderer::prepareDirty(float left, float top, float right, float bottom, bool opaque) {
LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->getFbo());
@@ -264,7 +270,7 @@
layer->setFbo(0);
layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
layer->layer.set(0.0f, 0.0f, 0.0f, 0.0f);
- layer->texCoords.set(0.0f, 1.0f, 0.0f, 1.0f);
+ layer->texCoords.set(0.0f, 1.0f, 1.0f, 0.0f);
layer->region.clear();
layer->setRenderTarget(GL_NONE); // see ::updateTextureLayer()
@@ -400,6 +406,18 @@
renderer.setViewport(bitmap->width(), bitmap->height());
renderer.OpenGLRenderer::prepareDirty(0.0f, 0.0f,
bitmap->width(), bitmap->height(), !layer->isBlend());
+
+ glDisable(GL_SCISSOR_TEST);
+ renderer.translate(0.0f, bitmap->height());
+ renderer.scale(1.0f, -1.0f);
+
+ mat4 texTransform(layer->getTexTransform());
+
+ mat4 invert;
+ invert.translate(0.0f, 1.0f, 0.0f);
+ invert.scale(1.0f, -1.0f, 1.0f);
+ layer->getTexTransform().multiply(invert);
+
if ((error = glGetError()) != GL_NO_ERROR) goto error;
{
@@ -413,6 +431,7 @@
if ((error = glGetError()) != GL_NO_ERROR) goto error;
}
+ layer->getTexTransform().load(texTransform);
status = true;
}
diff --git a/libs/hwui/LayerRenderer.h b/libs/hwui/LayerRenderer.h
index 2246573..6104301 100644
--- a/libs/hwui/LayerRenderer.h
+++ b/libs/hwui/LayerRenderer.h
@@ -17,6 +17,8 @@
#ifndef ANDROID_HWUI_LAYER_RENDERER_H
#define ANDROID_HWUI_LAYER_RENDERER_H
+#include <cutils/compiler.h>
+
#include "OpenGLRenderer.h"
#include "Layer.h"
@@ -42,27 +44,24 @@
class LayerRenderer: public OpenGLRenderer {
public:
- LayerRenderer(Layer* layer): mLayer(layer) {
- }
+ ANDROID_API LayerRenderer(Layer* layer);
+ virtual ~LayerRenderer();
- ~LayerRenderer() {
- }
+ virtual void prepareDirty(float left, float top, float right, float bottom, bool opaque);
+ virtual void finish();
- void prepareDirty(float left, float top, float right, float bottom, bool opaque);
- void finish();
+ virtual bool hasLayer();
+ virtual Region* getRegion();
+ virtual GLint getTargetFbo();
- bool hasLayer();
- Region* getRegion();
- GLint getTargetFbo();
-
- static Layer* createTextureLayer(bool isOpaque);
- static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false);
- static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height);
- static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
+ ANDROID_API static Layer* createTextureLayer(bool isOpaque);
+ ANDROID_API static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false);
+ ANDROID_API static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height);
+ ANDROID_API static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
bool isOpaque, GLenum renderTarget, float* transform);
- static void destroyLayer(Layer* layer);
- static void destroyLayerDeferred(Layer* layer);
- static bool copyLayer(Layer* layer, SkBitmap* bitmap);
+ ANDROID_API static void destroyLayer(Layer* layer);
+ ANDROID_API static void destroyLayerDeferred(Layer* layer);
+ ANDROID_API static bool copyLayer(Layer* layer, SkBitmap* bitmap);
private:
void generateMesh();
diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h
index 56fd37d..22220a9 100644
--- a/libs/hwui/Matrix.h
+++ b/libs/hwui/Matrix.h
@@ -19,6 +19,8 @@
#include <SkMatrix.h>
+#include <cutils/compiler.h>
+
#include "Rect.h"
namespace android {
@@ -28,7 +30,7 @@
// Classes
///////////////////////////////////////////////////////////////////////////////
-class Matrix4 {
+class ANDROID_API Matrix4 {
public:
float data[16];
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 14b22b3..2fc88e1 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -31,6 +31,8 @@
#include <utils/RefBase.h>
#include <utils/Vector.h>
+#include <cutils/compiler.h>
+
#include "Debug.h"
#include "Extensions.h"
#include "Matrix.h"
@@ -57,12 +59,12 @@
*/
class OpenGLRenderer {
public:
- OpenGLRenderer();
+ ANDROID_API OpenGLRenderer();
virtual ~OpenGLRenderer();
virtual void setViewport(int width, int height);
- void prepare(bool opaque);
+ ANDROID_API void prepare(bool opaque);
virtual void prepareDirty(float left, float top, float right, float bottom, bool opaque);
virtual void finish();
@@ -72,7 +74,7 @@
virtual bool callDrawGLFunction(Functor *functor, Rect& dirty);
- int getSaveCount() const;
+ ANDROID_API int getSaveCount() const;
virtual int save(int flags);
virtual void restore();
virtual void restoreToCount(int saveCount);
@@ -87,12 +89,12 @@
virtual void scale(float sx, float sy);
virtual void skew(float sx, float sy);
- void getMatrix(SkMatrix* matrix);
+ ANDROID_API void getMatrix(SkMatrix* matrix);
virtual void setMatrix(SkMatrix* matrix);
virtual void concatMatrix(SkMatrix* matrix);
- const Rect& getClipBounds();
- bool quickReject(float left, float top, float right, float bottom);
+ ANDROID_API const Rect& getClipBounds();
+ ANDROID_API bool quickReject(float left, float top, float right, float bottom);
virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
virtual bool drawDisplayList(DisplayList* displayList, uint32_t width, uint32_t height,
diff --git a/libs/hwui/ResourceCache.h b/libs/hwui/ResourceCache.h
index 2a38910..8cf466b 100644
--- a/libs/hwui/ResourceCache.h
+++ b/libs/hwui/ResourceCache.h
@@ -17,6 +17,8 @@
#ifndef ANDROID_HWUI_RESOURCE_CACHE_H
#define ANDROID_HWUI_RESOURCE_CACHE_H
+#include <cutils/compiler.h>
+
#include <SkBitmap.h>
#include <SkiaColorFilter.h>
#include <SkiaShader.h>
@@ -49,7 +51,7 @@
ResourceType resourceType;
};
-class ResourceCache {
+class ANDROID_API ResourceCache {
KeyedVector<void *, ResourceReference *>* mCache;
public:
ResourceCache();
diff --git a/libs/hwui/SkiaColorFilter.h b/libs/hwui/SkiaColorFilter.h
index 1bf475c..2feb834 100644
--- a/libs/hwui/SkiaColorFilter.h
+++ b/libs/hwui/SkiaColorFilter.h
@@ -20,6 +20,8 @@
#include <GLES2/gl2.h>
#include <SkColorFilter.h>
+#include <cutils/compiler.h>
+
#include "ProgramCache.h"
#include "Extensions.h"
@@ -45,7 +47,7 @@
kBlend,
};
- SkiaColorFilter(SkColorFilter *skFilter, Type type, bool blend);
+ ANDROID_API SkiaColorFilter(SkColorFilter *skFilter, Type type, bool blend);
virtual ~SkiaColorFilter();
virtual void describe(ProgramDescription& description, const Extensions& extensions) = 0;
@@ -79,7 +81,7 @@
* A color filter that multiplies the source color with a matrix and adds a vector.
*/
struct SkiaColorMatrixFilter: public SkiaColorFilter {
- SkiaColorMatrixFilter(SkColorFilter *skFilter, float* matrix, float* vector);
+ ANDROID_API SkiaColorMatrixFilter(SkColorFilter *skFilter, float* matrix, float* vector);
~SkiaColorMatrixFilter();
void describe(ProgramDescription& description, const Extensions& extensions);
@@ -95,7 +97,7 @@
* another fixed value. Ignores the alpha channel of both arguments.
*/
struct SkiaLightingFilter: public SkiaColorFilter {
- SkiaLightingFilter(SkColorFilter *skFilter, int multiply, int add);
+ ANDROID_API SkiaLightingFilter(SkColorFilter *skFilter, int multiply, int add);
void describe(ProgramDescription& description, const Extensions& extensions);
void setupProgram(Program* program);
@@ -110,7 +112,7 @@
* and PorterDuff blending mode.
*/
struct SkiaBlendFilter: public SkiaColorFilter {
- SkiaBlendFilter(SkColorFilter *skFilter, int color, SkXfermode::Mode mode);
+ ANDROID_API SkiaBlendFilter(SkColorFilter *skFilter, int color, SkXfermode::Mode mode);
void describe(ProgramDescription& description, const Extensions& extensions);
void setupProgram(Program* program);
diff --git a/libs/hwui/SkiaShader.h b/libs/hwui/SkiaShader.h
index 89dd131..2de9a93 100644
--- a/libs/hwui/SkiaShader.h
+++ b/libs/hwui/SkiaShader.h
@@ -22,6 +22,8 @@
#include <GLES2/gl2.h>
+#include <cutils/compiler.h>
+
#include "Extensions.h"
#include "ProgramCache.h"
#include "TextureCache.h"
@@ -52,8 +54,8 @@
kCompose
};
- SkiaShader(Type type, SkShader* key, SkShader::TileMode tileX, SkShader::TileMode tileY,
- SkMatrix* matrix, bool blend);
+ ANDROID_API SkiaShader(Type type, SkShader* key, SkShader::TileMode tileX,
+ SkShader::TileMode tileY, SkMatrix* matrix, bool blend);
virtual ~SkiaShader();
virtual SkiaShader* copy() = 0;
@@ -139,7 +141,7 @@
* A shader that draws a bitmap.
*/
struct SkiaBitmapShader: public SkiaShader {
- SkiaBitmapShader(SkBitmap* bitmap, SkShader* key, SkShader::TileMode tileX,
+ ANDROID_API SkiaBitmapShader(SkBitmap* bitmap, SkShader* key, SkShader::TileMode tileX,
SkShader::TileMode tileY, SkMatrix* matrix, bool blend);
SkiaShader* copy();
@@ -169,8 +171,8 @@
* A shader that draws a linear gradient.
*/
struct SkiaLinearGradientShader: public SkiaShader {
- SkiaLinearGradientShader(float* bounds, uint32_t* colors, float* positions, int count,
- SkShader* key, SkShader::TileMode tileMode, SkMatrix* matrix, bool blend);
+ ANDROID_API SkiaLinearGradientShader(float* bounds, uint32_t* colors, float* positions,
+ int count, SkShader* key, SkShader::TileMode tileMode, SkMatrix* matrix, bool blend);
~SkiaLinearGradientShader();
SkiaShader* copy();
@@ -193,8 +195,8 @@
* A shader that draws a sweep gradient.
*/
struct SkiaSweepGradientShader: public SkiaShader {
- SkiaSweepGradientShader(float x, float y, uint32_t* colors, float* positions, int count,
- SkShader* key, SkMatrix* matrix, bool blend);
+ ANDROID_API SkiaSweepGradientShader(float x, float y, uint32_t* colors, float* positions,
+ int count, SkShader* key, SkMatrix* matrix, bool blend);
~SkiaSweepGradientShader();
SkiaShader* copy();
@@ -218,8 +220,9 @@
* A shader that draws a circular gradient.
*/
struct SkiaCircularGradientShader: public SkiaSweepGradientShader {
- SkiaCircularGradientShader(float x, float y, float radius, uint32_t* colors, float* positions,
- int count, SkShader* key,SkShader::TileMode tileMode, SkMatrix* matrix, bool blend);
+ ANDROID_API SkiaCircularGradientShader(float x, float y, float radius, uint32_t* colors,
+ float* positions, int count, SkShader* key,SkShader::TileMode tileMode,
+ SkMatrix* matrix, bool blend);
SkiaShader* copy();
void describe(ProgramDescription& description, const Extensions& extensions);
@@ -233,7 +236,8 @@
* A shader that draws two shaders, composited with an xfermode.
*/
struct SkiaComposeShader: public SkiaShader {
- SkiaComposeShader(SkiaShader* first, SkiaShader* second, SkXfermode::Mode mode, SkShader* key);
+ ANDROID_API SkiaComposeShader(SkiaShader* first, SkiaShader* second, SkXfermode::Mode mode,
+ SkShader* key);
~SkiaComposeShader();
SkiaShader* copy();
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index bd70319..d51154d 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -70,13 +70,6 @@
clipRect = s->clipRect;
}
- if ((s->flags & Snapshot::kFlagClipSet) &&
- !(s->flags & Snapshot::kFlagDirtyLocalClip)) {
- mLocalClip.set(s->mLocalClip);
- } else {
- flags |= Snapshot::kFlagDirtyLocalClip;
- }
-
if (s->flags & Snapshot::kFlagFboTarget) {
flags |= Snapshot::kFlagFboTarget;
region = s->region;
@@ -106,18 +99,14 @@
*/
kFlagIsFboLayer = 0x4,
/**
- * Indicates that the local clip should be recomputed.
- */
- kFlagDirtyLocalClip = 0x8,
- /**
* Indicates that this snapshot has changed the ortho matrix.
*/
- kFlagDirtyOrtho = 0x10,
+ kFlagDirtyOrtho = 0x8,
/**
* Indicates that this snapshot or an ancestor snapshot is
* an FBO layer.
*/
- kFlagFboTarget = 0x20
+ kFlagFboTarget = 0x10
};
/**
@@ -169,7 +158,7 @@
}
if (clipped) {
- flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip;
+ flags |= Snapshot::kFlagClipSet;
}
return clipped;
@@ -180,19 +169,16 @@
*/
void setClip(float left, float top, float right, float bottom) {
clipRect->set(left, top, right, bottom);
- flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip;
+ flags |= Snapshot::kFlagClipSet;
}
const Rect& getLocalClip() {
- if (flags & Snapshot::kFlagDirtyLocalClip) {
- mat4 inverse;
- inverse.loadInverse(*transform);
+ mat4 inverse;
+ inverse.loadInverse(*transform);
- mLocalClip.set(*clipRect);
- inverse.mapRect(mLocalClip);
+ mLocalClip.set(*clipRect);
+ inverse.mapRect(mLocalClip);
- flags &= ~Snapshot::kFlagDirtyLocalClip;
- }
return mLocalClip;
}
@@ -204,7 +190,7 @@
void resetClip(float left, float top, float right, float bottom) {
clipRect = &mClipRectRoot;
clipRect->set(left, top, right, bottom);
- flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip;
+ flags |= Snapshot::kFlagClipSet;
}
bool isIgnored() const {
diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h
index 28dba13..e2bdde1 100644
--- a/libs/hwui/TextDropShadowCache.h
+++ b/libs/hwui/TextDropShadowCache.h
@@ -81,7 +81,7 @@
LTE_INT(flags) {
LTE_INT(italicStyle) {
LTE_INT(scaleX) {
- return strncmp16(text, rhs.text, len >> 1) < 0;
+ return memcmp(text, rhs.text, len) < 0;
}
}
}
diff --git a/libs/rs/driver/rsdBcc.cpp b/libs/rs/driver/rsdBcc.cpp
index 0755fb7..4ecf8e8 100644
--- a/libs/rs/driver/rsdBcc.cpp
+++ b/libs/rs/driver/rsdBcc.cpp
@@ -226,6 +226,7 @@
RsdHal * dc = (RsdHal *)mtls->rsc->mHal.drv;
uint32_t sig = mtls->sig;
+ outer_foreach_t fn = dc->mForEachLaunch[sig];
while (1) {
uint32_t slice = (uint32_t)android_atomic_inc(&mtls->mSliceNum);
uint32_t yStart = mtls->yStart + slice * mtls->mSliceSize;
@@ -239,16 +240,10 @@
//LOGE("usr ptr in %p, out %p", mtls->ptrIn, mtls->ptrOut);
for (p.y = yStart; p.y < yEnd; p.y++) {
uint32_t offset = mtls->dimX * p.y;
- uint8_t *xPtrOut = mtls->ptrOut + (mtls->eStrideOut * offset);
- const uint8_t *xPtrIn = mtls->ptrIn + (mtls->eStrideIn * offset);
-
- for (p.x = mtls->xStart; p.x < mtls->xEnd; p.x++) {
- p.in = xPtrIn;
- p.out = xPtrOut;
- dc->mForEachLaunch[sig](&mtls->script->mHal.info.root, &p);
- xPtrIn += mtls->eStrideIn;
- xPtrOut += mtls->eStrideOut;
- }
+ p.out = mtls->ptrOut + (mtls->eStrideOut * offset);
+ p.in = mtls->ptrIn + (mtls->eStrideIn * offset);
+ fn(&mtls->script->mHal.info.root, &p, mtls->xStart, mtls->xEnd,
+ mtls->eStrideIn, mtls->eStrideOut);
}
}
}
@@ -262,6 +257,7 @@
RsdHal * dc = (RsdHal *)mtls->rsc->mHal.drv;
uint32_t sig = mtls->sig;
+ outer_foreach_t fn = dc->mForEachLaunch[sig];
while (1) {
uint32_t slice = (uint32_t)android_atomic_inc(&mtls->mSliceNum);
uint32_t xStart = mtls->xStart + slice * mtls->mSliceSize;
@@ -271,17 +267,12 @@
return;
}
- //LOGE("usr idx %i, x %i,%i y %i,%i", idx, mtls->xStart, mtls->xEnd, yStart, yEnd);
+ //LOGE("usr slice %i idx %i, x %i,%i", slice, idx, xStart, xEnd);
//LOGE("usr ptr in %p, out %p", mtls->ptrIn, mtls->ptrOut);
- uint8_t *xPtrOut = mtls->ptrOut + (mtls->eStrideOut * xStart);
- const uint8_t *xPtrIn = mtls->ptrIn + (mtls->eStrideIn * xStart);
- for (p.x = xStart; p.x < xEnd; p.x++) {
- p.in = xPtrIn;
- p.out = xPtrOut;
- dc->mForEachLaunch[sig](&mtls->script->mHal.info.root, &p);
- xPtrIn += mtls->eStrideIn;
- xPtrOut += mtls->eStrideOut;
- }
+
+ p.out = mtls->ptrOut + (mtls->eStrideOut * xStart);
+ p.in = mtls->ptrIn + (mtls->eStrideIn * xStart);
+ fn(&mtls->script->mHal.info.root, &p, xStart, xEnd, mtls->eStrideIn, mtls->eStrideOut);
}
}
@@ -302,7 +293,10 @@
DrvScript *drv = (DrvScript *)s->mHal.drv;
// We only support slot 0 (root) at this point in time.
rsAssert(slot == 0);
- mtls.sig = drv->mExportForEachSignatureList[slot];
+ mtls.sig = 0x1f; // temp fix for old apps, full table in slang_rs_export_foreach.cpp
+ if (drv->mExportForEachSignatureList) {
+ mtls.sig = drv->mExportForEachSignatureList[slot];
+ }
if (ain) {
mtls.dimX = ain->getType()->getDimX();
mtls.dimY = ain->getType()->getDimY();
@@ -389,22 +383,17 @@
uint32_t sig = mtls.sig;
//LOGE("launch 3");
+ outer_foreach_t fn = dc->mForEachLaunch[sig];
for (p.ar[0] = mtls.arrayStart; p.ar[0] < mtls.arrayEnd; p.ar[0]++) {
for (p.z = mtls.zStart; p.z < mtls.zEnd; p.z++) {
for (p.y = mtls.yStart; p.y < mtls.yEnd; p.y++) {
uint32_t offset = mtls.dimX * mtls.dimY * mtls.dimZ * p.ar[0] +
mtls.dimX * mtls.dimY * p.z +
mtls.dimX * p.y;
- uint8_t *xPtrOut = mtls.ptrOut + (mtls.eStrideOut * offset);
- const uint8_t *xPtrIn = mtls.ptrIn + (mtls.eStrideIn * offset);
-
- for (p.x = mtls.xStart; p.x < mtls.xEnd; p.x++) {
- p.in = xPtrIn;
- p.out = xPtrOut;
- dc->mForEachLaunch[sig](&s->mHal.info.root, &p);
- xPtrIn += mtls.eStrideIn;
- xPtrOut += mtls.eStrideOut;
- }
+ p.out = mtls.ptrOut + (mtls.eStrideOut * offset);
+ p.in = mtls.ptrIn + (mtls.eStrideIn * offset);
+ fn(&mtls.script->mHal.info.root, &p, mtls.xStart, mtls.xEnd,
+ mtls.eStrideIn, mtls.eStrideOut);
}
}
}
diff --git a/libs/rs/driver/rsdCore.cpp b/libs/rs/driver/rsdCore.cpp
index f8107d9..247f4dc 100644
--- a/libs/rs/driver/rsdCore.cpp
+++ b/libs/rs/driver/rsdCore.cpp
@@ -292,75 +292,136 @@
}
static void rsdForEach17(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, uint32_t);
(*(fe*)vRoot)(p->in, p->y);
}
static void rsdForEach18(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(void *, uint32_t);
(*(fe*)vRoot)(p->out, p->y);
}
static void rsdForEach19(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, void *, uint32_t);
(*(fe*)vRoot)(p->in, p->out, p->y);
}
static void rsdForEach21(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, const void *, uint32_t);
(*(fe*)vRoot)(p->in, p->usr, p->y);
}
static void rsdForEach22(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(void *, const void *, uint32_t);
(*(fe*)vRoot)(p->out, p->usr, p->y);
}
static void rsdForEach23(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, void *, const void *, uint32_t);
(*(fe*)vRoot)(p->in, p->out, p->usr, p->y);
}
static void rsdForEach25(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, uint32_t, uint32_t);
- (*(fe*)vRoot)(p->in, p->x, p->y);
+ const uint8_t *pin = (const uint8_t *)p->in;
+ uint32_t y = p->y;
+ for (uint32_t x = x1; x < x2; x++) {
+ (*(fe*)vRoot)(pin, x, y);
+ pin += instep;
+ }
}
static void rsdForEach26(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(void *, uint32_t, uint32_t);
- (*(fe*)vRoot)(p->out, p->x, p->y);
+ uint8_t *pout = (uint8_t *)p->out;
+ uint32_t y = p->y;
+ for (uint32_t x = x1; x < x2; x++) {
+ (*(fe*)vRoot)(pout, x, y);
+ pout += outstep;
+ }
}
static void rsdForEach27(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, void *, uint32_t, uint32_t);
- (*(fe*)vRoot)(p->in, p->out, p->x, p->y);
+ uint8_t *pout = (uint8_t *)p->out;
+ const uint8_t *pin = (const uint8_t *)p->in;
+ uint32_t y = p->y;
+ for (uint32_t x = x1; x < x2; x++) {
+ (*(fe*)vRoot)(pin, pout, x, y);
+ pin += instep;
+ pout += outstep;
+ }
}
static void rsdForEach29(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, const void *, uint32_t, uint32_t);
- (*(fe*)vRoot)(p->in, p->usr, p->x, p->y);
+ const uint8_t *pin = (const uint8_t *)p->in;
+ const void *usr = p->usr;
+ const uint32_t y = p->y;
+ for (uint32_t x = x1; x < x2; x++) {
+ (*(fe*)vRoot)(pin, usr, x, y);
+ pin += instep;
+ }
}
static void rsdForEach30(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(void *, const void *, uint32_t, uint32_t);
- (*(fe*)vRoot)(p->out, p->usr, p->x, p->y);
+ uint8_t *pout = (uint8_t *)p->out;
+ const void *usr = p->usr;
+ const uint32_t y = p->y;
+ for (uint32_t x = x1; x < x2; x++) {
+ (*(fe*)vRoot)(pout, usr, x, y);
+ pout += outstep;
+ }
}
static void rsdForEach31(const void *vRoot,
- const android::renderscript::RsForEachStubParamStruct *p) {
+ const android::renderscript::RsForEachStubParamStruct *p,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep) {
typedef void (*fe)(const void *, void *, const void *, uint32_t, uint32_t);
- (*(fe*)vRoot)(p->in, p->out, p->usr, p->x, p->y);
+ uint8_t *pout = (uint8_t *)p->out;
+ const uint8_t *pin = (const uint8_t *)p->in;
+ const void *usr = p->usr;
+ const uint32_t y = p->y;
+ for (uint32_t x = x1; x < x2; x++) {
+ (*(fe*)vRoot)(pin, pout, usr, x, y);
+ pin += instep;
+ pout += outstep;
+ }
}
diff --git a/libs/rs/driver/rsdCore.h b/libs/rs/driver/rsdCore.h
index 159b72a..ce86d11 100644
--- a/libs/rs/driver/rsdCore.h
+++ b/libs/rs/driver/rsdCore.h
@@ -28,7 +28,9 @@
typedef void (*WorkerCallback_t)(void *usr, uint32_t idx);
typedef void (*outer_foreach_t)(const void *,
- const android::renderscript::RsForEachStubParamStruct *);
+ const android::renderscript::RsForEachStubParamStruct *,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep);
typedef struct RsdSymbolTableRec {
const char * mName;
diff --git a/libs/rs/scriptc/rs_allocation.rsh b/libs/rs/scriptc/rs_allocation.rsh
index 1e755cd..154a099 100644
--- a/libs/rs/scriptc/rs_allocation.rsh
+++ b/libs/rs/scriptc/rs_allocation.rsh
@@ -71,6 +71,8 @@
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimFaces(rs_allocation);
+#if (defined(RS_VERSION) && (RS_VERSION >= 14))
+
/**
* Copy part of an allocation from another allocation.
*
@@ -123,6 +125,7 @@
uint32_t srcMip,
rs_allocation_cubemap_face srcFace);
+#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
/**
* Extract a single element from an allocation.
diff --git a/libs/rs/scriptc/rs_atomic.rsh b/libs/rs/scriptc/rs_atomic.rsh
index 95513ad..87c6c02 100644
--- a/libs/rs/scriptc/rs_atomic.rsh
+++ b/libs/rs/scriptc/rs_atomic.rsh
@@ -23,6 +23,7 @@
#ifndef __RS_ATOMIC_RSH__
#define __RS_ATOMIC_RSH__
+#if (defined(RS_VERSION) && (RS_VERSION >= 14))
/**
* Atomic add one to the value at addr.
@@ -243,6 +244,7 @@
extern uint32_t __attribute__((overloadable))
rsAtomicCas(volatile uint32_t* addr, int32_t compareValue, int32_t newValue);
+#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
#endif
diff --git a/libs/rs/scriptc/rs_graphics.rsh b/libs/rs/scriptc/rs_graphics.rsh
index 00fd1b1..3e9339e 100644
--- a/libs/rs/scriptc/rs_graphics.rsh
+++ b/libs/rs/scriptc/rs_graphics.rsh
@@ -23,6 +23,7 @@
#ifndef __RS_GRAPHICS_RSH__
#define __RS_GRAPHICS_RSH__
+#if (defined(RS_VERSION) && (RS_VERSION >= 14))
/**
* Set the color target used for all subsequent rendering calls
* @param colorTarget
@@ -64,6 +65,8 @@
extern uint __attribute__((overloadable))
rsgFinish(void);
+#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
+
/**
* Bind a new ProgramFragment to the rendering context.
*
@@ -187,6 +190,8 @@
extern void __attribute__((overloadable))
rsgAllocationSyncAll(rs_allocation alloc);
+#if (defined(RS_VERSION) && (RS_VERSION >= 14))
+
/**
* Sync the contents of an allocation from memory space
* specified by source.
@@ -198,6 +203,8 @@
rsgAllocationSyncAll(rs_allocation alloc,
rs_allocation_usage_type source);
+#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
+
/**
* Low performance utility function for drawing a simple rectangle. Not
* intended for drawing large quantities of geometry.
diff --git a/libs/rs/scriptc/rs_matrix.rsh b/libs/rs/scriptc/rs_matrix.rsh
index ab3cd3b..ebff7f4 100644
--- a/libs/rs/scriptc/rs_matrix.rsh
+++ b/libs/rs/scriptc/rs_matrix.rsh
@@ -308,7 +308,7 @@
#else
/**
* Multiply a vector by a matrix and return the result vector.
- * API version 10-13
+ * API version 14+
*/
_RS_RUNTIME float4 __attribute__((overloadable))
rsMatrixMultiply(const rs_matrix4x4 *m, float4 in);
diff --git a/libs/rs/scriptc/rs_types.rsh b/libs/rs/scriptc/rs_types.rsh
index 5d5df60..e9c3c5e 100644
--- a/libs/rs/scriptc/rs_types.rsh
+++ b/libs/rs/scriptc/rs_types.rsh
@@ -366,6 +366,7 @@
#define RS_PACKED __attribute__((packed, aligned(4)))
#define NULL ((const void *)0)
+#if (defined(RS_VERSION) && (RS_VERSION >= 14))
/**
* \brief Enum for selecting cube map faces
@@ -393,4 +394,6 @@
RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
} rs_allocation_usage_type;
+#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
+
#endif
diff --git a/libs/utils/Unicode.cpp b/libs/utils/Unicode.cpp
index 78c61b4..41cbf03 100644
--- a/libs/utils/Unicode.cpp
+++ b/libs/utils/Unicode.cpp
@@ -542,11 +542,7 @@
return u16measuredLen;
}
-/**
- * Convert a UTF-8 string to UTF-16. The destination UTF-16 buffer must have
- * space for NULL at the end.
- */
-void utf8_to_utf16(const uint8_t* u8str, size_t u8len, char16_t* u16str)
+char16_t* utf8_to_utf16_no_null_terminator(const uint8_t* u8str, size_t u8len, char16_t* u16str)
{
const uint8_t* const u8end = u8str + u8len;
const uint8_t* u8cur = u8str;
@@ -569,7 +565,12 @@
u8cur += u8len;
}
- *u16cur = 0;
+ return u16cur;
+}
+
+void utf8_to_utf16(const uint8_t* u8str, size_t u8len, char16_t* u16str) {
+ char16_t* end = utf8_to_utf16_no_null_terminator(u8str, u8len, u16str);
+ *end = 0;
}
}
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 8895c9e..4f4f929 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -2958,7 +2958,7 @@
Log.w(TAG, " RemoteControlClient died");
// remote control client died, make sure the displays don't use it anymore
// by setting its remote control client to null
- registerRemoteControlClient(mMediaIntent, null, null/*ignored*/);
+ registerRemoteControlClient(mMediaIntent, null/*rcClient*/, null/*ignored*/);
}
public IBinder getBinder() {
@@ -3366,7 +3366,12 @@
}
}
- /** see AudioManager.registerRemoteControlClient(ComponentName eventReceiver, ...) */
+ /**
+ * see AudioManager.registerRemoteControlClient(ComponentName eventReceiver, ...)
+ * Note: using this method with rcClient == null is a way to "disable" the IRemoteControlClient
+ * without modifying the RC stack, but while still causing the display to refresh (will
+ * become blank as a result of this)
+ */
public void registerRemoteControlClient(PendingIntent mediaIntent,
IRemoteControlClient rcClient, String callingPackageName) {
if (DEBUG_RC) Log.i(TAG, "Register remote control client rcClient="+rcClient);
@@ -3384,6 +3389,15 @@
}
// save the new remote control client
rcse.mRcClient = rcClient;
+ rcse.mCallingPackageName = callingPackageName;
+ rcse.mCallingUid = Binder.getCallingUid();
+ if (rcClient == null) {
+ rcse.mRcClientDeathHandler = null;
+ break;
+ }
+
+ // 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);
@@ -3392,14 +3406,8 @@
e.printStackTrace();
}
}
- rcse.mCallingPackageName = callingPackageName;
- rcse.mCallingUid = Binder.getCallingUid();
- if (rcClient == null) {
- rcse.mRcClientDeathHandler = null;
- break;
- }
- // monitor the new client's death
- IBinder b = rcClient.asBinder();
+ // 2/ monitor the new client's death
+ IBinder b = rcse.mRcClient.asBinder();
RcClientDeathHandler rcdh =
new RcClientDeathHandler(b, rcse.mMediaIntent);
try {
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index 8793841..e275aa6 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -71,6 +71,11 @@
private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;
private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WEBM;
+ // More video file types
+ public static final int FILE_TYPE_MP2PS = 200;
+ private static final int FIRST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS;
+ private static final int LAST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS;
+
// Image file types
public static final int FILE_TYPE_JPEG = 31;
public static final int FILE_TYPE_GIF = 32;
@@ -235,6 +240,8 @@
addFileType("PPT", FILE_TYPE_MS_POWERPOINT, "application/mspowerpoint", MtpConstants.FORMAT_MS_POWERPOINT_PRESENTATION);
addFileType("FLAC", FILE_TYPE_FLAC, "audio/flac", MtpConstants.FORMAT_FLAC);
addFileType("ZIP", FILE_TYPE_ZIP, "application/zip");
+ addFileType("MPG", FILE_TYPE_MP2PS, "video/mp2p");
+ addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p");
}
public static boolean isAudioFileType(int fileType) {
@@ -246,7 +253,9 @@
public static boolean isVideoFileType(int fileType) {
return (fileType >= FIRST_VIDEO_FILE_TYPE &&
- fileType <= LAST_VIDEO_FILE_TYPE);
+ fileType <= LAST_VIDEO_FILE_TYPE)
+ || (fileType >= FIRST_VIDEO_FILE_TYPE2 &&
+ fileType <= LAST_VIDEO_FILE_TYPE2);
}
public static boolean isImageFileType(int fileType) {
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index 198ae4c..77acfe6 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -35,14 +35,27 @@
import java.lang.IllegalArgumentException;
/**
- * TODO javadoc update for ComponentName - PendingIntent change
* RemoteControlClient enables exposing information meant to be consumed by remote controls
* capable of displaying metadata, artwork and media transport control buttons.
- * A remote control client object is associated with a media button event receiver. This
+ *
+ * <p>A remote control client object is associated with a media button event receiver. This
* event receiver must have been previously registered with
* {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)} before the
* RemoteControlClient can be registered through
* {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}.
+ *
+ * <p>Here is an example of creating a RemoteControlClient instance after registering a media
+ * button event receiver:
+ * <pre>ComponentName myEventReceiver = new ComponentName(getPackageName(), MyRemoteControlEventReceiver.class.getName());
+ * AudioManager myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ * myAudioManager.registerMediaButtonEventReceiver(myEventReceiver);
+ * // build the PendingIntent for the remote control client
+ * Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ * mediaButtonIntent.setComponent(myEventReceiver);
+ * PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0);
+ * // create and register the remote control client
+ * RemoteControlClient myRemoteControlClient = new RemoteControlClient(mediaPendingIntent);
+ * myAudioManager.registerRemoteControlClient(myRemoteControlClient);</pre>
*/
public class RemoteControlClient
{
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index f2c1694..f16ba36 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -166,6 +166,9 @@
}
private void openMediaPlayer() throws IOException {
+ if (mAudio != null) {
+ mAudio.release();
+ }
mAudio = new MediaPlayer();
if (mUri != null) {
mAudio.setDataSource(mContext, mUri);
@@ -204,21 +207,6 @@
openMediaPlayer();
}
- /** @hide */
- public void setWakeMode(Context context, int mode) {
- if (mAudio == null) {
- try {
- openMediaPlayer();
- } catch (Exception ex) {
- Log.e(TAG, "setWakeMode() caught ", ex);
- mAudio = null;
- }
- }
- if (mAudio != null) {
- mAudio.setWakeMode(context, mode);
- }
- }
-
/**
* Plays the ringtone.
*/
diff --git a/media/java/android/media/videoeditor/AudioTrack.java b/media/java/android/media/videoeditor/AudioTrack.java
index 2de82f2..c5cc2ca 100755
--- a/media/java/android/media/videoeditor/AudioTrack.java
+++ b/media/java/android/media/videoeditor/AudioTrack.java
@@ -147,14 +147,16 @@
} catch (Exception e) {
throw new IllegalArgumentException(e.getMessage() + " : " + filename);
}
- switch (mMANativeHelper.getFileType(properties.fileType)) {
+ int fileType = mMANativeHelper.getFileType(properties.fileType);
+ switch (fileType) {
case MediaProperties.FILE_3GP:
case MediaProperties.FILE_MP4:
case MediaProperties.FILE_MP3:
+ case MediaProperties.FILE_AMR:
break;
default: {
- throw new IllegalArgumentException("Unsupported input file type");
+ throw new IllegalArgumentException("Unsupported input file type: " + fileType);
}
}
switch (mMANativeHelper.getAudioCodecType(properties.audioFormat)) {
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index d7b8eaa..03ae62a 100644
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -3239,6 +3239,9 @@
case FileType.M4V:
retValue = MediaProperties.FILE_M4V;
break;
+ case FileType.AMR:
+ retValue = MediaProperties.FILE_AMR;
+ break;
default:
retValue = -1;
diff --git a/media/java/android/media/videoeditor/MediaProperties.java b/media/java/android/media/videoeditor/MediaProperties.java
index fd034ab..cf518a5 100755
--- a/media/java/android/media/videoeditor/MediaProperties.java
+++ b/media/java/android/media/videoeditor/MediaProperties.java
@@ -286,7 +286,7 @@
*/
public static final int FILE_3GP = 0;
public static final int FILE_MP4 = 1;
- // 2 is for AMRNB
+ public static final int FILE_AMR = 2;
public static final int FILE_MP3 = 3;
// 4 is for PCM
public static final int FILE_JPEG = 5;
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index 6fdb726..6981668 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -554,7 +554,7 @@
}
status_t StagefrightRecorder::setParamGeoDataLongitude(
- int32_t longitudex10000) {
+ int64_t longitudex10000) {
if (longitudex10000 > 1800000 || longitudex10000 < -1800000) {
return BAD_VALUE;
@@ -564,7 +564,7 @@
}
status_t StagefrightRecorder::setParamGeoDataLatitude(
- int32_t latitudex10000) {
+ int64_t latitudex10000) {
if (latitudex10000 > 900000 || latitudex10000 < -900000) {
return BAD_VALUE;
@@ -602,13 +602,13 @@
return setParam64BitFileOffset(use64BitOffset != 0);
}
} else if (key == "param-geotag-longitude") {
- int32_t longitudex10000;
- if (safe_strtoi32(value.string(), &longitudex10000)) {
+ int64_t longitudex10000;
+ if (safe_strtoi64(value.string(), &longitudex10000)) {
return setParamGeoDataLongitude(longitudex10000);
}
} else if (key == "param-geotag-latitude") {
- int32_t latitudex10000;
- if (safe_strtoi32(value.string(), &latitudex10000)) {
+ int64_t latitudex10000;
+ if (safe_strtoi64(value.string(), &latitudex10000)) {
return setParamGeoDataLatitude(latitudex10000);
}
} else if (key == "param-track-time-status") {
diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h
index 5c5f05c..ec5ce7e 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.h
+++ b/media/libmediaplayerservice/StagefrightRecorder.h
@@ -173,8 +173,8 @@
status_t setParamMaxFileDurationUs(int64_t timeUs);
status_t setParamMaxFileSizeBytes(int64_t bytes);
status_t setParamMovieTimeScale(int32_t timeScale);
- status_t setParamGeoDataLongitude(int32_t longitudex10000);
- status_t setParamGeoDataLatitude(int32_t latitudex10000);
+ status_t setParamGeoDataLongitude(int64_t longitudex10000);
+ status_t setParamGeoDataLatitude(int64_t latitudex10000);
void clipVideoBitRate();
void clipVideoFrameRate();
void clipVideoFrameWidth();
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 9cb18de..d947760 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -681,6 +681,10 @@
static const MimeToRole kMimeToRole[] = {
{ MEDIA_MIMETYPE_AUDIO_MPEG,
"audio_decoder.mp3", "audio_encoder.mp3" },
+ { MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I,
+ "audio_decoder.mp1", "audio_encoder.mp1" },
+ { MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II,
+ "audio_decoder.mp2", "audio_encoder.mp2" },
{ MEDIA_MIMETYPE_AUDIO_AMR_NB,
"audio_decoder.amrnb", "audio_encoder.amrnb" },
{ MEDIA_MIMETYPE_AUDIO_AMR_WB,
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index fa9417a..0ddc83a 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1081,7 +1081,8 @@
if (USE_SURFACE_ALLOC
&& !strncmp(component, "OMX.", 4)
- && strncmp(component, "OMX.google.", 11)) {
+ && strncmp(component, "OMX.google.", 11)
+ && strcmp(component, "OMX.Nvidia.mpeg2v.decode")) {
// Hardware decoders avoid the CPU color conversion by decoding
// directly to ANativeBuffers, so we must use a renderer that
// just pushes those buffers to the ANativeWindow.
@@ -2005,6 +2006,11 @@
mConnectingDataSource->setUID(mUID);
}
+ String8 cacheConfig;
+ bool disconnectAtHighwatermark;
+ NuCachedSource2::RemoveCacheSpecificHeaders(
+ &mUriHeaders, &cacheConfig, &disconnectAtHighwatermark);
+
mLock.unlock();
status_t err = mConnectingDataSource->connect(mUri, &mUriHeaders);
mLock.lock();
@@ -2024,7 +2030,10 @@
new ThrottledSource(
mConnectingDataSource, 50 * 1024 /* bytes/sec */));
#else
- mCachedSource = new NuCachedSource2(mConnectingDataSource);
+ mCachedSource = new NuCachedSource2(
+ mConnectingDataSource,
+ cacheConfig.isEmpty() ? NULL : cacheConfig.string(),
+ disconnectAtHighwatermark);
#endif
dataSource = mCachedSource;
diff --git a/media/libstagefright/DataSource.cpp b/media/libstagefright/DataSource.cpp
index c16b3b5..70523c1 100644
--- a/media/libstagefright/DataSource.cpp
+++ b/media/libstagefright/DataSource.cpp
@@ -20,6 +20,7 @@
#include "include/MPEG4Extractor.h"
#include "include/WAVExtractor.h"
#include "include/OggExtractor.h"
+#include "include/MPEG2PSExtractor.h"
#include "include/MPEG2TSExtractor.h"
#include "include/NuCachedSource2.h"
#include "include/HTTPBase.h"
@@ -113,6 +114,7 @@
RegisterSniffer(SniffMP3);
RegisterSniffer(SniffAAC);
RegisterSniffer(SniffAVI);
+ RegisterSniffer(SniffMPEG2PS);
char value[PROPERTY_VALUE_MAX];
if (property_get("drm.service.enabled", value, NULL)
diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp
index 92e84c2..34e9cd7 100644
--- a/media/libstagefright/MP3Extractor.cpp
+++ b/media/libstagefright/MP3Extractor.cpp
@@ -25,11 +25,11 @@
#include "include/VBRISeeker.h"
#include "include/XINGSeeker.h"
+#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/DataSource.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferGroup.h>
-#include <media/stagefright/MediaDebug.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MediaSource.h>
@@ -289,9 +289,24 @@
GetMPEGAudioFrameSize(
header, &frame_size, &sample_rate, &num_channels, &bitrate);
+ unsigned layer = 4 - ((header >> 17) & 3);
+
mMeta = new MetaData;
- mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+ switch (layer) {
+ case 1:
+ mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I);
+ break;
+ case 2:
+ mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II);
+ break;
+ case 3:
+ mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+ break;
+ default:
+ TRESPASS();
+ }
+
mMeta->setInt32(kKeySampleRate, sample_rate);
mMeta->setInt32(kKeyBitRate, bitrate * 1000);
mMeta->setInt32(kKeyChannelCount, num_channels);
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 3b79f06..1e24599 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -1972,6 +1972,12 @@
sampleIndex, &syncSampleIndex, findFlags);
}
+ uint32_t sampleTime;
+ if (err == OK) {
+ err = mSampleTable->getMetaDataForSample(
+ sampleIndex, NULL, NULL, &sampleTime);
+ }
+
if (err != OK) {
if (err == ERROR_OUT_OF_RANGE) {
// An attempt to seek past the end of the stream would
@@ -1984,10 +1990,6 @@
return err;
}
- uint32_t sampleTime;
- CHECK_EQ((status_t)OK, mSampleTable->getMetaDataForSample(
- sampleIndex, NULL, NULL, &sampleTime));
-
if (mode == ReadOptions::SEEK_CLOSEST) {
targetSampleTimeUs = (sampleTime * 1000000ll) / mTimescale;
}
diff --git a/media/libstagefright/MediaDefs.cpp b/media/libstagefright/MediaDefs.cpp
index 01f1fba..444e823 100644
--- a/media/libstagefright/MediaDefs.cpp
+++ b/media/libstagefright/MediaDefs.cpp
@@ -30,6 +30,8 @@
const char *MEDIA_MIMETYPE_AUDIO_AMR_NB = "audio/3gpp";
const char *MEDIA_MIMETYPE_AUDIO_AMR_WB = "audio/amr-wb";
const char *MEDIA_MIMETYPE_AUDIO_MPEG = "audio/mpeg";
+const char *MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I = "audio/mpeg-L1";
+const char *MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II = "audio/mpeg-L2";
const char *MEDIA_MIMETYPE_AUDIO_AAC = "audio/mp4a-latm";
const char *MEDIA_MIMETYPE_AUDIO_QCELP = "audio/qcelp";
const char *MEDIA_MIMETYPE_AUDIO_VORBIS = "audio/vorbis";
@@ -45,6 +47,7 @@
const char *MEDIA_MIMETYPE_CONTAINER_MATROSKA = "video/x-matroska";
const char *MEDIA_MIMETYPE_CONTAINER_MPEG2TS = "video/mp2ts";
const char *MEDIA_MIMETYPE_CONTAINER_AVI = "video/avi";
+const char *MEDIA_MIMETYPE_CONTAINER_MPEG2PS = "video/mp2p";
const char *MEDIA_MIMETYPE_CONTAINER_WVM = "video/wvm";
diff --git a/media/libstagefright/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp
index a8023df..2221268 100644
--- a/media/libstagefright/MediaExtractor.cpp
+++ b/media/libstagefright/MediaExtractor.cpp
@@ -24,6 +24,7 @@
#include "include/MPEG4Extractor.h"
#include "include/WAVExtractor.h"
#include "include/OggExtractor.h"
+#include "include/MPEG2PSExtractor.h"
#include "include/MPEG2TSExtractor.h"
#include "include/DRMExtractor.h"
#include "include/WVMExtractor.h"
@@ -115,6 +116,8 @@
ret = new WVMExtractor(source);
} else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC_ADTS)) {
ret = new AACExtractor(source);
+ } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_MPEG2PS)) {
+ ret = new MPEG2PSExtractor(source);
}
if (ret != NULL) {
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index 4edb613..4f183f5 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -21,6 +21,7 @@
#include "include/NuCachedSource2.h"
#include "include/HTTPBase.h"
+#include <cutils/properties.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/MediaErrors.h>
@@ -176,7 +177,10 @@
////////////////////////////////////////////////////////////////////////////////
-NuCachedSource2::NuCachedSource2(const sp<DataSource> &source)
+NuCachedSource2::NuCachedSource2(
+ const sp<DataSource> &source,
+ const char *cacheConfig,
+ bool disconnectAtHighwatermark)
: mSource(source),
mReflector(new AHandlerReflector<NuCachedSource2>(this)),
mLooper(new ALooper),
@@ -186,7 +190,27 @@
mLastAccessPos(0),
mFetching(true),
mLastFetchTimeUs(-1),
- mNumRetriesLeft(kMaxNumRetries) {
+ mNumRetriesLeft(kMaxNumRetries),
+ mHighwaterThresholdBytes(kDefaultHighWaterThreshold),
+ mLowwaterThresholdBytes(kDefaultLowWaterThreshold),
+ mKeepAliveIntervalUs(kDefaultKeepAliveIntervalUs),
+ mDisconnectAtHighwatermark(disconnectAtHighwatermark) {
+ // We are NOT going to support disconnect-at-highwatermark indefinitely
+ // and we are not guaranteeing support for client-specified cache
+ // parameters. Both of these are temporary measures to solve a specific
+ // problem that will be solved in a better way going forward.
+
+ updateCacheParamsFromSystemProperty();
+
+ if (cacheConfig != NULL) {
+ updateCacheParamsFromString(cacheConfig);
+ }
+
+ if (mDisconnectAtHighwatermark) {
+ // Makes no sense to disconnect and do keep-alives...
+ mKeepAliveIntervalUs = 0;
+ }
+
mLooper->setName("NuCachedSource2");
mLooper->registerHandler(mReflector);
mLooper->start();
@@ -318,7 +342,8 @@
bool keepAlive =
!mFetching
&& mFinalStatus == OK
- && ALooper::GetNowUs() >= mLastFetchTimeUs + kKeepAliveIntervalUs;
+ && mKeepAliveIntervalUs > 0
+ && ALooper::GetNowUs() >= mLastFetchTimeUs + mKeepAliveIntervalUs;
if (mFetching || keepAlive) {
if (keepAlive) {
@@ -329,9 +354,15 @@
mLastFetchTimeUs = ALooper::GetNowUs();
- if (mFetching && mCache->totalSize() >= kHighWaterThreshold) {
+ if (mFetching && mCache->totalSize() >= mHighwaterThresholdBytes) {
LOGI("Cache full, done prefetching for now");
mFetching = false;
+
+ if (mDisconnectAtHighwatermark
+ && (mSource->flags() & DataSource::kIsHTTPBasedSource)) {
+ LOGV("Disconnecting at high watermark");
+ static_cast<HTTPBase *>(mSource.get())->disconnect();
+ }
}
} else {
Mutex::Autolock autoLock(mLock);
@@ -392,7 +423,7 @@
if (!ignoreLowWaterThreshold && !force
&& mCacheOffset + mCache->totalSize() - mLastAccessPos
- >= kLowWaterThreshold) {
+ >= mLowwaterThresholdBytes) {
return;
}
@@ -482,7 +513,7 @@
}
ssize_t NuCachedSource2::readInternal(off64_t offset, void *data, size_t size) {
- CHECK_LE(size, (size_t)kHighWaterThreshold);
+ CHECK_LE(size, (size_t)mHighwaterThresholdBytes);
LOGV("readInternal offset %lld size %d", offset, size);
@@ -580,4 +611,84 @@
return mSource->getMIMEType();
}
+void NuCachedSource2::updateCacheParamsFromSystemProperty() {
+ char value[PROPERTY_VALUE_MAX];
+ if (!property_get("media.stagefright.cache-params", value, NULL)) {
+ return;
+ }
+
+ updateCacheParamsFromString(value);
+}
+
+void NuCachedSource2::updateCacheParamsFromString(const char *s) {
+ ssize_t lowwaterMarkKb, highwaterMarkKb;
+ int keepAliveSecs;
+
+ if (sscanf(s, "%ld/%ld/%d",
+ &lowwaterMarkKb, &highwaterMarkKb, &keepAliveSecs) != 3) {
+ LOGE("Failed to parse cache parameters from '%s'.", s);
+ return;
+ }
+
+ if (lowwaterMarkKb >= 0) {
+ mLowwaterThresholdBytes = lowwaterMarkKb * 1024;
+ } else {
+ mLowwaterThresholdBytes = kDefaultLowWaterThreshold;
+ }
+
+ if (highwaterMarkKb >= 0) {
+ mHighwaterThresholdBytes = highwaterMarkKb * 1024;
+ } else {
+ mHighwaterThresholdBytes = kDefaultHighWaterThreshold;
+ }
+
+ if (mLowwaterThresholdBytes >= mHighwaterThresholdBytes) {
+ LOGE("Illegal low/highwater marks specified, reverting to defaults.");
+
+ mLowwaterThresholdBytes = kDefaultLowWaterThreshold;
+ mHighwaterThresholdBytes = kDefaultHighWaterThreshold;
+ }
+
+ if (keepAliveSecs >= 0) {
+ mKeepAliveIntervalUs = keepAliveSecs * 1000000ll;
+ } else {
+ mKeepAliveIntervalUs = kDefaultKeepAliveIntervalUs;
+ }
+
+ LOGV("lowwater = %d bytes, highwater = %d bytes, keepalive = %lld us",
+ mLowwaterThresholdBytes,
+ mHighwaterThresholdBytes,
+ mKeepAliveIntervalUs);
+}
+
+// static
+void NuCachedSource2::RemoveCacheSpecificHeaders(
+ KeyedVector<String8, String8> *headers,
+ String8 *cacheConfig,
+ bool *disconnectAtHighwatermark) {
+ *cacheConfig = String8();
+ *disconnectAtHighwatermark = false;
+
+ if (headers == NULL) {
+ return;
+ }
+
+ ssize_t index;
+ if ((index = headers->indexOfKey(String8("x-cache-config"))) >= 0) {
+ *cacheConfig = headers->valueAt(index);
+
+ headers->removeItemsAt(index);
+
+ LOGV("Using special cache config '%s'", cacheConfig->string());
+ }
+
+ if ((index = headers->indexOfKey(
+ String8("x-disconnect-at-highwatermark"))) >= 0) {
+ *disconnectAtHighwatermark = true;
+ headers->removeItemsAt(index);
+
+ LOGV("Client requested disconnection at highwater mark");
+ }
+}
+
} // namespace android
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index e94a8d7..86bd267 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -102,6 +102,7 @@
{ MEDIA_MIMETYPE_IMAGE_JPEG, "OMX.TI.JPEG.decode" },
// { MEDIA_MIMETYPE_AUDIO_MPEG, "OMX.TI.MP3.decode" },
{ MEDIA_MIMETYPE_AUDIO_MPEG, "OMX.google.mp3.decoder" },
+ { MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II, "OMX.Nvidia.mp2.decoder" },
// { MEDIA_MIMETYPE_AUDIO_AMR_NB, "OMX.TI.AMR.decode" },
// { MEDIA_MIMETYPE_AUDIO_AMR_NB, "OMX.Nvidia.amr.decoder" },
{ MEDIA_MIMETYPE_AUDIO_AMR_NB, "OMX.google.amrnb.decoder" },
@@ -625,7 +626,11 @@
CHECK(meta->findInt32(kKeyChannelCount, &numChannels));
CHECK(meta->findInt32(kKeySampleRate, &sampleRate));
- setAACFormat(numChannels, sampleRate, bitRate);
+ status_t err = setAACFormat(numChannels, sampleRate, bitRate);
+ if (err != OK) {
+ CODEC_LOGE("setAACFormat() failed (err = %d)", err);
+ return err;
+ }
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_G711_ALAW, mMIME)
|| !strcasecmp(MEDIA_MIMETYPE_AUDIO_G711_MLAW, mMIME)) {
// These are PCM-like formats with a fixed sample rate but
@@ -1458,7 +1463,9 @@
mOutputPortSettingsChangedPending(false),
mLeftOverBuffer(NULL),
mPaused(false),
- mNativeWindow(!strncmp(componentName, "OMX.google.", 11)
+ mNativeWindow(
+ (!strncmp(componentName, "OMX.google.", 11)
+ || !strcmp(componentName, "OMX.Nvidia.mpeg2v.decode"))
? NULL : nativeWindow) {
mPortStatus[kPortIndexInput] = ENABLED;
mPortStatus[kPortIndexOutput] = ENABLED;
@@ -1479,6 +1486,12 @@
static const MimeToRole kMimeToRole[] = {
{ MEDIA_MIMETYPE_AUDIO_MPEG,
"audio_decoder.mp3", "audio_encoder.mp3" },
+ { MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I,
+ "audio_decoder.mp1", "audio_encoder.mp1" },
+ { MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II,
+ "audio_decoder.mp2", "audio_encoder.mp2" },
+ { MEDIA_MIMETYPE_AUDIO_MPEG,
+ "audio_decoder.mp3", "audio_encoder.mp3" },
{ MEDIA_MIMETYPE_AUDIO_AMR_NB,
"audio_decoder.amrnb", "audio_encoder.amrnb" },
{ MEDIA_MIMETYPE_AUDIO_AMR_WB,
@@ -2347,22 +2360,6 @@
formatHasNotablyChanged(oldOutputFormat, mOutputFormat)) {
mOutputPortSettingsHaveChanged = true;
- if (mNativeWindow != NULL) {
- int32_t left, top, right, bottom;
- CHECK(mOutputFormat->findRect(
- kKeyCropRect,
- &left, &top, &right, &bottom));
-
- android_native_rect_t crop;
- crop.left = left;
- crop.top = top;
- crop.right = right + 1;
- crop.bottom = bottom + 1;
-
- // We'll ignore any errors here, if the surface is
- // already invalid, we'll know soon enough.
- native_window_set_crop(mNativeWindow.get(), &crop);
- }
} else if (data2 == OMX_IndexConfigCommonScale) {
OMX_CONFIG_SCALEFACTORTYPE scale;
InitOMXParams(&scale);
@@ -3358,8 +3355,10 @@
}
}
-void OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate) {
- CHECK(numChannels == 1 || numChannels == 2);
+status_t OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate) {
+ if (numChannels > 2)
+ LOGW("Number of channels: (%d) \n", numChannels);
+
if (mIsEncoder) {
//////////////// input port ////////////////////
setRawAudioFormat(kPortIndexInput, sampleRate, numChannels);
@@ -3410,9 +3409,13 @@
profile.nAACERtools = OMX_AUDIO_AACERNone;
profile.eAACProfile = OMX_AUDIO_AACObjectLC;
profile.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4FF;
- CHECK_EQ(mOMX->setParameter(mNode, OMX_IndexParamAudioAac,
- &profile, sizeof(profile)), (status_t)OK);
+ err = mOMX->setParameter(mNode, OMX_IndexParamAudioAac,
+ &profile, sizeof(profile));
+ if (err != OK) {
+ CODEC_LOGE("setParameter('OMX_IndexParamAudioAac') failed (err = %d)", err);
+ return err;
+ }
} else {
OMX_AUDIO_PARAM_AACPROFILETYPE profile;
InitOMXParams(&profile);
@@ -3428,8 +3431,14 @@
err = mOMX->setParameter(
mNode, OMX_IndexParamAudioAac, &profile, sizeof(profile));
- CHECK_EQ(err, (status_t)OK);
+
+ if (err != OK) {
+ CODEC_LOGE("setParameter('OMX_IndexParamAudioAac') failed (err = %d)", err);
+ return err;
+ }
}
+
+ return OK;
}
void OMXCodec::setG711Format(int32_t numChannels) {
@@ -4167,6 +4176,24 @@
return OK;
}
+void OMXCodec::initNativeWindowCrop() {
+ int32_t left, top, right, bottom;
+
+ CHECK(mOutputFormat->findRect(
+ kKeyCropRect,
+ &left, &top, &right, &bottom));
+
+ android_native_rect_t crop;
+ crop.left = left;
+ crop.top = top;
+ crop.right = right + 1;
+ crop.bottom = bottom + 1;
+
+ // We'll ignore any errors here, if the surface is
+ // already invalid, we'll know soon enough.
+ native_window_set_crop(mNativeWindow.get(), &crop);
+}
+
void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) {
mOutputFormat = new MetaData;
mOutputFormat->setCString(kKeyDecoderComponent, mComponentName);
@@ -4350,6 +4377,10 @@
video_def->nFrameWidth - 1,
video_def->nFrameHeight - 1);
}
+
+ if (mNativeWindow != NULL) {
+ initNativeWindowCrop();
+ }
}
break;
}
diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp
index 571e8be27..bb6e4cd 100644
--- a/media/libstagefright/StagefrightMediaScanner.cpp
+++ b/media/libstagefright/StagefrightMediaScanner.cpp
@@ -38,7 +38,7 @@
".mpeg", ".ogg", ".mid", ".smf", ".imy", ".wma", ".aac",
".wav", ".amr", ".midi", ".xmf", ".rtttl", ".rtx", ".ota",
".mkv", ".mka", ".webm", ".ts", ".fl", ".flac", ".mxmf",
- ".avi",
+ ".avi", ".mpeg", ".mpg"
};
static const size_t kNumValidExtensions =
sizeof(kValidExtensions) / sizeof(kValidExtensions[0]);
diff --git a/media/libstagefright/include/MPEG2PSExtractor.h b/media/libstagefright/include/MPEG2PSExtractor.h
new file mode 100644
index 0000000..fb76564
--- /dev/null
+++ b/media/libstagefright/include/MPEG2PSExtractor.h
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+#ifndef MPEG2_PS_EXTRACTOR_H_
+
+#define MPEG2_PS_EXTRACTOR_H_
+
+#include <media/stagefright/foundation/ABase.h>
+#include <media/stagefright/MediaExtractor.h>
+#include <utils/threads.h>
+#include <utils/KeyedVector.h>
+
+namespace android {
+
+struct ABuffer;
+struct AMessage;
+struct Track;
+struct String8;
+
+struct MPEG2PSExtractor : public MediaExtractor {
+ MPEG2PSExtractor(const sp<DataSource> &source);
+
+ virtual size_t countTracks();
+ virtual sp<MediaSource> getTrack(size_t index);
+ virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
+
+ virtual sp<MetaData> getMetaData();
+
+ virtual uint32_t flags() const;
+
+protected:
+ virtual ~MPEG2PSExtractor();
+
+private:
+ struct Track;
+ struct WrappedTrack;
+
+ mutable Mutex mLock;
+ sp<DataSource> mDataSource;
+
+ off64_t mOffset;
+ status_t mFinalResult;
+ sp<ABuffer> mBuffer;
+ KeyedVector<unsigned, sp<Track> > mTracks;
+ bool mScanning;
+
+ bool mProgramStreamMapValid;
+ KeyedVector<unsigned, unsigned> mStreamTypeByESID;
+
+ status_t feedMore();
+
+ status_t dequeueChunk();
+ ssize_t dequeuePack();
+ ssize_t dequeueSystemHeader();
+ ssize_t dequeuePES();
+
+ DISALLOW_EVIL_CONSTRUCTORS(MPEG2PSExtractor);
+};
+
+bool SniffMPEG2PS(
+ const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ sp<AMessage> *);
+
+} // namespace android
+
+#endif // MPEG2_PS_EXTRACTOR_H_
+
diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h
index 22b2855..7a03e7e 100644
--- a/media/libstagefright/include/NuCachedSource2.h
+++ b/media/libstagefright/include/NuCachedSource2.h
@@ -28,7 +28,10 @@
struct PageCache;
struct NuCachedSource2 : public DataSource {
- NuCachedSource2(const sp<DataSource> &source);
+ NuCachedSource2(
+ const sp<DataSource> &source,
+ const char *cacheConfig = NULL,
+ bool disconnectAtHighwatermark = false);
virtual status_t initCheck() const;
@@ -56,6 +59,11 @@
status_t getEstimatedBandwidthKbps(int32_t *kbps);
status_t setCacheStatCollectFreq(int32_t freqMs);
+ static void RemoveCacheSpecificHeaders(
+ KeyedVector<String8, String8> *headers,
+ String8 *cacheConfig,
+ bool *disconnectAtHighwatermark);
+
protected:
virtual ~NuCachedSource2();
@@ -63,13 +71,13 @@
friend struct AHandlerReflector<NuCachedSource2>;
enum {
- kPageSize = 65536,
- kHighWaterThreshold = 20 * 1024 * 1024,
- kLowWaterThreshold = 4 * 1024 * 1024,
+ kPageSize = 65536,
+ kDefaultHighWaterThreshold = 20 * 1024 * 1024,
+ kDefaultLowWaterThreshold = 4 * 1024 * 1024,
// Read data after a 15 sec timeout whether we're actively
// fetching or not.
- kKeepAliveIntervalUs = 15000000,
+ kDefaultKeepAliveIntervalUs = 15000000,
};
enum {
@@ -99,6 +107,14 @@
int32_t mNumRetriesLeft;
+ size_t mHighwaterThresholdBytes;
+ size_t mLowwaterThresholdBytes;
+
+ // If the keep-alive interval is 0, keep-alives are disabled.
+ int64_t mKeepAliveIntervalUs;
+
+ bool mDisconnectAtHighwatermark;
+
void onMessageReceived(const sp<AMessage> &msg);
void onFetch();
void onRead(const sp<AMessage> &msg);
@@ -112,6 +128,9 @@
void restartPrefetcherIfNecessary_l(
bool ignoreLowWaterThreshold = false, bool force = false);
+ void updateCacheParamsFromSystemProperty();
+ void updateCacheParamsFromString(const char *s);
+
DISALLOW_EVIL_CONSTRUCTORS(NuCachedSource2);
};
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index e13464e..72f1282 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -724,8 +724,10 @@
const uint8_t *data, size_t size) {
LOGV("onPayloadData mStreamType=0x%02x", mStreamType);
- CHECK(PTS_DTS_flags == 2 || PTS_DTS_flags == 3);
- int64_t timeUs = mProgram->convertPTSToTimestamp(PTS);
+ int64_t timeUs = 0ll; // no presentation timestamp available.
+ if (PTS_DTS_flags == 2 || PTS_DTS_flags == 3) {
+ timeUs = mProgram->convertPTSToTimestamp(PTS);
+ }
status_t err = mQueue->appendData(data, size, timeUs);
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index 388cb54..878e534 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -64,12 +64,9 @@
bool PTSTimeDeltaEstablished();
-protected:
- virtual ~ATSParser();
-
-private:
enum {
// From ISO/IEC 13818-1: 2000 (E), Table 2-29
+ STREAMTYPE_RESERVED = 0x00,
STREAMTYPE_MPEG1_VIDEO = 0x01,
STREAMTYPE_MPEG2_VIDEO = 0x02,
STREAMTYPE_MPEG1_AUDIO = 0x03,
@@ -79,6 +76,10 @@
STREAMTYPE_H264 = 0x1b,
};
+protected:
+ virtual ~ATSParser();
+
+private:
struct Program;
struct Stream;
diff --git a/media/libstagefright/mpeg2ts/Android.mk b/media/libstagefright/mpeg2ts/Android.mk
index 4a30416..578c669 100644
--- a/media/libstagefright/mpeg2ts/Android.mk
+++ b/media/libstagefright/mpeg2ts/Android.mk
@@ -6,6 +6,7 @@
AnotherPacketSource.cpp \
ATSParser.cpp \
ESQueue.cpp \
+ MPEG2PSExtractor.cpp \
MPEG2TSExtractor.cpp \
LOCAL_C_INCLUDES:= \
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp
index f8a1d84..b9a4826 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.cpp
+++ b/media/libstagefright/mpeg2ts/ESQueue.cpp
@@ -444,6 +444,10 @@
}
}
+ if (timeUs == 0ll) {
+ LOGV("Returning 0 timestamp");
+ }
+
return timeUs;
}
@@ -581,6 +585,8 @@
return NULL;
}
+ unsigned layer = 4 - ((header >> 17) & 3);
+
sp<ABuffer> accessUnit = new ABuffer(frameSize);
memcpy(accessUnit->data(), data, frameSize);
@@ -597,7 +603,24 @@
if (mFormat == NULL) {
mFormat = new MetaData;
- mFormat->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+
+ switch (layer) {
+ case 1:
+ mFormat->setCString(
+ kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I);
+ break;
+ case 2:
+ mFormat->setCString(
+ kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II);
+ break;
+ case 3:
+ mFormat->setCString(
+ kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+ break;
+ default:
+ TRESPASS();
+ }
+
mFormat->setInt32(kKeySampleRate, samplingRate);
mFormat->setInt32(kKeyChannelCount, numChannels);
}
diff --git a/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp
new file mode 100644
index 0000000..f55be6e
--- /dev/null
+++ b/media/libstagefright/mpeg2ts/MPEG2PSExtractor.cpp
@@ -0,0 +1,715 @@
+/*
+ * 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.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "MPEG2PSExtractor"
+#include <utils/Log.h>
+
+#include "include/MPEG2PSExtractor.h"
+
+#include "AnotherPacketSource.h"
+#include "ESQueue.h"
+
+#include <media/stagefright/foundation/ABitReader.h>
+#include <media/stagefright/foundation/ABuffer.h>
+#include <media/stagefright/foundation/ADebug.h>
+#include <media/stagefright/foundation/AMessage.h>
+#include <media/stagefright/foundation/hexdump.h>
+#include <media/stagefright/DataSource.h>
+#include <media/stagefright/MediaDefs.h>
+#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MediaSource.h>
+#include <media/stagefright/MetaData.h>
+#include <media/stagefright/Utils.h>
+#include <utils/String8.h>
+
+namespace android {
+
+struct MPEG2PSExtractor::Track : public MediaSource {
+ Track(MPEG2PSExtractor *extractor,
+ unsigned stream_id, unsigned stream_type);
+
+ virtual status_t start(MetaData *params);
+ virtual status_t stop();
+ virtual sp<MetaData> getFormat();
+
+ virtual status_t read(
+ MediaBuffer **buffer, const ReadOptions *options);
+
+protected:
+ virtual ~Track();
+
+private:
+ friend struct MPEG2PSExtractor;
+
+ MPEG2PSExtractor *mExtractor;
+
+ unsigned mStreamID;
+ unsigned mStreamType;
+ ElementaryStreamQueue *mQueue;
+ sp<AnotherPacketSource> mSource;
+
+ status_t appendPESData(
+ unsigned PTS_DTS_flags,
+ uint64_t PTS, uint64_t DTS,
+ const uint8_t *data, size_t size);
+
+ DISALLOW_EVIL_CONSTRUCTORS(Track);
+};
+
+struct MPEG2PSExtractor::WrappedTrack : public MediaSource {
+ WrappedTrack(const sp<MPEG2PSExtractor> &extractor, const sp<Track> &track);
+
+ virtual status_t start(MetaData *params);
+ virtual status_t stop();
+ virtual sp<MetaData> getFormat();
+
+ virtual status_t read(
+ MediaBuffer **buffer, const ReadOptions *options);
+
+protected:
+ virtual ~WrappedTrack();
+
+private:
+ sp<MPEG2PSExtractor> mExtractor;
+ sp<MPEG2PSExtractor::Track> mTrack;
+
+ DISALLOW_EVIL_CONSTRUCTORS(WrappedTrack);
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+MPEG2PSExtractor::MPEG2PSExtractor(const sp<DataSource> &source)
+ : mDataSource(source),
+ mOffset(0),
+ mFinalResult(OK),
+ mBuffer(new ABuffer(0)),
+ mScanning(true),
+ mProgramStreamMapValid(false) {
+ for (size_t i = 0; i < 500; ++i) {
+ if (feedMore() != OK) {
+ break;
+ }
+ }
+
+ // Remove all tracks that were unable to determine their format.
+ for (size_t i = mTracks.size(); i-- > 0;) {
+ if (mTracks.valueAt(i)->getFormat() == NULL) {
+ mTracks.removeItemsAt(i);
+ }
+ }
+
+ mScanning = false;
+}
+
+MPEG2PSExtractor::~MPEG2PSExtractor() {
+}
+
+size_t MPEG2PSExtractor::countTracks() {
+ return mTracks.size();
+}
+
+sp<MediaSource> MPEG2PSExtractor::getTrack(size_t index) {
+ if (index >= mTracks.size()) {
+ return NULL;
+ }
+
+ return new WrappedTrack(this, mTracks.valueAt(index));
+}
+
+sp<MetaData> MPEG2PSExtractor::getTrackMetaData(size_t index, uint32_t flags) {
+ if (index >= mTracks.size()) {
+ return NULL;
+ }
+
+ return mTracks.valueAt(index)->getFormat();
+}
+
+sp<MetaData> MPEG2PSExtractor::getMetaData() {
+ sp<MetaData> meta = new MetaData;
+ meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_CONTAINER_MPEG2PS);
+
+ return meta;
+}
+
+uint32_t MPEG2PSExtractor::flags() const {
+ return CAN_PAUSE;
+}
+
+status_t MPEG2PSExtractor::feedMore() {
+ Mutex::Autolock autoLock(mLock);
+
+ // How much data we're reading at a time
+ static const size_t kChunkSize = 8192;
+
+ for (;;) {
+ status_t err = dequeueChunk();
+
+ if (err == -EAGAIN && mFinalResult == OK) {
+ memmove(mBuffer->base(), mBuffer->data(), mBuffer->size());
+ mBuffer->setRange(0, mBuffer->size());
+
+ if (mBuffer->size() + kChunkSize > mBuffer->capacity()) {
+ size_t newCapacity = mBuffer->capacity() + kChunkSize;
+ sp<ABuffer> newBuffer = new ABuffer(newCapacity);
+ memcpy(newBuffer->data(), mBuffer->data(), mBuffer->size());
+ newBuffer->setRange(0, mBuffer->size());
+ mBuffer = newBuffer;
+ }
+
+ ssize_t n = mDataSource->readAt(
+ mOffset, mBuffer->data() + mBuffer->size(), kChunkSize);
+
+ if (n < (ssize_t)kChunkSize) {
+ mFinalResult = (n < 0) ? (status_t)n : ERROR_END_OF_STREAM;
+ return mFinalResult;
+ }
+
+ mBuffer->setRange(mBuffer->offset(), mBuffer->size() + n);
+ mOffset += n;
+ } else if (err != OK) {
+ mFinalResult = err;
+ return err;
+ } else {
+ return OK;
+ }
+ }
+}
+
+status_t MPEG2PSExtractor::dequeueChunk() {
+ if (mBuffer->size() < 4) {
+ return -EAGAIN;
+ }
+
+ if (memcmp("\x00\x00\x01", mBuffer->data(), 3)) {
+ return ERROR_MALFORMED;
+ }
+
+ unsigned chunkType = mBuffer->data()[3];
+
+ ssize_t res;
+
+ switch (chunkType) {
+ case 0xba:
+ {
+ res = dequeuePack();
+ break;
+ }
+
+ case 0xbb:
+ {
+ res = dequeueSystemHeader();
+ break;
+ }
+
+ default:
+ {
+ res = dequeuePES();
+ break;
+ }
+ }
+
+ if (res > 0) {
+ if (mBuffer->size() < (size_t)res) {
+ return -EAGAIN;
+ }
+
+ mBuffer->setRange(mBuffer->offset() + res, mBuffer->size() - res);
+ res = OK;
+ }
+
+ return res;
+}
+
+ssize_t MPEG2PSExtractor::dequeuePack() {
+ // 32 + 2 + 3 + 1 + 15 + 1 + 15+ 1 + 9 + 1 + 22 + 1 + 1 | +5
+
+ if (mBuffer->size() < 14) {
+ return -EAGAIN;
+ }
+
+ unsigned pack_stuffing_length = mBuffer->data()[13] & 7;
+
+ return pack_stuffing_length + 14;
+}
+
+ssize_t MPEG2PSExtractor::dequeueSystemHeader() {
+ if (mBuffer->size() < 6) {
+ return -EAGAIN;
+ }
+
+ unsigned header_length = U16_AT(mBuffer->data() + 4);
+
+ return header_length + 6;
+}
+
+ssize_t MPEG2PSExtractor::dequeuePES() {
+ if (mBuffer->size() < 6) {
+ return -EAGAIN;
+ }
+
+ unsigned PES_packet_length = U16_AT(mBuffer->data() + 4);
+ CHECK_NE(PES_packet_length, 0u);
+
+ size_t n = PES_packet_length + 6;
+
+ if (mBuffer->size() < n) {
+ return -EAGAIN;
+ }
+
+ ABitReader br(mBuffer->data(), n);
+
+ unsigned packet_startcode_prefix = br.getBits(24);
+
+ LOGV("packet_startcode_prefix = 0x%08x", packet_startcode_prefix);
+
+ if (packet_startcode_prefix != 1) {
+ LOGV("Supposedly payload_unit_start=1 unit does not start "
+ "with startcode.");
+
+ return ERROR_MALFORMED;
+ }
+
+ CHECK_EQ(packet_startcode_prefix, 0x000001u);
+
+ unsigned stream_id = br.getBits(8);
+ LOGV("stream_id = 0x%02x", stream_id);
+
+ /* unsigned PES_packet_length = */br.getBits(16);
+
+ if (stream_id == 0xbc) {
+ // program_stream_map
+
+ if (!mScanning) {
+ return n;
+ }
+
+ mStreamTypeByESID.clear();
+
+ /* unsigned current_next_indicator = */br.getBits(1);
+ /* unsigned reserved = */br.getBits(2);
+ /* unsigned program_stream_map_version = */br.getBits(5);
+ /* unsigned reserved = */br.getBits(7);
+ /* unsigned marker_bit = */br.getBits(1);
+ unsigned program_stream_info_length = br.getBits(16);
+
+ size_t offset = 0;
+ while (offset < program_stream_info_length) {
+ if (offset + 2 > program_stream_info_length) {
+ return ERROR_MALFORMED;
+ }
+
+ unsigned descriptor_tag = br.getBits(8);
+ unsigned descriptor_length = br.getBits(8);
+
+ LOGI("found descriptor tag 0x%02x of length %u",
+ descriptor_tag, descriptor_length);
+
+ if (offset + 2 + descriptor_length > program_stream_info_length) {
+ return ERROR_MALFORMED;
+ }
+
+ br.skipBits(8 * descriptor_length);
+
+ offset += 2 + descriptor_length;
+ }
+
+ unsigned elementary_stream_map_length = br.getBits(16);
+
+ offset = 0;
+ while (offset < elementary_stream_map_length) {
+ if (offset + 4 > elementary_stream_map_length) {
+ return ERROR_MALFORMED;
+ }
+
+ unsigned stream_type = br.getBits(8);
+ unsigned elementary_stream_id = br.getBits(8);
+
+ LOGI("elementary stream id 0x%02x has stream type 0x%02x",
+ elementary_stream_id, stream_type);
+
+ mStreamTypeByESID.add(elementary_stream_id, stream_type);
+
+ unsigned elementary_stream_info_length = br.getBits(16);
+
+ if (offset + 4 + elementary_stream_info_length
+ > elementary_stream_map_length) {
+ return ERROR_MALFORMED;
+ }
+
+ offset += 4 + elementary_stream_info_length;
+ }
+
+ /* unsigned CRC32 = */br.getBits(32);
+
+ mProgramStreamMapValid = true;
+ } else if (stream_id != 0xbe // padding_stream
+ && stream_id != 0xbf // private_stream_2
+ && stream_id != 0xf0 // ECM
+ && stream_id != 0xf1 // EMM
+ && stream_id != 0xff // program_stream_directory
+ && stream_id != 0xf2 // DSMCC
+ && stream_id != 0xf8) { // H.222.1 type E
+ CHECK_EQ(br.getBits(2), 2u);
+
+ /* unsigned PES_scrambling_control = */br.getBits(2);
+ /* unsigned PES_priority = */br.getBits(1);
+ /* unsigned data_alignment_indicator = */br.getBits(1);
+ /* unsigned copyright = */br.getBits(1);
+ /* unsigned original_or_copy = */br.getBits(1);
+
+ unsigned PTS_DTS_flags = br.getBits(2);
+ LOGV("PTS_DTS_flags = %u", PTS_DTS_flags);
+
+ unsigned ESCR_flag = br.getBits(1);
+ LOGV("ESCR_flag = %u", ESCR_flag);
+
+ unsigned ES_rate_flag = br.getBits(1);
+ LOGV("ES_rate_flag = %u", ES_rate_flag);
+
+ unsigned DSM_trick_mode_flag = br.getBits(1);
+ LOGV("DSM_trick_mode_flag = %u", DSM_trick_mode_flag);
+
+ unsigned additional_copy_info_flag = br.getBits(1);
+ LOGV("additional_copy_info_flag = %u", additional_copy_info_flag);
+
+ /* unsigned PES_CRC_flag = */br.getBits(1);
+ /* PES_extension_flag = */br.getBits(1);
+
+ unsigned PES_header_data_length = br.getBits(8);
+ LOGV("PES_header_data_length = %u", PES_header_data_length);
+
+ unsigned optional_bytes_remaining = PES_header_data_length;
+
+ uint64_t PTS = 0, DTS = 0;
+
+ if (PTS_DTS_flags == 2 || PTS_DTS_flags == 3) {
+ CHECK_GE(optional_bytes_remaining, 5u);
+
+ CHECK_EQ(br.getBits(4), PTS_DTS_flags);
+
+ PTS = ((uint64_t)br.getBits(3)) << 30;
+ CHECK_EQ(br.getBits(1), 1u);
+ PTS |= ((uint64_t)br.getBits(15)) << 15;
+ CHECK_EQ(br.getBits(1), 1u);
+ PTS |= br.getBits(15);
+ CHECK_EQ(br.getBits(1), 1u);
+
+ LOGV("PTS = %llu", PTS);
+ // LOGI("PTS = %.2f secs", PTS / 90000.0f);
+
+ optional_bytes_remaining -= 5;
+
+ if (PTS_DTS_flags == 3) {
+ CHECK_GE(optional_bytes_remaining, 5u);
+
+ CHECK_EQ(br.getBits(4), 1u);
+
+ DTS = ((uint64_t)br.getBits(3)) << 30;
+ CHECK_EQ(br.getBits(1), 1u);
+ DTS |= ((uint64_t)br.getBits(15)) << 15;
+ CHECK_EQ(br.getBits(1), 1u);
+ DTS |= br.getBits(15);
+ CHECK_EQ(br.getBits(1), 1u);
+
+ LOGV("DTS = %llu", DTS);
+
+ optional_bytes_remaining -= 5;
+ }
+ }
+
+ if (ESCR_flag) {
+ CHECK_GE(optional_bytes_remaining, 6u);
+
+ br.getBits(2);
+
+ uint64_t ESCR = ((uint64_t)br.getBits(3)) << 30;
+ CHECK_EQ(br.getBits(1), 1u);
+ ESCR |= ((uint64_t)br.getBits(15)) << 15;
+ CHECK_EQ(br.getBits(1), 1u);
+ ESCR |= br.getBits(15);
+ CHECK_EQ(br.getBits(1), 1u);
+
+ LOGV("ESCR = %llu", ESCR);
+ /* unsigned ESCR_extension = */br.getBits(9);
+
+ CHECK_EQ(br.getBits(1), 1u);
+
+ optional_bytes_remaining -= 6;
+ }
+
+ if (ES_rate_flag) {
+ CHECK_GE(optional_bytes_remaining, 3u);
+
+ CHECK_EQ(br.getBits(1), 1u);
+ /* unsigned ES_rate = */br.getBits(22);
+ CHECK_EQ(br.getBits(1), 1u);
+
+ optional_bytes_remaining -= 3;
+ }
+
+ br.skipBits(optional_bytes_remaining * 8);
+
+ // ES data follows.
+
+ CHECK_GE(PES_packet_length, PES_header_data_length + 3);
+
+ unsigned dataLength =
+ PES_packet_length - 3 - PES_header_data_length;
+
+ if (br.numBitsLeft() < dataLength * 8) {
+ LOGE("PES packet does not carry enough data to contain "
+ "payload. (numBitsLeft = %d, required = %d)",
+ br.numBitsLeft(), dataLength * 8);
+
+ return ERROR_MALFORMED;
+ }
+
+ CHECK_GE(br.numBitsLeft(), dataLength * 8);
+
+ ssize_t index = mTracks.indexOfKey(stream_id);
+ if (index < 0 && mScanning) {
+ unsigned streamType;
+
+ ssize_t streamTypeIndex;
+ if (mProgramStreamMapValid
+ && (streamTypeIndex =
+ mStreamTypeByESID.indexOfKey(stream_id)) >= 0) {
+ streamType = mStreamTypeByESID.valueAt(streamTypeIndex);
+ } else if ((stream_id & ~0x1f) == 0xc0) {
+ // ISO/IEC 13818-3 or ISO/IEC 11172-3 or ISO/IEC 13818-7
+ // or ISO/IEC 14496-3 audio
+ streamType = ATSParser::STREAMTYPE_MPEG2_AUDIO;
+ } else if ((stream_id & ~0x0f) == 0xe0) {
+ // ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC 14496-2 video
+ streamType = ATSParser::STREAMTYPE_MPEG2_VIDEO;
+ } else {
+ streamType = ATSParser::STREAMTYPE_RESERVED;
+ }
+
+ index = mTracks.add(
+ stream_id, new Track(this, stream_id, streamType));
+ }
+
+ status_t err = OK;
+
+ if (index >= 0) {
+ err =
+ mTracks.editValueAt(index)->appendPESData(
+ PTS_DTS_flags, PTS, DTS, br.data(), dataLength);
+ }
+
+ br.skipBits(dataLength * 8);
+
+ if (err != OK) {
+ return err;
+ }
+ } else if (stream_id == 0xbe) { // padding_stream
+ CHECK_NE(PES_packet_length, 0u);
+ br.skipBits(PES_packet_length * 8);
+ } else {
+ CHECK_NE(PES_packet_length, 0u);
+ br.skipBits(PES_packet_length * 8);
+ }
+
+ return n;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+MPEG2PSExtractor::Track::Track(
+ MPEG2PSExtractor *extractor, unsigned stream_id, unsigned stream_type)
+ : mExtractor(extractor),
+ mStreamID(stream_id),
+ mStreamType(stream_type),
+ mQueue(NULL) {
+ bool supported = true;
+ ElementaryStreamQueue::Mode mode;
+
+ switch (mStreamType) {
+ case ATSParser::STREAMTYPE_H264:
+ mode = ElementaryStreamQueue::H264;
+ break;
+ case ATSParser::STREAMTYPE_MPEG2_AUDIO_ATDS:
+ mode = ElementaryStreamQueue::AAC;
+ break;
+ case ATSParser::STREAMTYPE_MPEG1_AUDIO:
+ case ATSParser::STREAMTYPE_MPEG2_AUDIO:
+ mode = ElementaryStreamQueue::MPEG_AUDIO;
+ break;
+
+ case ATSParser::STREAMTYPE_MPEG1_VIDEO:
+ case ATSParser::STREAMTYPE_MPEG2_VIDEO:
+ mode = ElementaryStreamQueue::MPEG_VIDEO;
+ break;
+
+ case ATSParser::STREAMTYPE_MPEG4_VIDEO:
+ mode = ElementaryStreamQueue::MPEG4_VIDEO;
+ break;
+
+ default:
+ supported = false;
+ break;
+ }
+
+ if (supported) {
+ mQueue = new ElementaryStreamQueue(mode);
+ } else {
+ LOGI("unsupported stream ID 0x%02x", stream_id);
+ }
+}
+
+MPEG2PSExtractor::Track::~Track() {
+ delete mQueue;
+ mQueue = NULL;
+}
+
+status_t MPEG2PSExtractor::Track::start(MetaData *params) {
+ if (mSource == NULL) {
+ return NO_INIT;
+ }
+
+ return mSource->start(params);
+}
+
+status_t MPEG2PSExtractor::Track::stop() {
+ if (mSource == NULL) {
+ return NO_INIT;
+ }
+
+ return mSource->stop();
+}
+
+sp<MetaData> MPEG2PSExtractor::Track::getFormat() {
+ if (mSource == NULL) {
+ return NULL;
+ }
+
+ return mSource->getFormat();
+}
+
+status_t MPEG2PSExtractor::Track::read(
+ MediaBuffer **buffer, const ReadOptions *options) {
+ if (mSource == NULL) {
+ return NO_INIT;
+ }
+
+ status_t finalResult;
+ while (!mSource->hasBufferAvailable(&finalResult)) {
+ if (finalResult != OK) {
+ return ERROR_END_OF_STREAM;
+ }
+
+ status_t err = mExtractor->feedMore();
+
+ if (err != OK) {
+ mSource->signalEOS(err);
+ }
+ }
+
+ return mSource->read(buffer, options);
+}
+
+status_t MPEG2PSExtractor::Track::appendPESData(
+ unsigned PTS_DTS_flags,
+ uint64_t PTS, uint64_t DTS,
+ const uint8_t *data, size_t size) {
+ if (mQueue == NULL) {
+ return OK;
+ }
+
+ int64_t timeUs;
+ if (PTS_DTS_flags == 2 || PTS_DTS_flags == 3) {
+ timeUs = (PTS * 100) / 9;
+ } else {
+ timeUs = 0;
+ }
+
+ status_t err = mQueue->appendData(data, size, timeUs);
+
+ if (err != OK) {
+ return err;
+ }
+
+ sp<ABuffer> accessUnit;
+ while ((accessUnit = mQueue->dequeueAccessUnit()) != NULL) {
+ if (mSource == NULL) {
+ sp<MetaData> meta = mQueue->getFormat();
+
+ if (meta != NULL) {
+ LOGV("Stream ID 0x%02x now has data.", mStreamID);
+
+ mSource = new AnotherPacketSource(meta);
+ mSource->queueAccessUnit(accessUnit);
+ }
+ } else if (mQueue->getFormat() != NULL) {
+ mSource->queueAccessUnit(accessUnit);
+ }
+ }
+
+ return OK;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+MPEG2PSExtractor::WrappedTrack::WrappedTrack(
+ const sp<MPEG2PSExtractor> &extractor, const sp<Track> &track)
+ : mExtractor(extractor),
+ mTrack(track) {
+}
+
+MPEG2PSExtractor::WrappedTrack::~WrappedTrack() {
+}
+
+status_t MPEG2PSExtractor::WrappedTrack::start(MetaData *params) {
+ return mTrack->start(params);
+}
+
+status_t MPEG2PSExtractor::WrappedTrack::stop() {
+ return mTrack->stop();
+}
+
+sp<MetaData> MPEG2PSExtractor::WrappedTrack::getFormat() {
+ return mTrack->getFormat();
+}
+
+status_t MPEG2PSExtractor::WrappedTrack::read(
+ MediaBuffer **buffer, const ReadOptions *options) {
+ return mTrack->read(buffer, options);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+bool SniffMPEG2PS(
+ const sp<DataSource> &source, String8 *mimeType, float *confidence,
+ sp<AMessage> *) {
+ uint8_t header[5];
+ if (source->readAt(0, header, sizeof(header)) < (ssize_t)sizeof(header)) {
+ return false;
+ }
+
+ if (memcmp("\x00\x00\x01\xba", header, 4) || (header[4] >> 6) != 1) {
+ return false;
+ }
+
+ *confidence = 0.25f; // Slightly larger than .mp3 extractor's confidence
+
+ mimeType->setTo(MEDIA_MIMETYPE_CONTAINER_MPEG2PS);
+
+ return true;
+}
+
+} // namespace android
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index a9b539b..dc6c011 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -947,7 +947,12 @@
if (mSendObjectFileSize - initialData > 0) {
mfr.offset = initialData;
- mfr.length = mSendObjectFileSize - initialData;
+ if (mSendObjectFileSize == 0xFFFFFFFF) {
+ // tell driver to read until it receives a short packet
+ mfr.length = 0xFFFFFFFF;
+ } else {
+ mfr.length = mSendObjectFileSize - initialData;
+ }
LOGV("receiving %s\n", (const char *)mSendObjectFilePath);
// transfer the file
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java
index 8737595..91100ae 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java
@@ -20,6 +20,7 @@
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.Suppress;
+import android.util.Log;
/**
* Unit test class to test the set of valid and invalid states that
@@ -27,6 +28,8 @@
*/
public class MediaRecorderStopStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
+ private static final String TAG = "MediaRecorderStopStateUnitTest";
+ private static final int SLEEP_TIME_BEFORE_STOP = 1000;
/**
* 1. It is valid to call stop() in the following states:
@@ -51,6 +54,15 @@
}
public void invokeMethodUnderTest(MediaRecorder recorder) {
+ // Wait for some time before stopping the media recorder.
+ // This will fix the assertion caused by stopping it immediatedly
+ // after it is started
+ try {
+ Thread.sleep(SLEEP_TIME_BEFORE_STOP);
+ } catch(Exception e) {
+ Log.v(TAG, "sleep was interrupted and terminated prematurely");
+ }
+
recorder.stop();
}
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 23f67d5..1f9ce68 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -1480,7 +1480,7 @@
}
}
- return setError(EGL_BAD_DISPLAY, 0);;
+ return setErrorQuiet(EGL_BAD_DISPLAY, 0);
}
EGLuint64NV eglGetSystemTimeNV()
@@ -1500,5 +1500,5 @@
}
}
- return setError(EGL_BAD_DISPLAY, 0);;
+ return setErrorQuiet(EGL_BAD_DISPLAY, 0);
}
diff --git a/opengl/libs/EGL/egl_tls.cpp b/opengl/libs/EGL/egl_tls.cpp
index f3c8d2c..b341ddb 100644
--- a/opengl/libs/EGL/egl_tls.cpp
+++ b/opengl/libs/EGL/egl_tls.cpp
@@ -67,19 +67,23 @@
}
}
-void egl_tls_t::setErrorEtcImpl(const char* caller, int line, EGLint error) {
+void egl_tls_t::setErrorEtcImpl(
+ const char* caller, int line, EGLint error, bool quiet) {
validateTLSKey();
egl_tls_t* tls = getTLS();
if (tls->error != error) {
- LOGE("%s:%d error %x (%s)", caller, line, error, egl_strerror(error));
- tls->error = error;
- char value[PROPERTY_VALUE_MAX];
- property_get("debug.egl.callstack", value, "0");
- if (atoi(value)) {
- CallStack stack;
- stack.update();
- stack.dump();
+ if (!quiet) {
+ LOGE("%s:%d error %x (%s)",
+ caller, line, error, egl_strerror(error));
+ char value[PROPERTY_VALUE_MAX];
+ property_get("debug.egl.callstack", value, "0");
+ if (atoi(value)) {
+ CallStack stack;
+ stack.update();
+ stack.dump();
+ }
}
+ tls->error = error;
}
}
diff --git a/opengl/libs/EGL/egl_tls.h b/opengl/libs/EGL/egl_tls.h
index a7989ef..78b0b2f 100644
--- a/opengl/libs/EGL/egl_tls.h
+++ b/opengl/libs/EGL/egl_tls.h
@@ -41,7 +41,8 @@
egl_tls_t();
static void validateTLSKey();
- static void setErrorEtcImpl(const char* caller, int line, EGLint error);
+ static void setErrorEtcImpl(
+ const char* caller, int line, EGLint error, bool quiet);
public:
static egl_tls_t* getTLS();
@@ -55,13 +56,17 @@
template<typename T>
static T setErrorEtc(const char* caller,
- int line, EGLint error, T returnValue) {
- setErrorEtcImpl(caller, line, error);
+ int line, EGLint error, T returnValue, bool quiet = false) {
+ setErrorEtcImpl(caller, line, error, quiet);
return returnValue;
}
};
-#define setError(_e, _r) egl_tls_t::setErrorEtc(__FUNCTION__, __LINE__, _e, _r)
+#define setError(_e, _r) \
+ egl_tls_t::setErrorEtc(__FUNCTION__, __LINE__, _e, _r)
+
+#define setErrorQuiet(_e, _r) \
+ egl_tls_t::setErrorEtc(__FUNCTION__, __LINE__, _e, _r, true)
// ----------------------------------------------------------------------------
diff --git a/packages/BackupRestoreConfirmation/res/values-am/strings.xml b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
index 43e4cce..41fa6a0 100644
--- a/packages/BackupRestoreConfirmation/res/values-am/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"ሙሉ ለሙሉ መጠባበቂያ"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"ሙሉ ለሙሉ እነበረበት መልስ"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"ሁሉንም ውሂብ በሙሉ መጠበቂያ ከተያያዘ የዴስክቶፕ ኮምፒዩተር ተጠይቋል። ይህ እንዲከሰት ለመፍቀድ ይፈልጋሉ? "\n\n"እርስዎ ራስዎ የመጠባበቂያውን ጥየቃ ካልጠየቁ ክወናው እንዲካሄድ አይፍቀዱ።"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"ውሂቤን መጠባበቂያ"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"መጠባበቂያ አታድርግ"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"እባክዎ የሙሉ ውሂብ መጠበቂያ ማመስጠር ለመጠቅም የይለፍ ቃል ያስገቡ። ይህም ባዶ ከሆነ፣ የእርስዎ የአሁኑ የመጠበቂያ ይለፍ ቃል ይወሰዳል፡"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"ሙሉ የውሂብ መጠበቂያ ለማመስጠር ከፈለጉ ከታች የይለፍ ቃል ያስገቡ፡"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"ውሂብ እነበረበት መልስ የተመሳጠረ ከሆነ፣ እባክዎ ከታች የይለፍ ቃል ያስገቡ"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"መጠባበቂያ በመጀመር ላይ..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"መጠባበቂያ ጨርሷል"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"እነበረበት መልስ በመጀመር ላይ..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"እነበረበት መመለስ ጨርሷል"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"ክንውን ጊዜው አልቋል"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
index f946d49..ceabaaf 100644
--- a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"نسخ احتياطي بالكامل"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"استعادة كاملة"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"تم طلب الاحتفاظ بنسخة احتياطية كاملة من البيانات على كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟"\n\n"إذا لم تطلب الاحتفاظ بنسخة احتياطية بنفسك، فلا تسمح بمتابعة العملية."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"الاحتفاظ بنسخة احتياطية من بياناتي"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"عدم النسخ الاحتياطي"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"الرجاء إدخال كلمة المرور للاستخدام لتشفير بيانات النسخة الاحتياطية بالكامل. إذا تم ترك هذا فارغًا، فسيتم استخدام كلمة مرور النسخ الاحتياطي الحالية:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"إذا كنت ترغب في تشفير بيانات النسخة الاحتياطية بالكامل، فأدخل كلمة المرور أدناه:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"إذا كانت بيانات الاسترداد مشفرة، فالرجاء إدخال كلمة المرور أدناه:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"جارٍ بدء النسخ الاحتياطي..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"انتهت عملية النسخ الاحتياطي"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"جارٍ بدء الاستعادة..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"انتهت عملية الاستعادة"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"انتهت مهلة العملية"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
index 6c6a90f..f90b666 100644
--- a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Пълно резервно копие"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Пълно възстановяване"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Бе поискано пълно резервно копие на всичките данни до свързан настолен компютър. Искате ли да разрешите това?"\n\n"Ако не сте заявили създаването на копие, не позволявайте операцията да продължи."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Резервно копие на данните ми"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Без резервно копие"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Моля, въведете парола, която да използвате за шифроване на пълното резервно копие на данните. Ако не е попълнена, ще бъде използвана текущата ви парола за резервно копие:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако искате да шифровате пълното резервно копие на данните, въведете парола по-долу:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ако възстановените данни са шифровани, моля, въведете паролата по-долу:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Създаването на резервно копие се стартира..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Създаването на резервно копие завърши"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Възстановяването се стартира..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Възстановяването завърши"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Времето за изчакване на операцията изтече"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
index 0d8fa2b..89085f3 100644
--- a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Úplná záloha"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Úplné obnovení"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Obdrželi jsme požadavek na úplnou zálohu všech dat do připojeného počítače. Chcete tuto akci povolit? "\n\n"Pokud jste o zálohu nežádali, operaci nepovolujte."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovat data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovat"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Zadejte prosím heslo pro šifrování dat úplné zálohy. Pokud pole ponecháte prázdné, použije se aktuální heslo pro zálohy:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Chcete-li data úplné zálohy zašifrovat, zadejte heslo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Pokud jsou obnovená data šifrována, zadejte prosím heslo níže:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Spouští se zálohování..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Zálohování bylo dokončeno"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Spouští se obnovení..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Obnovení skončilo"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Časový limit operace vypršel"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-da/strings.xml b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
index 63bc7eb..5cbaab4 100644
--- a/packages/BackupRestoreConfirmation/res/values-da/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Fuld sikkerhedskopiering"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Fuld genoprettelse"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Der er anmodet om en fuld sikkerhedskopiering af alle data til en tilsluttet stationær computer. Vil du tillade dette?"\n\n"Hvis du ikke har anmodet om sikkerhedskopiering, skal du ikke tillade denne handling."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhedskopier mine data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Undlad at sikkerhedskopiere"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Angiv en adgangskode, som skal bruges til kryptering af alle dine sikkerhedsdata. Hvis dette felt er tomt, bruges din aktuelle adgangskode til sikkerhedskopiering:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du ønsker at kryptere sikkerhedsdataene, skal du indtaste en adgangskode nedenfor:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis gendannelsesdataene er krypteret, skal du angive adgangskoden nedenfor:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Sikkerhedskopiering begynder..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Sikkerhedskopiering er færdig"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Gendannelse begynder..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Gendannelse afsluttet"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Handling fik timeout"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-de/strings.xml b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
index cba2b26..e4bdb6b 100644
--- a/packages/BackupRestoreConfirmation/res/values-de/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Vollständige Sicherung"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Vollständige Wiederherstellung"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Es wurde eine vollständige Sicherung sämtlicher Daten auf einen verbundenen Desktop-Computer angefordert. Möchten Sie dies zulassen?"\n\n"Wenn Sie die Sicherung nicht selbst angefordert haben, sollten Sie dem Vorgang nicht zustimmen."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Meine Daten sichern"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nicht sichern"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Geben Sie ein Passwort für die Verschlüsselung der vollständigen Sicherungsdaten ein. Wenn Sie dieses Feld leer lassen, wird Ihr aktuelles Sicherungspasswort verwendet:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Wenn Sie die gesamten Sicherungsdaten verschlüsseln möchten, geben Sie unten ein Passwort ein:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Geben Sie das Passwort unten ein, wenn die Daten für die Wiederherstellung verschlüsselt sind:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Sicherung wird gestartet..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Sicherung abgeschlossen"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Wiederherstellung wird gestartet..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Wiederherstellung beendet"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Zeitüberschreitung bei Vorgang"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-el/strings.xml b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
index 7ea104e..8571860 100644
--- a/packages/BackupRestoreConfirmation/res/values-el/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Πλήρης δημιουργία αντιγράφων ασφαλείας"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Πλήρης επαναφορά"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Έχει ζητηθεί ένα πλήρες αντίγραφο ασφαλείας όλων των δεδομένων σε έναν συνδεδεμένο επιτραπέζιο υπολογιστή. Θέλετε να επιτραπεί αυτή η ενέργεια;"\n\n"Αν δεν έχετε ζητήσει οι ίδιοι αυτό το αντίγραφο ασφαλείας, μην επιτρέψετε την ενέργεια."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Δημιουργία αντιγράφων ασφαλείας για τα δεδομένα μου"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Να μην δημιουργείται αντίγραφο ασφαλείας"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Εισαγάγετε έναν κωδικό πρόσβασης για χρήση για την κωδικοποίηση του πλήρους αντιγράφου ασφαλείας δεδομένων. Αν μείνει κενό, θα χρησιμοποιηθεί ο τρέχων κωδικός σας πρόσβασης:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Αν θέλετε να κρυπτογραφήσετε τα πλήρη δεδομένα αντιγράφων ασφαλείας, πληκτρολογήστε έναν κωδικό πρόσβασης παρακάτω:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Εάν η επαναφορά των δεδομένων είναι κρυπτογραφημένη, εισάγετε τον κωδικό πρόσβασης παρακάτω:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Έναρξη διαδικασίας δημιουργίας αντιγράφου ασφαλείας..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Ολοκληρώθηκε η διαδικασία δημιουργίας αντιγράφου ασφαλείας"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Έναρξη επαναφοράς..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Η επαναφορά έληξε"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Λήξη χρονικού ορίου λειτουργίας"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
index 2f1eb52..57e3f0c 100644
--- a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Realización de la copia de seguridad completa"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restauración completa"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en una computadora de escritorio conectada. ¿Deseas permitirla?"\n\n"Si tú no has solicitado la copia de seguridad, no permitas que se realice la operación."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Copia de seguridad de mis datos"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No realizar una copia de seguridad"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce una contraseña para encriptar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se utilizará tu contraseña actual de copia de seguridad:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si deseas encriptar los datos de la copia de seguridad completa, introduce una contraseña a continuación:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de recuperación están encriptados, vuelve a introducir la contraseña a continuación:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Iniciando copia de seguridad..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"La realización de la copia de seguridad finalizó."</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Iniciando restauración..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"La restauración finalizó."</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Se agotó el tiempo de espera para la operación."</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es/strings.xml b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
index 359c54c..8ae4762 100644
--- a/packages/BackupRestoreConfirmation/res/values-es/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Copia de seguridad completa"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restauración completa"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en un ordenador conectado. ¿Quieres permitir la copia de seguridad?"\n\n"No debes permitir la copia de seguridad si no has realizado tú la solicitud."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Copia de seguridad de datos"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No hacer copia de seguridad"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce la contraseña que quieras usar para cifrar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se usará tu contraseña de copia de seguridad actual:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si quieres cifrar los datos de la copia de seguridad completa, introduce la contraseña a continuación:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de restauración están cifrados, introduce la contraseña a continuación:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Iniciando copia de seguridad..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Copia de seguridad finalizada"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Iniciando restauración..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Restauración finalizada"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Tiempo de espera de operación agotado"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
index 4fce490..c4f8da4 100644
--- a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"پشتیبانگیری کامل"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"بازیابی کامل"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"درخواست پشتیبان گیری کامل از تمام دادهها به یک رایانه دسکتاپ متصل داده شده است. آیا میخواهید این عمل انجام شود؟"\n\n"اگر شما درخواست تهیه نسخه پشتیبان را ندادهاید، اجازه ادامه عملیات را ندهید."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"از دادههای من نسخه پشتیبان تهیه شود"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"نسخه پشتیبان تهیه نشود"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"لطفاً یک گذرواژه برای رمزگذاری دادههای کامل نسخه پشتیبانی وارد کنید. اگر این خالی بماند، گذرواژه فعلی نسخه پشتیبان مورد استفاده قرار خواهد گرفت:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"اگر میخواهید تمام نسخه پشتیبانی داده را رمزدار کنید، یک گذرواژه در زیر وارد کنید:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"اگر داده بازیابی شده رمزگذاری شده است، لطفاً گذرواژه را در زیر وارد کنید:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"شروع پشتیبانگیری..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"پشتیبانگیری پایان یافت"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"شروع بازیابی..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"بازیابی پایان یافت"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"مهلت عملیات تمام شد"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
index 7badc7c..f50ce6a 100644
--- a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Täysi varmuuskopiointi"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Täysi palautus"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Kytketyn tietokoneen kaikista tiedoista on pyydetty täydellistä varmuuskopiota. Haluatko sallia tämän?"\n\n"Jos et ole itse pyytänyt varmuuskopiota, älä salli toimintoa."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Varmuuskopioi omat tiedot"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Älä varmuuskopioi"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Anna salasana kaikkien varmuuskopiotietojen salaamiseksi. Jos tämä jätetään tyhjäksi, nykyistä varmuuskopioinnin salasanaa käytetään:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jos haluat salata kaikki varmuuskopiotiedot, kirjoita salasana alle:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jos palautustiedot on salattu, anna salasana alla:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Varmuuskopiointi alkaa..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Varmuuskopiointi valmis"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Palautus alkaa..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Palautus päättyi"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Toiminnon aikakatkaisu"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
index caa52a3..0f0a9df 100644
--- a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Sauvegarde complète"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restauration complète"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Vous avez demandé une sauvegarde complète de l\'ensemble des données vers un ordinateur de bureau connecté. Voulez-vous l\'autoriser ?"\n\n"Si vous n\'avez pas demandé la sauvegarde vous-même, n\'autorisez pas la poursuite de l\'opération."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sauvegarder mes données"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ne pas sauvegarder"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Veuillez saisir un mot de passe à utiliser pour chiffrer les données de sauvegarde complète. Si ce champ n\'est pas renseigné, votre mot de passe de sauvegarde actuel sera utilisé :"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vous souhaitez chiffrer l\'ensemble des données de sauvegarde, veuillez saisir un mot de passe ci-dessous :"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si les données de restauration sont chiffrées, veuillez saisir le mot de passe ci-dessous :"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Démarrage de la sauvegarde…"</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Sauvegarde terminée."</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Démarrage de la restauration…"</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Restauration terminée."</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"L\'opération a expiré."</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
index 26992d6..ce06db9f 100644
--- a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Puna sigurnosna kopija"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Potpuno vraćanje"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Zatražena je potpuna sigurnosna kopija svih podataka na povezano stolno računalo. Želite li to dozvoliti?"\n\n"Ako niste vi zatražili sigurnosnu kopiju, ne dozvolite nastavak te radnje."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Izradi sigurnosnu kopiju mojih podataka"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ne radi sigurnosnu kopiju"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Unesite zaporku koju ćete upotrebljavati za kriptiranje podataka potpune sigurnosne kopije. Ako je ostavite praznom, bit će upotrijebljena vaša trenutačna zaporka za sigurnosno kopiranje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ako želite kriptirati podatke potpune sigurnosne kopije, u nastavku unesite zaporku:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ako su podaci za vraćanje kriptirani, unesite zaporku u nastavku:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Započinje stvaranje sigurnosne kopije..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Sigurnosna kopija dovršena"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Započinje vraćanje..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Vraćanje završeno"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Isteklo je vrijeme operacije"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
index 5d69079..b244f26 100644
--- a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Teljes biztonsági mentés"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Teljes helyreállítás"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Kérés érkezett az összes adat biztonsági mentésére egy csatlakoztatott asztali számítógépre. Engedélyezi, hogy ez megtörténjen?"\n\n"Ha nem Ön kérte a mentést, ne engedélyezze a művelet folytatását."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Adatok biztonsági mentése"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ne mentsen"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Kérjük, írjon be egy jelszót a teljes biztonsági mentés adatainak titkosításához. Ha üresen hagyja, jelenlegi biztonsági jelszavát fogjuk használni:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ha minden mentett adatot szeretne titkosítani, adjon meg egy jelszót alább:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ha a visszaállítási adatok titkosítva vannak, kérjük, adja meg a jelszót alább:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Biztonsági mentés indítása..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"A biztonsági mentés befejeződött"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Helyreállítás indítása..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"A helyreállítás véget ért"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"A művelet túllépte az időkeretet"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-in/strings.xml b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
index adf6636..5a26304 100644
--- a/packages/BackupRestoreConfirmation/res/values-in/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Pencadangan sepenuhnya"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Pemulihan sepenuhnya"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Cadangan lengkap semua data ke komputer yang tersambung telah diminta. Apakah Anda ingin mengizinkan hal ini dilakukan?"\n\n"Jika Anda tidak meminta pencadangan ini, jangan izinkan operasi dilanjutkan."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Cadangkan data saya"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Jangan mencadangkan"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Masukkan sandi yang digunakan untuk mengenkripsi data cadangan lengkap. Jika bidang ini dikosongkan, sandi cadangan Anda saat ini akan digunakan:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika Anda ingin mengenkripsi data cadangan lengkap, masukkan sandi di bawah:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jika data pemulihan dienkripsi, masukkan sandi di bawah:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Pencadangan dimulai..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Pencadangan selesai"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Pemulihan dimulai..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Pemulihan berakhir"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Waktu tunggu operasi habis"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-it/strings.xml b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
index 1722222..bf624777 100644
--- a/packages/BackupRestoreConfirmation/res/values-it/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="backup_confirm_title" msgid="827563724209303345">"Backup totale"</string>
+ <string name="backup_confirm_title" msgid="827563724209303345">"Backup completo"</string>
<string name="restore_confirm_title" msgid="5469365809567486602">"Ripristino totale"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"È stato richiesto un backup completo di tutti i dati su un computer desktop connesso. Consentire l\'operazione?"\n\n"Se non hai richiesto il backup, non consentire all\'operazione di procedere."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Effettua backup dei miei dati"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
index fe1aa27..056b245 100644
--- a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"גיבוי מלא"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"שחזור מלא"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"הוגשה בקשה לגיבוי מלא של כל הנתונים במחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? "\n\n"אם לא ביקשת את הגיבוי בעצמך, אל תאפשר לפעולה להמשיך."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"גבה את הנתונים שלי"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"אל תגבה"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"הזן סיסמה שתשמש להצפנה של נתוני הגיבוי המלא. אם תשאיר שדה זה ריק, ייעשה שימוש בסיסמת הגיבוי הנוכחית שלך:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"אם אתה רוצה להצפין את נתוני הגיבוי המלא, הזן סיסמה בהמשך:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"אם נתוני השחזור מוצפנים, הזן את הסיסמה למטה:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"מתחיל בגיבוי..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"הגיבוי הסתיים"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"מתחיל בשחזור..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"השחזור הסתיים"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"פרק הזמן שהוקצב לפעולה הסתיים"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
index 646e69d..9b575c9 100644
--- a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"フルバックアップ"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"完全な復元"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"接続しているデスクトップパソコンに対してすべてのデータのフルバックアップを行うようリクエストされています。許可しますか?"\n\n"ご自分でバックアップをリクエストしていない場合は、この操作の続行を許可しないでください。"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"データをバックアップ"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"バックアップしない"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"フルバックアップデータの暗号化に使用するパスワードを入力してください。空白のままにした場合、現在のバックアップ用のパスワードが使用されます:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"フルバックアップのデータを暗号化する場合は、以下にパスワードを入力してください:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"復元するデータが暗号化されている場合、以下にパスワードを入力してください:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"バックアップを開始しています..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"バックアップが終了しました"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"復元を開始しています..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"復元が終了しました"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"操作がタイムアウトしました"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
index 12e044e..0fca3cd 100644
--- a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"전체 백업"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"전체 복원"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"연결된 데스크톱 컴퓨터에 대한 전체 데이터 백업을 요청했습니다. 백업을 실행하시겠습니까?"\n\n"직접 백업을 요청한 것이 아니라면 작업을 진행하지 마시기 바랍니다."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"데이터 백업"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"백업하지 않음"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"전체 백업 데이터를 암호화하려면 사용할 비밀번호를 입력하세요. 공백으로 남겨 두면 현재 백업 비밀번호가 사용됩니다."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"전체 백업 데이터를 암호화하려면 아래에 비밀번호를 입력하세요."</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"복원 데이터가 암호화되어 있는 경우, 아래에 비밀번호를 입력하세요."</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"백업 시작 중..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"백업을 완료했습니다."</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"복원 시작 중..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"복원이 종료되었습니다."</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"작업 시간이 초과되었습니다."</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
index fdd91f1..bd49320 100644
--- a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Visos atsarginės kopijos kūrimas"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Visas atkūrimas"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Prijungtame staliniame kompiuteryje pageidauta sukurti visų duomenų atsarginę kopiją. Ar norite, kad tai būtų atlikta?"\n\n"Jei patys atsarginės kopijos kurti neprašėte, neleiskite pradėti operacijos."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Kurti atsarginę duomenų kopiją"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nekurti atsarginės kopijos"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Įveskite slaptažodį, kuris bus naudojamas visai atsarginei duomenų kopijai šifruoti. Jei reikšmės neįvesite, bus naudojamas dabartinis atsarginės kopijos slaptažodis:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jei norite užšifruoti visą atsarginę duomenų kopiją, įveskite slaptažodį:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jei atkūrimo duomenys užšifruoti, įveskite toliau nurodytą slaptažodį:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Pradedama kurti atsarginę kopiją..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Atsarginė kopija sukurta"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Pradedamas atkūrimas..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Atkurta"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Operacijos skirtasis laikas baigėsi"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
index b53e501..a6f3d67 100644
--- a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Pilna dublēšana"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Pilna atjaunošana"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Ir pieprasīta visu datu pilnīga dublēšana savienotā galda datorā. Vai vēlaties to atļaut?"\n\n"Ja neesat pieprasījis dublēšanu, neatļaujiet turpināt šo darbību."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Dublēt manus datus"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Neveidot dublējumu"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Lūdzu, ievadiet paroli, kas tiks izmantota dublējuma datu pilnīgai šifrēšanai. Ja paroles lauciņu atstāsiet tukšu, tiks izmantota jūsu pašreizējā dublējuma parole:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ja vēlaties pilnībā šifrēt dublējuma datus, tālāk ievadiet paroli:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ja atjaunošanas dati ir šifrēti, lūdzu, ievadiet tālāk paroli:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Tiek sākta dublēšana..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Dublēšana ir pabeigta."</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Tiek sākta atjaunošana..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Atjaunošana tika beigta."</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Iestājās darbības noildze."</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
index 04643f7..f0b6b62 100644
--- a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Sandaran penuh"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Pemulihan penuh"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Sandaran lengkap bagi semua data ke komputer meja yang bersambung telah diminta. Adakah anda mahu membenarkan ini berlaku?"\n\n"Jika anda tidak meminta sandaran ini sendiri, jangan benarkan operasi diteruskan."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sandarkan data saya"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Jangan buat sandaran"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Sila masukkan kata laluan yang hendak digunakan untuk menyulitkan data sandaran lengkap. Jika dibiarkan kosong, kata laluan sandaran semasa anda akan digunakan:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika anda ingin menyulitkan data sandaran lengkap, masukkan kata laluan di bawah:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jika pemulihan data disulitkan, sila masukkan kata laluan di bawah:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Sandaran bermula..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Sandaran selesai"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Pemulihan bermula..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Pemulihan berakhir"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Operasi tamat masa"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
index d0435df..a54138d 100644
--- a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Fullstendig sikkerhetskopi"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Fullstendig gjenoppretting"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"En full sikkerhetskopi av alle dataene til en tilkoblet stasjonær datamaskin er forespurt. Vil du tillate dette?"\n\n"Hvis du ikke har bedt om sikkerhetskopieringen selv, må du ikke tillate at operasjonen fortsetter."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhetskopier dataene mine"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ikke sikkerhetskopiér"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Skriv inn et passord for kryptering av full sikkerhetskopi. Hvis feltet er tomt, brukes det gjeldende passordet ditt for sikkerhetskopiering:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du vil kryptere alle de sikkerhetskopierte dataene, skriver du inn et passord nedenfor:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis de gjenopprettede dataene er krypterte, må du skrive inn passordet nedenfor:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Sikkerhetskopiering er i gang …"</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Sikkerhetskopieringen er fullført"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Gjenopprettingen er i gang …"</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Gjenopprettingen er fullført"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Handlingen ble tidsavbrutt"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
index f32ba27..24e6c3b 100644
--- a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Volledige back-up"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Volledig herstel"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Er is een volledige back-up van alle gegevens naar een verbonden desktopcomputer aangevraagd. Wilt u dit toestaan?"\n\n"Als u de back-up zelf niet heeft aangevraagd, moet u niet toestaan dat de bewerking wordt uitgevoerd."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Back-up maken van mijn gegevens"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Geen back-up maken"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Geef een wachtwoord op dat u wilt gebruiken voor het coderen van de gegevens van de volledige back-up. Als u dit leeg laat, wordt uw huidige back-upwachtwoord gebruikt:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Als u de gegevens van de volledige back-up wilt coderen, geeft u daarvoor hieronder een wachtwoord op:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Als deze herstelgegevens zijn gecodeerd, geeft u hieronder het wachtwoord op:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Back-up starten..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Back-up voltooid"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Herstel starten..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Herstellen voltooid"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Time-out voor bewerking"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
index 87961a9..04552d6 100644
--- a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Pełna kopia zapasowa"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Pełne przywracanie"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Zażądano wykonania pełnej kopii zapasowej wszystkich danych na podłączonym komputerze stacjonarnym. Czy chcesz na to zezwolić?"\n\n"Jeśli żądanie utworzenia kopii zapasowej nie pochodzi od Ciebie, nie zezwalaj na kontynuowanie tej operacji."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Utwórz kopię zapasową danych"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nie twórz kopii zapasowej"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Wpisz hasło do zaszyfrowania pełnej kopii zapasowej. Jeśli pozostawisz puste pole, zostanie użyte aktualne hasło kopii zapasowej:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jeśli chcesz zaszyfrować pełną kopię zapasową, wprowadź poniżej hasło:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jeśli przywracane dane są zaszyfrowane, wpisz poniżej hasło:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Tworzenie kopii zapasowej..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Utworzono kopię zapasową"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Przywracanie..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Przywracanie zakończone"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Operacja przekroczyła czas oczekiwania"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
index 309b8ce..3eca061 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Cópia de segurança completa"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restauro completo"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitada uma cópia de segurança completa de todos os dados para um computador de secretária. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado a cópia de segurança, não permita que a operação prossiga."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer cópia de seg. dos dados"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Não efetuar cópia de seg."</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduza uma palavra-passe a utilizar para encriptar os dados da cópia de segurança completa. Se deixar o campo em branco, será utilizada a palavra-passe de cópia de segurança atual."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se pretender encriptar os dados da cópia de segurança completa, introduza uma palavra-passe abaixo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados a restaurar estiverem encriptados, introduza a palavra-passe abaixo:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"A iniciar cópia de segurança..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Cópia de segurança concluída"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"A iniciar restauro..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Restauro concluído"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Tempo limite da operação excedido"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
index 6be6fca..680b538 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Backup completo"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restauração completa"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Deseja permitir que isso aconteça?"\n\n"Caso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer backup de meus dados"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Não fazer backup"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Digite uma senha para usar para criptografar os dados de backup por completo. Se isso for deixado em branco, sua senha atual de backup será usada:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se você deseja criptografar os dados de backup por completo, digite uma senha abaixo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados restaurados forem criptografada, digite a senha abaixo:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Iniciando backup..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"O backup foi concluído"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Iniciando restauração..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"A restauração foi concluída"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"A operação atingiu o tempo limite"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
index 871fec5..b36680f 100644
--- a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Copiere de rezervă completă"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restabilire completă"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"S-a solicitat crearea unei copii de rezervă complete a tuturor datelor pe un computer desktop conectat. Doriţi să permiteţi acest lucru?"\n\n"Dacă nu aţi solicitat dvs. copierea de rezervă, nu permiteţi ca operaţiunea să continue."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Creaţi copii de rezervă pentru datele dvs."</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nu creaţi copii de rezervă"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduceţi o parolă pentru a o utiliza la criptarea datelor copiei de rezervă complete. Dacă acest câmp rămâne necompletat, pentru copierea de rezervă se va utiliza parola dvs. actuală."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Dacă doriţi să criptaţi datele copiei de rezervă complete, introduceţi o parolă mai jos:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Dacă datele pentru restabilire sunt criptate, introduceţi parola mai jos:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Se începe copierea de rezervă..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Copierea de rezervă a fost finalizată"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Se porneşte restabilirea..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Restabilirea s-a încheiat"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Operaţia a expirat"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
index c064e46..91c5755 100644
--- a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Полное резервное копирование"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Полное восстановление"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Запрошено резервное копирование всех данных на подключенном компьютере. Разрешить?"\n\n"Если вы не запрашивали этого, не разрешайте выполнение операции."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Создать резервную копию данных"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Не создавать резервную копию"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Введите пароль для шифрования всех резервных данных. Если поле останется пустым, будет использован текущий пароль:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Чтобы зашифровать все резервные данные, введите пароль:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Если восстановленные данные зашифрованы, введите пароль:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Резервное копирование..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Резервное копирование завершено"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Восстановление..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Восстановление завершено"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Время ожидания истекло"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
index 0314c91..bc8ff97 100644
--- a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Úplná záloha"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Úplné obnovenie"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Bola vyžiadaná úplná záloha všetkých dát do pripojeného počítača. Chcete túto akciu povoliť?"\n\n"Ak ste zálohu nevyžiadali vy, túto operáciu nepovoľujte."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovať údaje"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovať"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Zadajte heslo, ktoré sa použije pri šifrovaní údajov úplnej zálohy. Ak pole ponecháte prázdne, použije sa vaše aktuálne heslo zálohy:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ak chcete šifrovať údaje úplnej zálohy, zadajte heslo nižšie:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ak sú údaje obnovenia šifrované, zadajte heslo nižšie:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Vytváranie zálohy..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Zálohovanie bolo dokončené"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Začína obnovenie..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Obnovenie bolo ukončené"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Časový limit operácie vypršal"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
index 7615042..d634810 100644
--- a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Polna varnostna kopija"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Popolna obnova"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Zahtevano je popolno varnostno kopiranje vseh podatkov v povezanem računalniku. Ali želite to dovoliti?"\n\n"Če varnostnega kopiranja niste zahtevali, ne dovolite nadaljevanja postopka."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Varnostno kopiraj moje podatke"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Brez varnostnega kopiranja"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Vnesite geslo za šifriranje podatkov popolnega varnostnega kopiranja. Če to pustite prazno, bo uporabljeno trenutno geslo za varnostno kopiranje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Če želite šifrirati vse varnostno kopirane podatke, spodaj vnesite geslo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Če so podatki za obnovitev šifrirani, spodaj vnesite geslo:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Varnostno kopiranje se začenja ..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Varnostno kopiranje končano"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Obnova se začenja ..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Obnovitev je končana"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Časovna omejitev postopka je potekla"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
index 094eb12..5b3b250 100644
--- a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Прављење резервне копије свих података"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Потпуно враћање"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Захтевана је потпуна резервна копија свих података на повезани стони рачунар. Да ли желите да дозволите то?"\n\n"Ако нисте лично захтевали резервну копију, не дозвољавајте наставак радње."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Направи резервну копију мојих података"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Не прави резервне копије"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Унесите лозинку коју ћете користити за шифровање података потпуне резервне копије. Ако то поље оставите празно, користиће се тренутна лозинка резервне копије:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако желите да шифрујете податке потпуне резервне копије, унесите лозинку у наставку."</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ако су подаци за враћање шифровани, унесите лозинку у наставку:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Покретање прављења резервне копије..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Прављење резервне копије је завршено"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Покретање враћања..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Враћање је завршено"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Време за радњу је истекло"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
index 8df6544..4ac0a54 100644
--- a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Fullständig säkerhetskopiering"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Fullständig återställning"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"En fullständig säkerhetskopia av alla data till en ansluten dator har begärts. Vill du tillåta detta?"\n\n"Om du inte själv begärde säkerhetskopian ska du inte tillåta detta."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Säkerhetskopiera mina data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Säkerhetskopiera inte"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Ange ett lösenord för kryptering av alla säkerhetskopierade data. Om det här lämnas tomt kommer ditt nuvarande lösenord för säkerhetskopior att användas:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Om du vill kryptera alla säkerhetskopierade data anger du ett lösenord nedan:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Om återställda data är krypterade anger du lösenordet nedan:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Säkerhetskopieringen har startat ..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Säkerhetskopieringen har slutförts"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Återställningen har startat ..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Återställningen har avslutats"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Tidsgränsen för åtgärden har överskridits"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
index 810ad4e..2069d83 100644
--- a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Kuhifadhi kikamilifu"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Kurejeza kamili"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Chelezo kamili la data iliyounganishwa kwenye eneo kazi la kompyuta limeombwa. Unataka kuruhusu hii kutendeka?"\n\n" Ikiwa hukuomba chelezo mwenyewe, usikubali uendeshaji kuendelea."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Cheleza data yangu"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Usicheleze"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Tafadhali ingiza nenosiri la kutumia kwa usimbaji fiche wa chelezo ya data kamili. Ikiwa hii itawachwa wazi, nenosiri lako la sasa litatumika:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ikiwa unataka kusimba fiche data nzima ya kucheleza, ingiza nenosiri la hapo chini:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ikiwa data iliyorejeshwa upya, tafadhali ingiza nenosiri lililo hapo chini:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Inaanza kuhifadhi..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Imemaliza kuhifadhi"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Inaanza kurejeza..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Kurejeza kumekamilika"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Muda wa uendeshaji umeisha"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-th/strings.xml b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
index 3bc2ce6..dc76577 100644
--- a/packages/BackupRestoreConfirmation/res/values-th/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"การสำรองข้อมูลทั้งหมด"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"การคืนค่าทั้งหมด"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"เราได้รับการขอให้ทำการสำรองข้อมูลทั้งหมดลงในคอมพิวเตอร์เดสก์ท็อปที่เชื่อมต่ออยู่ คุณต้องการอนุญาตให้ดำเนินการตามนี้หรือไม่"\n\n" หากคุณไม่ได้เป็นผู้ขอให้ทำการสำรองข้อมูลดังกล่าว โปรดอย่าอนุญาตให้ดำเนินการ"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"สำรองข้อมูลของฉัน"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"ไม่ต้องสำรองข้อมูล"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"โปรดป้อนรหัสผ่านเพื่อใช้สำหรับเข้ารหัสข้อมูลที่สำรองแบบเต็มรูปแบบ หากเว้นว่างไว้ รหัสผ่านการสำรองข้อมูลปัจจุบันของคุณจะถูกใช้:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"หากคุณต้องการเข้ารหัสข้อมูลที่สำรองเต็มรูปแบบ โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"หากมีการเข้ารหัสข้อมูลที่คืนค่า โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"กำลังเริ่มการสำรองข้อมูล..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"สำรองข้อมูลเสร็จแล้ว"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"กำลังเริ่มการคืนค่า..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"สิ้นสุดการคืนค่าแล้ว"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"หมดเวลาการดำเนินการ"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
index f54105d..99f2e48 100644
--- a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Ganap na pag-backup"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Ganap na pagpapanumbalik"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Hiniling ang isang buong pag-backup ng lahat ng data sa isang nakakonektang desktop computer. Gusto mo ba itong payagang maganap? "\n\n"Kung hindi ikaw mismo ang humiling ng pag-backup, huwag payagang magpatuloy ang pagpapatakbo."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"I-back up ang aking data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Huwag i-back up"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Mangyaring maglagay ng password na gamitin sa pag-e-encrypt ng buong data sa pag-backup. Kung iiwanan itong blangko, gagamitin ang iyong kasalukuyang backup na password:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Kung nais mong i-encrypt ang buong data ng backup, maglagay ng password sa ibaba:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Kung naka-encrypt ang data sa pagpapanumbalik, pakilagay ang password sa ibaba:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Sinisimulan ang pag-backup..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Tapos na ang pag-backup"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Sinisimulan ang pagpapanumbalik..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Natapos na ang pagpapanumbalik"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Nag-time out ang pagpapatakbo"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
index 0f610dd..2bbdd33 100644
--- a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Tam yedekleme"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Tam geri yükleme"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Tüm verilerin bağlı bir masaüstü bilgisayara tam olarak yedeklenmesi için istekte bulunuldu?"\n\n"Yedekleme isteğinde siz bulunmadıysanız, işlemin devam etmesine izin vermeyin."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Verilerimi yedekle"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Yedekleme"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Tam yedekleme verilerini şifrelemek için lütfen bir şifre girin. Boş bırakılırsa, mevcut yedekleme şifreniz kullanılır:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Yedeklenen tüm verileri şifrelemek isterseniz, aşağıya bir şifre girin:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Geri yükleme verileri şifreliyse, lütfen şifreyi aşağıya girin:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Yedekleme başlıyor..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Yedekleme işlemi sona erdi"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Geri yükleme başlıyor..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Geri yükleme işlemi sona erdi"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"İşlem zaman aşımına uğradı"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
index 3c9fb97..9b2df90 100644
--- a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Повне резервне копіювання"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Повне відновлення"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Надійшов запит на повне резервне копіювання всіх даних на під’єднаний настільний комп’ютер. Дозволити це?"\n\n"Якщо ви не надсилали запит на резервне копіювання, не дозволяйте виконувати цю операцію."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Резервне копіювання даних"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Не створювати резервну копію"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Введіть пароль, який використовується для шифрування повного резервного копіювання даних. Якщо залишити це поле порожнім, буде використано поточний пароль резервного копіювання."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Якщо ви хочете зашифрувати повне резервне копіювання даних, введіть пароль нижче:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Якщо дані для відновлення зашифровано, введіть пароль нижче:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Початок резервного копіювання..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Резервне копіювання закінчено"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Початок відновлення..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Відновлення закінчено"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Час очікування для операції минув"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
index 1a92acb..ad98262 100644
--- a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Sao lưu hoàn toàn"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Khôi phục hoàn toàn"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Đã yêu cầu sao lưu đầy đủ toàn bộ dữ liệu tới máy tính được kết nối. Bạn có muốn cho phép điều này xảy ra không?"\n\n"Nếu không phải bản thân bạn yêu cầu sao lưu, đừng cho phép thao tác này tiếp tục."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sao lưu dữ liệu của tôi"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Không sao lưu"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Vui lòng nhập mật khẩu dùng để mã hóa toàn bộ dữ liệu sao lưu. Nếu trường này bị bỏ trống, mật khẩu sao lưu hiện tại của bạn sẽ được sử dụng:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Nếu bạn muốn mã hóa toàn bộ dữ liệu sao lưu, hãy nhập mật khẩu bên dưới:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Nếu dữ liệu khôi phục được mã hóa, vui lòng nhập mật khẩu bên dưới:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Đang bắt đầu sao lưu..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Đã hoàn thành sao lưu"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Đang bắt đầu khôi phục..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Đã kết thúc quá trình khôi phục"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Thao tác hết thời gian chờ"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
index bf44a0e..40a1d1f 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"完全备份"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"完全还原"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"系统请求将所有数据完整备份至已连接的桌面计算机。允许此操作吗?"\n\n"如果您本人未要求备份,请阻止该操作。"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"备份我的数据"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"不备份"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"请输入用于加密完整备份数据的密码。如果留空,系统将会使用您当前的备份密码:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想为整个备份数据加密,请在下方输入密码:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"如果恢复数据已加密,请在下方输入密码:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"开始备份..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"备份已完成"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"开始还原..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"恢复已结束"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"操作超时"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
index f61e44c..00c24df 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"完整備份"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"完整還原"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"系統收到將所有資料完整備份至連線電腦的要求,請問您允許進行備份嗎?"\n\n"如果您本人並未提出備份要求,請勿允許繼續進行這項作業。"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"備份我的資料"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"不要備份"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入完整備份資料加密專用的密碼。如果您沒有輸入密碼,系統會使用您目前的備用密碼:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想要將完整備份資料進行加密,請在下面輸入一組密碼:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"如果還原的資料經過加密處理,請在下面輸入密碼:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"正在開始備份..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"備份完畢"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"正在開始還原..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"還原完畢"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"作業逾時"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
index 822379f..98e76cd 100644
--- a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
@@ -16,10 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for backup_confirm_title (827563724209303345) -->
- <skip />
- <!-- no translation found for restore_confirm_title (5469365809567486602) -->
- <skip />
+ <string name="backup_confirm_title" msgid="827563724209303345">"Ukulondolozwa okuphelele"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Ukubuyisela okuphelele"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"Kucelwe ukwesekelwa ngokulondoloza okuphelele kwayo yonke imininingo ekwi-desktop yekhompuyutha exhunyiwe. Angifuni ukuvumel alokhu ukuthi kwenzeke?"\n\n"Uma kuwukuthi awuzange ucele ukuthi kwesekelwe ngokulondoloza wena uqobo lwakho, ungavumeli ukuthi lolu hlelo luqhubekele phambili."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sekela ngokulondoloza imininingo yami"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ungenzi isipele"</string>
@@ -30,14 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Sicela ufake i-password ezosetshenziselwa ukubhala ngokufihlekileyo imininingo eyesekwe ngokulondoloza. Uma lokhu kushiywe kungabhalwe lutho, kuzosetshenziswa i-password yokweseka ngokulondoloza yamanje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Uma ufuna ukufaka ikhowudi kwimininingo yonke eyesekelwe ngokulondoloza faka i-passowrd engezansi:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Uma insiza yokubuyiselwa esimweni kwmininingo ibhalwe ngokufihlekileyo, sicela ufake i-password ngezansi:"</string>
- <!-- no translation found for toast_backup_started (550354281452756121) -->
- <skip />
- <!-- no translation found for toast_backup_ended (3818080769548726424) -->
- <skip />
- <!-- no translation found for toast_restore_started (7881679218971277385) -->
- <skip />
- <!-- no translation found for toast_restore_ended (1764041639199696132) -->
- <skip />
- <!-- no translation found for toast_timeout (5276598587087626877) -->
- <skip />
+ <string name="toast_backup_started" msgid="550354281452756121">"Ukulondoloza kuyaqala..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Ukulondoloza kuphelile"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Ukubuyisa kuyaqala..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Ukubuyiswa kuphelile"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Isikhathi senqubo siphelile"</string>
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index b851ab7..2444829 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -350,16 +350,21 @@
private byte[] getSystemSettings() {
Cursor cursor = getContentResolver().query(Settings.System.CONTENT_URI, PROJECTION, null,
null, null);
- byte[] result = extractRelevantValues(cursor, Settings.System.SETTINGS_TO_BACKUP);
- cursor.close();
- return result;
+ try {
+ return extractRelevantValues(cursor, Settings.System.SETTINGS_TO_BACKUP);
+ } finally {
+ cursor.close();
+ }
}
private byte[] getSecureSettings() {
Cursor cursor = getContentResolver().query(Settings.Secure.CONTENT_URI, PROJECTION, null,
null, null);
- byte[] result = extractRelevantValues(cursor, Settings.Secure.SETTINGS_TO_BACKUP);
- return result;
+ try {
+ return extractRelevantValues(cursor, Settings.Secure.SETTINGS_TO_BACKUP);
+ } finally {
+ cursor.close();
+ }
}
private void restoreSettings(BackupDataInput data, Uri contentUri) {
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index a2452c4..64c54d9 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -101,5 +101,21 @@
android:taskAffinity="com.android.systemui.net"
android:excludeFromRecents="true" />
+ <!-- started from ... somewhere -->
+ <activity
+ android:name=".Nyandroid"
+ android:exported="true"
+ android:label="Nyandroid"
+ android:icon="@drawable/nyandroid04"
+ android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+ android:hardwareAccelerated="true"
+ android:launchMode="singleInstance"
+ android:excludeFromRecents="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.DREAM" />
+ </intent-filter>
+ </activity>
</application>
</manifest>
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png
index 3adcbec..4a1d37e 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png
index d7a591c..9378fac 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
index 277dcb8..6e84546 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
index edc1760..c56905e 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
index fbc6b99..11ffbde 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
index fb938e8..2bb923e 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
index 2d35517..783ad175 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
index fe68c3c..e499f9d 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png
index 49411bd..39e3df0 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_highlight.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_highlight.png
index 77924f0..b4920c3 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_highlight.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_highlight.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
index 000e98b..31c0936 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
index 62b940a..7e9b752 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
index 5beb543..3209234d 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
index f70d315..95c56ed 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
index be9953f..11b9a93 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
index de20bdd..0f85ca0 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid00.png b/packages/SystemUI/res/drawable-nodpi/nyandroid00.png
new file mode 100644
index 0000000..6cea873
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid00.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid01.png b/packages/SystemUI/res/drawable-nodpi/nyandroid01.png
new file mode 100644
index 0000000..82b8a21
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid01.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid02.png b/packages/SystemUI/res/drawable-nodpi/nyandroid02.png
new file mode 100644
index 0000000..fde0033
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid02.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid03.png b/packages/SystemUI/res/drawable-nodpi/nyandroid03.png
new file mode 100644
index 0000000..54c5f46
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid03.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid04.png b/packages/SystemUI/res/drawable-nodpi/nyandroid04.png
new file mode 100644
index 0000000..35e5ab5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid04.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid05.png b/packages/SystemUI/res/drawable-nodpi/nyandroid05.png
new file mode 100644
index 0000000..d3eaace
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid05.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid06.png b/packages/SystemUI/res/drawable-nodpi/nyandroid06.png
new file mode 100644
index 0000000..0e0d3b1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid06.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid07.png b/packages/SystemUI/res/drawable-nodpi/nyandroid07.png
new file mode 100644
index 0000000..edb0b17
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid07.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid08.png b/packages/SystemUI/res/drawable-nodpi/nyandroid08.png
new file mode 100644
index 0000000..10fc4f6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid08.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid09.png b/packages/SystemUI/res/drawable-nodpi/nyandroid09.png
new file mode 100644
index 0000000..57ade54
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid09.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid10.png b/packages/SystemUI/res/drawable-nodpi/nyandroid10.png
new file mode 100644
index 0000000..36feb2f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid10.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid11.png b/packages/SystemUI/res/drawable-nodpi/nyandroid11.png
new file mode 100644
index 0000000..125935b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/nyandroid11.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star0.png b/packages/SystemUI/res/drawable-nodpi/star0.png
new file mode 100644
index 0000000..f2ca960
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/star0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star1.png b/packages/SystemUI/res/drawable-nodpi/star1.png
new file mode 100644
index 0000000..69ef4da
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/star1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star2.png b/packages/SystemUI/res/drawable-nodpi/star2.png
new file mode 100644
index 0000000..b95968a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/star2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star3.png b/packages/SystemUI/res/drawable-nodpi/star3.png
new file mode 100644
index 0000000..ad0f589
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/star3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star4.png b/packages/SystemUI/res/drawable-nodpi/star4.png
new file mode 100644
index 0000000..934c45b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/star4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star5.png b/packages/SystemUI/res/drawable-nodpi/star5.png
new file mode 100644
index 0000000..46a4435
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/star5.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
index 8a3d90c..3d67766 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
index 45dda51c..b74e070 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
index 18e019c..24485e1 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
index cb8ed3a..390d500 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
index ab4ad05..78998f9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
index 956b6c1..c539615 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
index 9d95f17..5c38d45 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
index e68d57d..6a79695 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
index 4ac361d9..99dbe1b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
index 5e7ecdc..6a73a89 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
index 462fad4..7042f2b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
index d284c02..3da781e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
index 4a5e701..cf63e24 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
index 9a08949..8f68e1f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
index 314f422..894c63b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
index 4e0a48a..1ec5b49 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
index 4eeae1d..9ca3ca8 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
index 1a6f1ef..74241e0 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
index d853993..faeee29 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight.png
index 2e6e3ac..f7e7102 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
index 2864ec3..cc9c49f 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
index 0bb0c72..5a313c5 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
index f23dd60..373a4a4 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
index b1c3168..d299daf 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
index 5e41470..dcfdb7b 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
index 639842b..fb8125a 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/notification_row_bg.xml b/packages/SystemUI/res/drawable/notification_row_bg.xml
index dc626d1..1bb2172 100644
--- a/packages/SystemUI/res/drawable/notification_row_bg.xml
+++ b/packages/SystemUI/res/drawable/notification_row_bg.xml
@@ -17,6 +17,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
- <item android:state_pressed="true" android:drawable="@android:color/holo_blue_light" />
+ <item android:state_pressed="true" android:drawable="@drawable/notification_item_background_color_pressed" />
<item android:state_pressed="false" android:drawable="@drawable/notification_item_background_color" />
</selector>
diff --git a/packages/SystemUI/res/drawable/nyandroid_anim.xml b/packages/SystemUI/res/drawable/nyandroid_anim.xml
new file mode 100644
index 0000000..855a0c2
--- /dev/null
+++ b/packages/SystemUI/res/drawable/nyandroid_anim.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<animation-list
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:oneshot="false">
+ <item android:drawable="@drawable/nyandroid00" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid01" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid02" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid03" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid04" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid05" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid06" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid07" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid08" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid09" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid10" android:duration="80" />
+ <item android:drawable="@drawable/nyandroid11" android:duration="80" />
+</animation-list>
+
diff --git a/packages/SystemUI/res/drawable/star_anim.xml b/packages/SystemUI/res/drawable/star_anim.xml
new file mode 100644
index 0000000..d7f2d8f
--- /dev/null
+++ b/packages/SystemUI/res/drawable/star_anim.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<animation-list
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:oneshot="false">
+ <item android:drawable="@drawable/star0" android:duration="200" />
+ <item android:drawable="@drawable/star1" android:duration="200" />
+ <item android:drawable="@drawable/star2" android:duration="200" />
+ <item android:drawable="@drawable/star3" android:duration="200" />
+ <item android:drawable="@drawable/star4" android:duration="200" />
+ <item android:drawable="@drawable/star5" android:duration="200" />
+</animation-list>
+
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
index c6966f9..58355bd 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
@@ -44,20 +44,18 @@
android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
- </FrameLayout>
- <ImageView android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignLeft="@id/app_thumbnail"
- android:layout_alignTop="@id/app_thumbnail"
- android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
- android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
- android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
- android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
- android:adjustViewBounds="true"
- android:visibility="invisible"
- />
+ <ImageView android:id="@+id/app_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
+ android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
+ android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
+ android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
+ android:adjustViewBounds="true"
+ android:visibility="invisible"
+ />
+ </FrameLayout>
<TextView android:id="@+id/app_label"
android:layout_width="@dimen/status_bar_recents_app_label_width"
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
index 2fe22ff..3ee9e77 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
@@ -75,13 +75,4 @@
android:layout_height="match_parent"
android:visibility="invisible" />
- <View android:id="@+id/recents_dismiss_button"
- android:layout_width="80px"
- android:layout_height="@*android:dimen/status_bar_height"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:background="@drawable/ic_sysbar_back_ime"
- android:visibility="gone"
- />
-
</com.android.systemui.recent.RecentsPanelView>
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
index 586712f..8c82eb1 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
@@ -42,20 +42,16 @@
android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
+ <ImageView android:id="@+id/app_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
+ android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
+ android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
+ android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
+ android:adjustViewBounds="true"
+ />
</FrameLayout>
-
- <ImageView android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignLeft="@id/app_thumbnail"
- android:layout_alignTop="@id/app_thumbnail"
- android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
- android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
- android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
- android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
- android:adjustViewBounds="true"
- />
-
<TextView android:id="@+id/app_label"
android:layout_width="@dimen/status_bar_recents_app_label_width"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
index 4d49077..d040544 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
@@ -73,13 +73,4 @@
android:layout_height="match_parent"
android:visibility="invisible" />
- <View android:id="@+id/recents_dismiss_button"
- android:layout_width="80px"
- android:layout_height="@*android:dimen/status_bar_height"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:background="@drawable/ic_sysbar_back_ime"
- android:visibility="gone"
- />
-
</com.android.systemui.recent.RecentsPanelView>
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar.xml b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
index 125c87e..b96c357 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
@@ -73,7 +73,7 @@
android:layout_width="80dip"
android:layout_height="match_parent"
android:src="@drawable/ic_sysbar_recent"
- android:contentDescription="@string/accessibility_menu"
+ android:contentDescription="@string/accessibility_recent"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
/>
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
index 1641c70..2947bfb 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
@@ -34,6 +34,7 @@
android:paddingRight="15dp"
android:src="@drawable/ic_notify_clear"
android:visibility="invisible"
+ android:contentDescription="@string/accessibility_clear_all"
/>
<RelativeLayout
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
index cd8ccd5..e6336718 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
@@ -37,20 +37,17 @@
android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
+ <ImageView android:id="@+id/app_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
+ android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
+ android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
+ android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
+ android:adjustViewBounds="true"
+ />
</FrameLayout>
- <ImageView android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignLeft="@id/app_thumbnail"
- android:layout_alignTop="@id/app_thumbnail"
- android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
- android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
- android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
- android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
- android:adjustViewBounds="true"
- />
-
<TextView android:id="@+id/app_label"
android:layout_width="@dimen/status_bar_recents_app_label_width"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml
index 4ef602e..5dd101e 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml
@@ -79,6 +79,7 @@
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@drawable/ic_sysbar_back_ime"
+ android:contentDescription="@string/status_bar_accessibility_dismiss_recents"
/>
</com.android.systemui.recent.RecentsPanelView>
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 38ac8a7..3e2def5 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -65,6 +65,7 @@
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:src="@drawable/ic_notify_quicksettings"
+ android:contentDescription="@string/accessibility_settings_button"
/>
<ImageView android:id="@+id/clear_all_button"
@@ -74,6 +75,7 @@
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:src="@drawable/ic_notify_clear"
+ android:contentDescription="@string/accessibility_clear_all"
/>
</RelativeLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml
index 3220e62..abbc89a 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_row.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml
@@ -41,7 +41,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/notification_divider_height"
android:layout_alignParentBottom="true"
- android:background="@drawable/notification_item_background_color"
+ android:background="@drawable/status_bar_notification_row_background_color"
/>
</RelativeLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_tracking.xml b/packages/SystemUI/res/layout/status_bar_tracking.xml
index 25c0237..c1b0066 100644
--- a/packages/SystemUI/res/layout/status_bar_tracking.xml
+++ b/packages/SystemUI/res/layout/status_bar_tracking.xml
@@ -26,12 +26,21 @@
android:paddingRight="0px"
>
- <View
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:background="@drawable/notification_tracking_bg"
- />
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@drawable/notification_tracking_bg"
+ >
+ <com.android.systemui.statusbar.phone.CarrierLabel
+ android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_gravity="bottom"
+ android:gravity="center"
+ android:paddingBottom="20dp"
+ />
+ </FrameLayout>
<com.android.systemui.statusbar.phone.CloseDragHandle android:id="@+id/close"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index fb0c355..05d27cf 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Wys kennisgewings"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwyder uit lys"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Program Info"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Geen onlangse programme nie"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Maak onlangse programme toe"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 onlangse program"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d onlangse programme"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen kennisgewings"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Voortdurend"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Kennisgewings"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEMP"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"OUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Kennisgewings"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Onlangs"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Geen onlangse programme nie."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-verbind"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Stel invoermetodes op"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Gebruik fisiese sleutelbord"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Terug"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Tuis"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Kieslys"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Onlangse programme"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Onlangse programme"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knoppie vir wissel van invoermetode."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Versoenbaarheid-zoem se knoppie."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoem kleiner na groter skerm."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-verbinding."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> persent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Instellingsknoppie."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Kennisgewingsknoppie."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Verwyder kennisgewing."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Stelselinstellings"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Kennisgewings"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Verwyder kennisgewing"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS geaktiveer."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS soek ligging."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter geaktiveer."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi gekoppel"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Soek vir GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Ligging deur GPS gestel"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Verwyder alle kennisgewings."</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index ed4cb9c..6090664 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"ማሳወቂያዎች አሳይ"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ከዝርዝር አስወግድ"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"የትግበራ መረጃ"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"ምንም የቅርብ ጊዜ ትግበራዎች የሉም"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"የቅርብ ጊዜ መተግበሪያዎችን አሰናብት"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 የቅርብ ጊዜ መተግበሪያ"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d የቅርብ ጊዜ መተግበሪያዎች"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ምንም ማሳወቂያዎች የሉም"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"በመካሄድ ላይ ያለ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"ማሳወቂያዎች"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ድምጽ አጥፋ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ራስ ሰር"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"ማሳወቂያዎች"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"የቅርብ ጊዜ"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"ምንም የቅርብ ጊዜ ትግበራዎች የሉም።"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"ትግበራዎች"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"ብሉቱዝ አያይዝ"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"ግቤት ሜተዶችንአዋቀር"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"የቁልፍ ሰሌዳ ተጠቀም"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"ተመለስ"</string>
<string name="accessibility_home" msgid="8217216074895377641">"መነሻ"</string>
<string name="accessibility_menu" msgid="316839303324695949">"ምናሌ"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"የቅርብ ጊዜ ትግበራዎች"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"የቅርብ ጊዜ መተግበሪያዎች"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"የግቤት ሜተድ አዝራር ቀይር"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"የተኳኋኝአጉላ አዝራር።"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"አነስተኛውን ማያ ወደ ትልቅ አጉላ።"</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ብሉቱዝ ማያያዝ።"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"የአውሮፕላን ሁነታ።"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"የባትሪ <xliff:g id="NUMBER">%d</xliff:g> መቶኛ።"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"የቅንብሮች አዝራር።"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"የማሳወቂያዎች አዝራር።"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"ማሳወቂያ አስወግድ።"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"የስርዓት ቅንጅቶች"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"ማሳወቂያዎች"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"ማሳወቂያ አጥራ"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ነቅቷል።"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS በማግኘት ላይ።"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ነቅቷል።"</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ተያይዟል"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"ለGPS በመፈለግ ላይ"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"በ GPS የተዘጋጀ ሥፍራ"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"ሁሉንም ማሳወቂያዎች አጽዳ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index e0e4643..dd10e29 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"إظهار التنبيهات"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"إزالة من القائمة"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"معلومات التطبيق"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"ليس هناك تطبيقات حديثة"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"إزالة التطبيقات الحديثة"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"تطبيق حديث واحد"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d من التطبيقات الحديثة"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي تنبيهات"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"مستمر"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"التنبيهات"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"كتم"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"تلقائي"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"التنبيهات"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"حديثة"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"ليس هناك أية تطبيقات حديثة."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"التطبيقات"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"تم إنشاء الاتصال بالإنترنت عن طريق البلوتوث."</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"تهيئة طرق الإدخال"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"استخدام لوحة المفاتيح الفعلية"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"رجوع"</string>
<string name="accessibility_home" msgid="8217216074895377641">"الرئيسية"</string>
<string name="accessibility_menu" msgid="316839303324695949">"القائمة"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"التطبيقات الحديثة"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"التطبيقات الحديثة"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"زر تبديل طريقة الإدخال."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"زر تكبير/تصغير للتوافق."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"استخدام التكبير/التصغير لتحويل شاشة صغيرة إلى شاشة أكبر"</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"وضع الطائرة."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"مستوى البطارية <xliff:g id="NUMBER">%d</xliff:g> في المائة."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"زر الإعدادات."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"زر التنبيهات."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"إزالة التنبيه."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"إعدادات النظام."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"الإشعارات."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"محو الإشعار."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"تم تمكين GPS."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"الحصول على GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"تم تمكين المبرقة الكاتبة."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"جارٍ البحث عن GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"تم تعيين الموقع بواسطة GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"محو جميع الإشعارات."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index b017205..033f563 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показване на известията"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Премахване от списъка"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информация за приложението"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Няма скорошни приложения"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Отхвърляне на скорошните приложения"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 скорошно приложение"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d скорошни приложения"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Няма известия"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"В момента"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Известия"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"БЕЗ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АВТ."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Известия"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Скорошни"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Няма скорошни приложения."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Приложения"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth има връзка с тетъринг"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Конфигуриране на въвеждането"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Използване на физ. клав."</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Начало"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Скорошни приложения"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Скорошни приложения"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Бутон за превключване на метода на въвеждане."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Бутон за промяна на мащаба с цел съвместимост."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Промяна на мащаба на екрана от по-малък до по-голям."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Тетъринг през Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Самолетен режим."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> процента батерия."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Бутон за настройки."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Бутон за известия."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Премахване на известие."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Системни настройки."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Известия."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Изчистване на известието."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS е активиран."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS се придобива."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter бе активиран."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: Има връзка"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Търси се GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Местоположението е зададено от GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Изчистване на всички известия."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index c0f9f17..8cf6b0d 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notificacions"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Elimina de la llista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informació de l\'aplicació"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"No hi ha aplicacions recents"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Omet les aplicacions recents"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"Una aplicació recent"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d aplicacions recents"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Cap notificació"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continu"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificacions"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"Silen."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificacions"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recents"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"No hi ha aplicacions recents."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth sense fil"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configura mètodes d\'entrada"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilitza un teclat físic"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Enrere"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Pàgina d\'inici"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicacions recents"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplicacions recents"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botó de canvi del mètode d\'entrada."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botó de zoom de compatibilitat."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Amplia menys com més gran sigui la pantalla."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Botó Configuració."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botó de notificacions."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Elimina la notificació."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Configuració del sistema."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificacions."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Esborra la notificació."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"S\'està adquirint el GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletip activat."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: connectada"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"S\'està cercant un GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"S\'ha establert la ubicació per GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Esborra totes les notificacions."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 9021409..b069de4 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Zobrazit upozornění"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odebrat ze seznamu"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informace o aplikaci"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Žádné nové aplikace"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zavřít nové aplikace"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 nová aplikace"</item>
+ <item quantity="other" msgid="1040784359794890744">"nové aplikace: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žádná oznámení"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Probíhající"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Oznámení"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ZTLUM."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Oznámení"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Nejnovější"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Žádné nedávno použité aplikace."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikace"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Datové připojení Bluetooth se sdílí"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Nakonfigurovat metody vstupu"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Použít fyz. klávesnici"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Zpět"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Domů"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Naposledy použité aplikace"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Nové aplikace"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačítko přepnutí metody vstupu"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačítko úpravy velikosti z důvodu kompatibility"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zvětšit menší obrázek na větší obrazovku."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Tlačítko Nastavení."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Tlačítko upozornění."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Odebrat oznámení"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Systémová nastavení."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Oznámení."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Vymazat oznámení."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je povoleno."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Zaměřování GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhraní TeleTypewriter zapnuto."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: připojeno"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhledávání satelitů GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavena pomocí systému GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazat všechna oznámení."</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index ea434e1..b770bb1 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis meddelelser"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Oplysninger om appen"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Der er ingen seneste apps"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Afvis de seneste apps"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 seneste app"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d seneste apps"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen meddelelser"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"I gang"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelelser"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"LYDLØS"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Meddelelser"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Seneste"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Der er ingen nye applikationer."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Programmer"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-tethering anvendt"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurer inputmetoder"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Brug fysisk tastatur"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Tilbage"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Seneste applikationer"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Seneste apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Skift indtastningsmetode-knappen."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knap for kompatibilitetszoom."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skærm."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-netdeling."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flytilstand."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Knappen Indstillinger."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knappen Meddelelser."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Fjern meddelelse."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Systemindstillinger."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Meddelelser."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ryd meddelelse."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiveret."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS samler data."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiveret."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi er forbundet"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Søger efter GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Placeringen er angivet ved hjælp af GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Ryd alle meddelelser."</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 372b903..33ea24f 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Benachrichtigungen zeigen"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Aus Liste entfernen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-Info"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Keine neuen Apps"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zuletzt verwendete Apps schließen"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 zuletzt verwendete App"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d zuletzt verwendete Apps"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Keine Benachrichtigungen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktuell"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Benachrichtigungen"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"STUMM"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Benachrichtigungen"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Zuletzt verwendet"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Keine zuletzt verwendeten Anwendungen"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-Tethering aktiv"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Eingabemethoden konfigurieren"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Physische Tastatur"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Zurück"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startbildschirm"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Zuletzt verwendete Apps"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Zuletzt verwendete Apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Schaltfläche zum Ändern der Eingabemethode"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Schaltfläche für Kompatibilitätszoom"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom auf einen größeren Bildschirm"</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-Tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flugmodus"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akku bei <xliff:g id="NUMBER">%d</xliff:g> Prozent"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Schaltfläche für Einstellungen"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Benachrichtigungsschaltfläche"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Benachrichtigung entfernen"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Systemeinstellungen"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Benachrichtigungen"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Benachrichtigung löschen"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiviert"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-Signal abrufen"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Schreibtelefonie aktiviert"</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Standort durch GPS festgelegt"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Alle Benachrichtigungen löschen"</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 803f7d9..b02f731 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Εμφάνιση ειδοποιήσεων"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Κατάργηση από τη λίστα"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Πληροφορίες εφαρμογής"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Δεν υπάρχουν πρόσφατες εφαρμογές"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Παράβλεψη πρόσφατων εφαρμογών"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 πρόσφατη εφαρμογή"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d πρόσφατες εφαρμογές"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Δεν υπάρχουν ειδοποιήσεις"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Εν εξελίξει"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ειδοποιήσεις"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ΣΙΓΑΣΗ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ΑΥΤΟΜ."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Ειδοποιήσεις"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Πρόσφατα"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Δεν υπάρχουν πρόσφατες εφαρμογές."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Έγινε σύνδεση μέσω Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Διαμόρφωση μεθόδων εισαγωγής"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Χρήση κανονικού πληκτρολ."</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Πίσω"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Αρχική σελίδα"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Πρόσφατες εφαρμογές"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Πρόσφατες εφαρμογές"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Κουμπί εναλλαγής μεθόδου εισόδου"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Κουμπί εστίασης συμβατότητας."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Ζουμ από μικρότερη σε μεγαλύτερη οθόνη."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Κουμπί ρυθμίσεων."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Κουμπί ειδοοποιήσεων"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Κατάργηση ειδοποίησης."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Ρυθμίσεις συστήματος."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Ειδοποιήσεις."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Εκκαθάριση ειδοποίησης."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Το GPS ενεργοποιήθηκε."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Προσδιορισμός GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Το TeleTypewriter ενεργοποιήθηκε."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi συνδεδεμένο"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Αναζήτηση για GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Ρύθμιση τοποθεσίας με GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Εκκαθάριση όλων των ειδοποιήσεων."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index a66ed40..9b102a9 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Show notifications"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"No recent apps"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 recent app"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d recent apps"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recent"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"No recent applications."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configure input methods"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Use physical keyboard"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Back"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Recent applications"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Recent apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Airplane mode"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> per cent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Settings button."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Notifications button."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Remove notification."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index bf0686d..c122f7f 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminar de la lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Ninguna aplicación reciente"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rechazar aplicaciones recientes"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 aplicación reciente"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d aplicaciones recientes"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No hay notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continuo"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"SILENC"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificaciones"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Reciente"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"No hay aplicaciones recientes."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicaciones"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth anclado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Usar teclado físico"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Atrás"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página principal"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicaciones recientes"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplicaciones recientes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Botón de configuración"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botón de notificaciones"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Eliminar notificación"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Configuración del sistema"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificaciones"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Borrar notificación"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Adquisición de GPS"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter habilitado"</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"La ubicación se estableció por GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Borrar todas las notificaciones"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 870a166..d413623 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminar de la lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"No hay aplicaciones recientes."</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicaciones recientes"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 aplicación reciente"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d aplicaciones recientes"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No tienes notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Entrante"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"SILENC"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificaciones"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Reciente"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"No hay aplicaciones recientes."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicaciones"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth anclado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de introducción"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizar teclado físico"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Atrás"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Inicio"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicaciones recientes"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplicaciones recientes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de introducción"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Anclaje de Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> por ciento de batería"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Botón de ajustes"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botón de notificaciones"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Eliminar notificación"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Ajustes del sistema"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificaciones"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Borrar notificación"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Obteniendo ubicación..."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletipo habilitado"</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Con conexión Wi-Fi"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Ubicación definida por GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Borrar todas las notificaciones"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 0224983..b54e962 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"نمایش اعلان ها"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"حذف از لیست"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"اطلاعات برنامه"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"برنامه جدیدی موجود نیست"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"رد کردن برنامههای اخیر"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 برنامه اخیر"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d برنامه اخیر"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"اعلانی موجود نیست"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"در حال انجام"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"اعلان ها"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"بیصدا"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"خودکار"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"اعلان ها"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"اخیر"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"برنامه اخیری موجود نیست."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"برنامه های کاربردی"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"اتصال اینترنتی با بلوتوث تلفن همراه"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"پیکربندی روش های ورودی"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"از صفحه کلید فیزیکی استفاده کنید"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"برگشت"</string>
<string name="accessibility_home" msgid="8217216074895377641">"صفحه اصلی"</string>
<string name="accessibility_menu" msgid="316839303324695949">"منو"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"برنامههای اخیر"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"برنامههای اخیر"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"کلید تغییر روش ورود متن."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"دکمه بزرگنمایی سازگار."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"بزرگنمایی از صفحههای کوچک تا بزرگ."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"اتصال اینترنت با بلوتوث تلفن همراه."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"حالت هواپیما."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"باتری <xliff:g id="NUMBER">%d</xliff:g> درصد."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"دکمه تنظیمات."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"دکمه اعلانها."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"حذف اعلان."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"تنظیمات سیستم."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"اعلانها."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"پاک کردن اعلان"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS فعال شد."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"دستیابی به GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter فعال شد."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل شد"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"جستجو برای GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"مکان تنظیم شده توسط GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"پاک کردن تمام اعلانها"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 73c36ce..1ae591d 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Näytä ilmoitukset"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Poista luettelosta"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Sovelluksen tiedot"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Ei viimeisimpiä sovelluksia"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Hylkää viimeaikaiset sovellukset"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 viimeaikainen sovellus"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d viimeaikaista sovellusta"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ei ilmoituksia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Käynnissä olevat"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ilmoitukset"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ÄÄNET."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Ilmoitukset"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Viimeisimmät"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Ei viimeaikaisia sovelluksia."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Sovellukset"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth yhdistetty"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Määritä syöttötavat"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Käytä fyysistä näppäimistöä"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Takaisin"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Aloituspainike"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Valikko"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Viimeaikaiset sovellukset"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Viimeaikaiset sovellukset"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Syöttötavan vaihtopainike."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Yhteensopivuuszoomaus-painike."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoomaa pienemmältä suuremmalle ruudulle."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetyhteyden jakaminen Bluetoothin kautta."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lentokonetila."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akun virta <xliff:g id="NUMBER">%d</xliff:g> prosenttia."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Asetukset-painike."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Ilmoitukset-painike."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Poista ilmoitus."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Järjestelmän asetukset"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Ilmoitukset"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Tyhjennä ilmoitus"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS käytössä."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Haetaan GPS-signaalia."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Tekstipuhelin käytössä."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wifi yhdistetty"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Haetaan GPS-yhteyttä"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Sijainti määritetty GPS:n avulla"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Tyhjennä kaikki ilmoitukset."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index b20c4be..d453bd2 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afficher les notifications"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Supprimer de la liste"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Aucune application récente."</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 application récente"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d applications récentes"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUET"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Récentes"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Aucune application récente"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Applications"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Connexion Bluetooth partagée"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurer les modes de saisie"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utiliser clavier physique"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Retour"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Accueil"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Applications récentes"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Applications récentes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Bouton \"Zoom de compatibilité\""</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilité avec la taille de l\'écran"</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Bouton \"Paramètres\""</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Bouton \"Notifications\""</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Supprimer la notification"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Paramètres système"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Supprimer la notification"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activé"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisition de données GPS"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Téléscripteur activé"</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Connecté au Wi-Fi"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Recherche de GPS..."</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Position définie par GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Supprimer toutes les notifications"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 9c99d28..be1133c 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Prikaži obavijesti"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ukloni s popisa"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacije o aplikaciji"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nema nedavnih aplikacija"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odbaci nedavne aplikacije"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 nedavna aplikacija"</item>
+ <item quantity="other" msgid="1040784359794890744">"Nedavnih aplikacija: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bez obavijesti"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"U tijeku"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obavijesti"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"Bez zv."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Obavijesti"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Nedavni"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nema nedavnih aplikacija."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikacije"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth posredno povezan"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfiguriraj načine ulaza"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Rabi fizičku tipkovnicu"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Natrag"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Početna"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Izbornik"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nedavne aplikacije"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Nedavne aplikacije"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za promjenu načina unosa."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb za kompatibilnost zumiranja."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zumiranje manjeg zaslona na veći."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Posredno povezivanje Bluetootha."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u zrakoplovu"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterija <xliff:g id="NUMBER">%d</xliff:g> posto."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Gumb postavki."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Gumb obavijesti."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Ukloni obavijest."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Postavke sustava."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Obavijesti."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Brisanje obavijesti"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je omogućen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Dohvaćanje GPS-a."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter je omogućen."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Traženje GPS-a"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokaciju utvrdio GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Brisanje svih obavijesti."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 7bc1789..9cf5ea6 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Értesítések megjelenítése"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eltávolítás a listából"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Alkalmazásinformáció"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nincs újabb alkalmazás"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Újabb alkalmazások elvetése"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 újabb alkalmazás"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d újabb alkalmazás"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nincs értesítés"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Folyamatban van"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Értesítések"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"NÉMÍT"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Értesítések"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Legutóbbiak"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nincsenek nemrég használt alkalmazások"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Alkalmazások"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth megosztva"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Beviteli módok konfigurálása"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Valódi bill. használata"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Vissza"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Főoldal"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nemrég használt alkalmazások"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Legújabb alkalmazás"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Beviteli mód váltása gomb."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kompatibilitási zoom gomb."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kicsinyítsen a nagyobb képernyőhöz."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth megosztása."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Repülőgép üzemmód."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akkumulátor <xliff:g id="NUMBER">%d</xliff:g> százalék."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Beállítások gomb."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Értesítések gomb."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Értesítés eltávolítása."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Rendszerbeállítások"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Értesítések"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Értesítés törlése"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS engedélyezve."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS lekérése."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter engedélyezve."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi csatlakoztatva"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS keresése"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"A GPS beállította a helyet"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Minden értesítés törlése"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 999ea1d..203683f2 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tampilkan pemberitahuan"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Hapus dari daftar"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info apl"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Tidak ada apl terbaru"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Singkirkan aplikasi terbaru"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 apl terbaru"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d apl terbaru"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tidak ada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Berkelanjutan"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"BUNGKAM"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Terbaru"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Tidak ada aplikasi terbaru."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tertambat"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurasikan metode masukan"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Gunakan keyboard fisik"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Utama"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplikasi terbaru"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Apl terbaru"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tombol beralih metode masukan."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tombol perbesar/perkecil kompatibilitas."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Perbesar dari layar kecil ke besar."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode pesawat."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterai <xliff:g id="NUMBER">%d</xliff:g> persen."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Tombol setelan."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Tombol pemberitahuan."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Hapus pemberitahuan."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Setelan sistem."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Mengapus pemberitahuan."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS diaktifkan."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Memperoleh GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter diaktifkan."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tersambung"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Menelusuri GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi yang disetel oleh GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Mengapus semua pemberitahuan."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index becfe01..de38f8a 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notifiche"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Rimuovi dall\'elenco"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informazioni applicazione"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nessuna applicazione recente"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignora applicazioni recenti"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 applicazione recente"</item>
+ <item quantity="other" msgid="1040784359794890744">"Applicazioni recenti in %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nessuna notifica"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"In corso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifiche"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifiche"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recenti"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nessuna applicazione recente."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Applicazioni"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth con tethering"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configura metodi di input"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizza tastiera fisica"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Indietro"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Applicazioni recenti"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Applicazioni recenti"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Pulsante per cambiare metodo di immissione."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Pulsante zoom compatibilità."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom inferiore per schermo più grande."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Pulsante Impostazioni."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Pulsante per le notifiche."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Rimuovi la notifica."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Impostazioni di sistema."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifiche."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Cancella notifica."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS abilitato."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisizione GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Telescrivente abilitata."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connesso"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Ricerca del GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Posizione stabilita dal GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Cancella tutte le notifiche."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 567f2b9..7902159 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"הצג התראות"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"הסר מהרשימה"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי יישום"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"אין יישומים אחרונים"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"סגור יישומים אחרונים"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"יישום אחרון אחד"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d היישומים האחרונים"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין התראות"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"התראות"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"השתק"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"אוטומטי"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"התראות"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"נוצרו לאחרונה"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"אין יישומים חדשים."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth קשור"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"הגדרת שיטות קלט"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"השתמש במקלדת הפיזית"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"הקודם"</string>
<string name="accessibility_home" msgid="8217216074895377641">"בית"</string>
<string name="accessibility_menu" msgid="316839303324695949">"תפריט"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"יישומים אחרונים"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"יישומים אחרונים"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"לחצן החלפת שיטת קלט."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"לחצן מרחק מתצוגה של תאימות."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"שנה מרחק מתצוגה של מסך קטן לגדול יותר."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"שיתוף אינטרנט בין ניידים של Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"מצב טיסה"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> אחוזים של סוללה."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"לחצן הגדרות."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"לחצן ההתראות"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"הסר התראה."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"הגדרות מערכת"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"התראות"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"נקה התראה"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS מופעל."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"השגת GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter מופעל"</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi מחובר"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"מחפש GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"מיקום מוגדר על ידי GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההתראות."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index ffb0227..74f2c5a 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"通知を表示"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"リストから削除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"アプリ情報"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"最近使ったアプリはありません"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"最近使ったアプリをクリア"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"最近使ったアプリ: 1"</item>
+ <item quantity="other" msgid="1040784359794890744">"最近使ったアプリ: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"通知なし"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"実行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ミュート"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"オート"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"通知"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"新着"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"新着のアプリケーションはありません。"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"アプリ"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetoothテザリング接続"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"入力方法の設定"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"物理キーボードを使用"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"戻る"</string>
<string name="accessibility_home" msgid="8217216074895377641">"ホーム"</string>
<string name="accessibility_menu" msgid="316839303324695949">"メニュー"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"最近使ったアプリケーション"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"最近使ったアプリ"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"入力方法の切り替えボタン。"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"互換ズームボタン。"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"小さい画面から大きい画面に拡大。"</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"設定ボタン。"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"通知ボタン。"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"通知を削除。"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"システム設定。"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"通知を消去。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPSが有効です。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS取得中です。"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"テレタイプライターが有効です。"</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi接続済み"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSで検索中"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"GPSにより現在地が設定されました"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"通知をすべて消去。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 417664d..b159c17 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"알림 표시"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"목록에서 삭제"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"앱 정보"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"최근에 사용한 앱 없음"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"최근에 사용한 앱 숨기기"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"최근에 사용한 앱 1개"</item>
+ <item quantity="other" msgid="1040784359794890744">"최근에 사용한 앱 %d개"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"알림 없음"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"진행 중"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"알림"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"무시"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"자동"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"알림"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"최근 사용한 앱"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"최근에 사용한 애플리케이션이 없습니다."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"애플리케이션"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"블루투스 테더링됨"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"입력 방법 구성"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"물리적 키보드 사용"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"뒤로"</string>
<string name="accessibility_home" msgid="8217216074895377641">"홈"</string>
<string name="accessibility_menu" msgid="316839303324695949">"메뉴"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"최근 애플리케이션"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"최근에 사용한 앱"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"입력 방법 버튼을 전환합니다."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"호환성 확대/축소 버튼입니다."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"작은 화면을 큰 화면으로 확대합니다."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"블루투스 테더링입니다."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"비행기 모드입니다."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"배터리 <xliff:g id="NUMBER">%d</xliff:g>퍼센트"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"설정 버튼입니다."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"알림 버튼입니다."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"알림을 삭제합니다."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"시스템 설정"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"알림"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"알림 지우기"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS가 사용 설정되었습니다."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS를 가져오는 중입니다."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"전신 타자기(TTY)가 사용 설정되었습니다."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 연결됨"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS 검색 중"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"GPS에서 위치 설정"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"모든 알림 지우기"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index aff4f08..6a57589 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rodyti pranešimus"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Pašalinti iš sąrašo"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Programos informacija"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nėra naujausių programų"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Atsisakyti naujausių programų"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 naujausia programa"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d naujausios programos"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nėra įspėjimų"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Vykstantys"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Įspėjimai"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"NUTILD."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Pranešimai"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Naujos"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nėra naujausių programų."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"„Bluetooth“ susieta"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigūruoti įvesties metodus"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Naudoti fizinę klaviatūrą"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Atgal"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Pagrindinis"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meniu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Naujausios programos"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Naujausios programos"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Perjungti įvesties metodo mygtuką."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Suderinamumo priartinimo mygtukas."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Padidinti ekraną."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"„Bluetooth“ įrenginio kaip modemo naudojimas."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lėktuvo režimas."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akumuliatorius: <xliff:g id="NUMBER">%d</xliff:g> proc."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Nustatymų mygtukas."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Pranešimų mygtukas."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Pašalinti pranešimą."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Sistemos nustatymai"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pranešimai."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Išvalyti pranešimą."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS įgalintas."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Gaunama GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"„TeleTypewriter“ įgalinta."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Prisij. prie „Wi-Fi“"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Ieškoma GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"GPS nustatyta vieta"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Išvalyti visus pranešimus."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 822639c..a3706ec 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rādīt paziņojumus"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Noņemšana no saraksta"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Lietotnes informācija"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nav nesen izmantotu lietotņu."</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Nerādīt nesen izmantotās lietotnes"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 nesen izmantotā lietotne"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d nesen izmantotās lietotnes"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nav paziņojumu"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Notiekošs"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Paziņojumi"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"IZ. SK."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Paziņojumi"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Nesens"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nav nesenu lietojumprogrammu."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Lietotnes"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth piesaiste"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurēt ievades metodes"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Izmantot fizisku tastatūru"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Atpakaļ"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Sākums"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Izvēlne"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Jaunākās lietojumprogrammas"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Nesen izmantotās lietotnes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Saderības tālummaiņas poga."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Veikt tālummaiņu no mazāka ekrāna uz lielāku."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth piesaiste."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lidmašīnas režīms."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akumulators: <xliff:g id="NUMBER">%d</xliff:g> procenti"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Iestatījumu poga."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Paziņojumu poga."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Noņemt paziņojumu."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Sistēmas iestatījumi"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Paziņojumi"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Notīrīt paziņojumu"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ir iespējots."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS iegūšana."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletaips ir iespējots."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Izv. sav. ar Wi-Fi"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Notiek GPS meklēšana..."</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"GPS iestatītā atrašanās vieta"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Notīrīt visus paziņojumus"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 4bbae01..9fdcd72 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tunjukkan pemberitahuan"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alih keluar dari senarai"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Maklumat aplikasi"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Tiada aplikasi terbaharu"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Buang aplikasi terbaharu"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 aplikasi terbaharu"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d aplikasi terbaharu"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"REDAM"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Baru-baru ini"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Tiada aplikasi terbaru."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apl"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ditambatkan"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurasikan kaedah input"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Guna ppn kekunci fizikal"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Rumah"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplikasi terbaru"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplikasi terbaharu"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah input."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Butang zum keserasian."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Skrin zum lebih kecil kepada lebih besar."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod pesawat"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Bateri <xliff:g id="NUMBER">%d</xliff:g> peratus."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Butang tetapan."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Butang pemberitahuan."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Alih keluar pemberitahuan."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Tetapan sistem."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Padamkan pemberitahuan."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS didayakan."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS sedang mendapatkan."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Mesin Teletaip didayakan."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi disambungkan"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Mencari GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi ditetapkan oleh GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Padamkan semua pemberitahuan."</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index e3c53b8..85d2ca2 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis varslinger"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om app"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Ingen nylige apper"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvis nylige apper"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"Én nylig app"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d nylige apper"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen varslinger"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktiviteter"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Varslinger"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEMPET"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Varslinger"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Nylig"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Ingen nylig brukte programmer."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Programmer"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tilknyttet"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurer inndatametoder"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Bruk fysisk tastatur"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Tilbake"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nyere applikasjoner"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Nylige apper"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bytt knapp for inndatametode."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoomknapp for kompatibilitet."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom fra mindre til større skjerm."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-deling."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flymodus."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri – <xliff:g id="NUMBER">%d</xliff:g> prosent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Innstillinger-knapp."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knapp for varslinger"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Fjern varsling."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Systeminnstillinger."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Varslinger."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Fjern varsling"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS er aktivert."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Henting av GPS-signal."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter er aktivert."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tilkoblet"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Søker etter GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Posisjon angitt av GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Fjern alle varslinger."</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index d598e61..badf128 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Meldingen weergeven"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwijderen uit lijst"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-info"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Geen recente apps"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Recente apps negeren"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 recente app"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d recente apps"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen meldingen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actief"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meldingen"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEMPEN"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Meldingen"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recent"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Geen recente apps."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth getetherd"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Invoermethoden configureren"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Fysiek toetsenbord gebruiken"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Terug"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startpagina"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Recente apps"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Recente apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knop voor wijzigen invoermethode."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knop voor compatibiliteitszoom."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kleiner scherm uitzoomen naar groter scherm."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tethering."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegmodus."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Accu: <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"De knop \'Instellingen\'."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knop voor meldingen."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Melding verwijderen."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Systeeminstellingen."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Meldingen."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Melding wissen"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ingeschakeld."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Verbinding maken met GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ingeschakeld."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Verbonden via Wi-Fi"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Zoeken naar GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Locatie bepaald met GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Alle meldingen wissen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index a9bf53b..85a75a6 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaż powiadomienia"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Usuń z listy"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacje o aplikacji"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Brak ostatnio uruchomionych aplikacji."</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ukryj ostatnie aplikacje"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 ostatnia aplikacja"</item>
+ <item quantity="other" msgid="1040784359794890744">"Ostatnie aplikacje: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Brak powiadomień"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Bieżące"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Powiadomienia"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"WYGAŚ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Powiadomienia"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Najnowsze"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Brak ostatnio używanych aplikacji."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikacje"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth – podłączono"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfiguruj metody wprowadzania"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Używaj klawiatury fizycznej"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Wróć"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Ekran główny"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Najnowsze aplikacje"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Ostatnie aplikacje"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Przycisk przełączania metody wprowadzania."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Przycisk powiększenia na potrzeby zgodności."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Powiększa mniejszy ekran do większego."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Powiązanie Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Tryb samolotowy."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria: <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Przycisk Ustawienia."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Przycisk powiadomień."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Usuń powiadomienie."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Ustawienia systemu."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Powiadomienia."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Usuń powiadomienie."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS włączony."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Pobieranie danych GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Dalekopis (TTY) włączony."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja ustawiona według GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Usuń wszystkie powiadomienia."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index f2d0c2a..aa2ac40 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações da aplicação"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Não existem aplicações recentes"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rejeitar aplicações recentes"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 aplicação recente"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d aplicações recentes"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em curso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"D. SOM"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificações"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nenhuma aplicação recente."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicações"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ligado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizar teclado físico"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Anterior"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicações recentes"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplicações recentes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alternar botão de método de introdução."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão zoom de compatibilidade."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom menor para ecrã maior."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ligação Bluetooth via telemóvel."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avião"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria a <xliff:g id="NUMBER">%d</xliff:g> por cento."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Botão Definições."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botão de notificações."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Remover notificação."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Definições do sistema"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificações."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Limpar notificações"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Adquirir GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletipo ativado."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ligado"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"A procurar GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Localização definida por GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index c9ed8f2..d845012 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações do aplicativo"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nenhum aplicativo recente"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dispensar aplicativos recentes"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 aplicativo recente"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d aplicativos recentes"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em andamento"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUDO"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificações"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nenhum aplicativo recente."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicativos"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth vinculado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Usar o teclado físico"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Voltar"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicações recentes"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplicativos recentes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alterar botão do método de entrada."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão de zoom da compatibilidade."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Aumentar a tela com zoom."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Botão Configurações."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botão de notificações."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Remover notificação."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Configurações do sistema"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificações."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Limpar notificação."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Aquisição de GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTYpewriter ativado."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Local definido por GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index bef7f2c..5e5c374 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -32,6 +32,10 @@
<skip />
<!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
<skip />
+ <!-- no translation found for status_bar_accessibility_dismiss_recents (4576076075226540105) -->
+ <skip />
+ <!-- no translation found for status_bar_accessibility_recent_apps:one (5854176083865845541) -->
+ <!-- no translation found for status_bar_accessibility_recent_apps:other (1040784359794890744) -->
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nagins avis"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actual"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Avis"</string>
@@ -56,11 +60,6 @@
<skip />
<!-- no translation found for status_bar_settings_notifications (397146176280905137) -->
<skip />
- <string name="recent_tasks_title" msgid="3691764623638127888">"Utilisà sco ultim"</string>
- <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
- <skip />
- <!-- no translation found for recent_tasks_app_label (3796483981246752469) -->
- <skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
<!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
@@ -111,7 +110,7 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <!-- no translation found for accessibility_recent (8571350598987952883) -->
<skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
@@ -185,11 +184,11 @@
<skip />
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
+ <!-- no translation found for accessibility_settings_button (799583911231893380) -->
<skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
+ <!-- no translation found for accessibility_notifications_button (4498000369779421892) -->
<skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
+ <!-- no translation found for accessibility_remove_notification (3603099514902182350) -->
<skip />
<!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
<skip />
@@ -221,4 +220,6 @@
<skip />
<!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
+ <!-- no translation found for accessibility_clear_all (5235938559247164925) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 33dc26c..bf10f04 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afişaţi notificări"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminaţi din listă"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informaţii despre aplicaţie"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Nu există aplicaţii recente"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunţaţi la aplicaţiile recente"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 aplicaţie recentă"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d (de) aplicaţii recente"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nicio notificare"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"În desfăşurare"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificări"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEZAC."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificări"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Nu există aplicaţii recente."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicaţii"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Conectat prin tethering prin Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configuraţi metode de intrare"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizaţi tastat. fizică"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Înapoi"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Ecranul de pornire"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meniu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicaţii recente"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Aplicaţii recente"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Buton pentru comutarea metodei de introducere."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Buton zoom pentru compatibilitate."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Faceţi zoom de la o imagine mai mică la una mai mare."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conectarea ca modem prin Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod Avion."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterie: <xliff:g id="NUMBER">%d</xliff:g> procente."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Butonul Setări."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Buton pentru notificări."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Eliminaţi notificarea."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Setări de sistem."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificări."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ştergeţi notificarea."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Se obţine GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter activat."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectat"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Se caută GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Locaţie setată prin GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Ştergeţi toate notificările."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index f1ede40..09f6e6a 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показать уведомления"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Удаление приложения из списка"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Сведения о приложении"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Нет данных"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыть недавние приложения"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"Недавних приложений: 1"</item>
+ <item quantity="other" msgid="1040784359794890744">"Недавних приложений: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нет уведомлений"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текущие"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Уведомления"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ВЫКЛ."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АВТО"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Уведомления"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Недавние"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Новых приложений нет"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Приложения"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Общий модем доступен через Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Настроить способ ввода"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Использовать физическую клавиатуру"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Главная страница"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Последние приложения"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Недавние приложения"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабирования (режим совместимости)"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Уменьшение изображения для увеличения свободного места на экране."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Кнопка вызова настроек."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Кнопка вызова панели уведомлений"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Удалить уведомление."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Настройки системы"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Уведомления"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Удалить уведомление"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Система GPS включена."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Установление связи с GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп включен."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi подключено"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Поиск GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Местоположение установлено с помощью GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Удалить все уведомления"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index ac0bcda..3e99a59 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Zobraziť upozornenia"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrániť zo zoznamu"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informácie o aplikácii"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Žiadne nedávne aplikácie"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odmietnuť nové aplikácie"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 nová aplikácia"</item>
+ <item quantity="other" msgid="1040784359794890744">"Počet nových aplikácií: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žiadne upozornenia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Prebiehajúce"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Upozornenia"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"STLMIŤ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Upozornenia"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Najnovšie"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Žiadne nedávno použité aplikácie."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikácie"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Zdieľané dátové pripojenie cez Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurovať metódy vstupu"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Použiť fyzickú klávesnicu"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Späť"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Plocha"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nedávne aplikácie"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Nové aplikácie"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačidlo prepnutia metódy vstupu."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačidlo úpravy veľkosti z dôvodu kompatibility."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zväčšiť menší obrázok na väčšiu obrazovku."</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Tlačidlo Nastavenia."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Tlačidlo upozornení."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Odstrániť upozornenie."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Nastavenia systému."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Upozornenia."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Vymazať upozornenie."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je povolené."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Prebieha zameriavanie GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhranie TeleTypewriter je povolené."</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: pripojené"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhľadávanie satelitov GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavená pomocou GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazať všetky upozornenia."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 1f8d0d2..312d49b 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaži obvestila"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrani s seznama"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Podatki o programu"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Ni nedavnih programov"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zapre nedavne programe"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 nedavni program"</item>
+ <item quantity="other" msgid="1040784359794890744">"Nedavni programi v %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ni obvestil"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Trenutno"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obvestila"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"TIHO"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"SAMOD."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Obvestila"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Nedavno"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Ni novih programov."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Programi"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Internetna povezava prek Bluetootha"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Nastavitev načinov vnosa"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Uporabi fizično tipkovn."</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Nazaj"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Začetni zaslon"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meni"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nedavna obvestila"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Nedavni programi"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklop načina vnosa."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb povečave za združljivost."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Povečava manjšega na večji zaslon."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internet prek Bluetootha."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način za letalo."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterija <xliff:g id="NUMBER">%d</xliff:g> odstotkov."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Gumb za nastavitve."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Gumb za obvestila."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Odstranite obvestilo."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Sistemske nastavitve."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Obvestila."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Izbriši obvestilo."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS omogočen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Pridobivanje GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter omogočen."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Iskanje GPS-a"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokacija nastavljena z GPS-om"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Izbriši vsa obvestila."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 47f6884..7644d2f 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Приказуј упозорења"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Уклањање са листе"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информације о апликацији"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Нема недавних апликација"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Одбаци недавне апликације"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 недавна апликација"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d недавних апликација"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нема обавештења"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текуће"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Обавештења"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"УГАСИ"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АУТОM."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Обавештења"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Недавно"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Нема недавних апликација"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Веза преко Bluetooth-а"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Конфигуриши методе уноса"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Користи физичку тастатуру"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Почетна"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Мени"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Недавне апликације"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Недавне апликације"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Дугме Промени метод уноса."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Дугме Зум компатибилности."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Зумирање са мањег на већи екран."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth привезивање."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим рада у авиону."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Батерија је на <xliff:g id="NUMBER">%d</xliff:g> посто."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Дугме Подешавања."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Дугме Обавештења."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Уклони обавештење."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Системска подешавања."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Обавештења."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Обриши обавештење."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS је омогућен."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Учитавање GPS-а."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter је омогућен."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi је повезан"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Тражи се GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Локацију је подесио GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Обриши сва обавештења."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index dc1f56b..9bfd79b 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Visa aviseringar"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ta bort från listan"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Inga nya appar"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvisa nya appar"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 ny app"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d nya appar"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Inga aviseringar"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Pågående"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelanden"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"TYST"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Aviseringar"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Senaste"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Inga nya appar."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Appar"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Internetdelning via Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurera inmatningsmetoder"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Använd fysiska tangenter"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Tillbaka"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startsida"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Senaste apparna"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Senaste apparna"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knapp för byte av inmatningsmetod."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knapp för kompatibilitetszoom."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zooma mindre skärm till större."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetdelning via Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flygplansläge"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Knappen Inställningar."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knapp för meddelanden."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Ta bort meddelandet"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Systeminställningar."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Meddelanden."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ta bort meddelandet."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiverad."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Tar emot GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiverad."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi-ansluten"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Sökning efter GPS pågår"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Platsen har identifierats av GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Ta bort alla meddelanden."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index bb8e740..4c66a87 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -25,8 +25,10 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Onyesha arifa"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ondoa kwenye orodha"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Taarifa za programu-matumizi"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Hakuna programu za sasa"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ondosha prog za hivi karibuni"</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for status_bar_accessibility_recent_apps:other (1040784359794890744) -->
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Hakuna arifa"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Inaendelea"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Arifa"</string>
@@ -42,9 +44,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"NYAMAZISHA"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"KIOTOMATIKI"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Arifa"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Za hivi karibuni"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Hakuna programu za hivi karibuni."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Programu"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth imefungwa"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Sanidi mbinu za uingizaji"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Tumia kibodi halisi"</string>
@@ -70,7 +69,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Nyuma"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Nyumbani"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menyu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Programu za hivi karibuni"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Programu za hivi karibuni"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Swichi kitufe cha mbinu ingizi."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kichupo cha kukuza kwa utangamanifu"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kuza kidogo kwa skrini kubwa."</string>
@@ -107,9 +106,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ufungaji wa Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modi ya ndege."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Asilimia <xliff:g id="NUMBER">%d</xliff:g> ya betri"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Mipangilio ya kitufe."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Kitufe cha arifa"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Ondoa arifa"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Mipangilio ya mfumo."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Arifa."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Futa arifa"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPRS imewezeshwa."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPRS inamiliki."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Kichapishaji cha Tele kimewezeshwa."</string>
@@ -125,4 +124,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Mtandao-hewa umeunganishwa"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Inatafuta GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Mahali pamewekwa na GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Futa arifa zote."</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 490760f..412629a 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"แสดงการแจ้งเตือน"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ลบจากรายการ"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ข้อมูลแอปพลิเคชัน"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"ไม่มีแอปพลิเคชันล่าสุด"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ปิดแอปพลิเคชันล่าสุด"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 แอปพลิเคชันล่าสุด"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d แอปพลิเคชันล่าสุด"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ไม่มีการแจ้งเตือน"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ดำเนินอยู่"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"การแจ้งเตือน"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ปิดเสียง"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"อัตโนมัติ"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"การแจ้งเตือน"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"เมื่อเร็วๆ นี้"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"ไม่มีแอปพลิเคชันล่าสุด"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"แอปพลิเคชัน"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"บลูทูธที่ปล่อยสัญญาณ"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"กำหนดค่าวิธีการป้อนข้อมูล"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"ใช้แป้นพิมพ์จริง"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"ย้อนกลับ"</string>
<string name="accessibility_home" msgid="8217216074895377641">"หน้าแรก"</string>
<string name="accessibility_menu" msgid="316839303324695949">"เมนู"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"แอปพลิเคชันล่าสุด"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"แอปพลิเคชันล่าสุด"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ปุ่มสลับวิธีการป้อนข้อมูล"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ปุ่มซูมที่ใช้งานร่วมกันได้"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ซูมหน้าจอให้มีขนาดใหญ่ขึ้น"</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"การปล่อยสัญญาณบลูทูธ"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"โหมดใช้งานบนเครื่องบิน"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"แบตเตอรี่ <xliff:g id="NUMBER">%d</xliff:g> เปอร์เซ็นต์"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"ปุ่มการตั้งค่า"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"ปุ่มแจ้งเตือน"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"นำการแจ้งเตือนออก"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"การตั้งค่าระบบ"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"การแจ้งเตือน"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"ล้างการแจ้งเตือน"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"เปิดใช้งาน GPS แล้ว"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"การดึงข้อมูล GPS"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"เปิดใช้งาน TeleTypewriter อยู่"</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"เชื่อมต่อ Wi-Fi แล้ว"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"กำลังค้นหา GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"ตำแหน่งที่กำหนดโดย GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"ล้างการแจ้งเตือนทั้งหมด"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index f1de297d..6dac32c 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Magpakita ng notification"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alisin mula sa listahan"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Impormasyon ng app"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Walang kamakailang apps"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Huwag pansinin ang kamakailang apps"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 kamakailang app"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d kamakailang apps"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Walang mga notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Nagpapatuloy"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Mga Notification"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Mga Notification"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Kamakailan"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Walang kamakailang mga application."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Na-tether ang bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"I-configure paraan ng input"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Gamitin ang pisikal na keyboard"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Bumalik"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Mga kamakailang application"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Kamakailang apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button na pamamaraan ng pag-input."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Button ng zoom ng pagiging tugma."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Mag-zoom nang mas maliit sa mas malaking screen."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pag-tether ng Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode na eroplano."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterya <xliff:g id="NUMBER">%d</xliff:g> (na) porsyento."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Button ng mga setting."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Button ng mga notification."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Alisin ang notification."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Mga setting ng system."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Mga Notification."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"I-clear ang notification."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Pinapagana ang GPS."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Kumukuha ng GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Pinapagana ang TeleTypewriter."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"nakakonekta ang Wi-Fi"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Naghahanap ng GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasyong itinatakda ng GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"I-clear ang lahat ng notification."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 4dae911..a79eeb0 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Bildirimleri göster"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Listeden kaldır"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Uygulama bilgileri"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Son uygulama yok"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Son uygulamaları kapat"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 tane son uygulama"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d tane son uygulama"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildirim yok"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sürüyor"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirimler"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"KAPAT"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"OTOMTK"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Bildirimler"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"En Son Görevler"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Hiçbir yeni uygulama yok."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Uygulamalar"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth paylaşımı tamam"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Giriş yöntemlerini yapılandır"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Fiziksel klavyeyi kullan"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Geri"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Ana sayfa"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Son uygulamalar"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Son uygulamalar"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Giriş yöntemini değiştirme düğmesi."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyumluluk zum düğmesi."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha büyük ekrana daha küçük yakınlaştır."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth İnternet paylaşımı"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçak modu."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Pil yüzdesi: <xliff:g id="NUMBER">%d</xliff:g>"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Ayarlar düğmesi."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Bildirimler düğmesi."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Bildirimi kaldır."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Sistem ayarları."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Bildirimler."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Bildirimi temizle."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS etkin."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS alınıyor."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter etkin."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Kablosuz bağlandı"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS aranıyor"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Konum GPS ile belirlendi"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Tüm bildirimleri temizle"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index fc90f13..dd11225 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показувати сповіщення"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Видалити зі списку"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Інформація про програму"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Немає останніх програм"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Відхилити останні програми"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 остання програма"</item>
+ <item quantity="other" msgid="1040784359794890744">"останніх програм: %d"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Немає сповіщень"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Поточні"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Сповіщення"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ІГНОР."</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АВТОМ."</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Сповіщення"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Останні"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Немає останніх програм."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Програми"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Створено прив\'язку Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Налаштувати методи введення"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Викор. реальну клавіатуру"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Головна"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Останні програми"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Останні програми"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка перемикання методу введення."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабування сумісності."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Збільшення екрана."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Прив’язка Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим польоту."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Відсотків батареї: <xliff:g id="NUMBER">%d</xliff:g>."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Кнопка налаштувань."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Кнопка сповіщень."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Видалити сповіщення."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Налаштування системи."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Сповіщення."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Очистити сповіщення."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS увімкнено."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Встановлення зв’язку з GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп увімкнено."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi під’єднано"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Виконується пошук GPS-сигналу"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Місцезнаходження встановлено за допомогою GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Очистити всі сповіщення."</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index a4108ac..9282342 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Hiển thị thông báo"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Xóa khỏi danh sách"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Thông tin về ứng dụng"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Không có ứng dụng nào gần đây"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loại bỏ các ứng dụng gần đây"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 ứng dụng gần đây"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d ứng dụng gần đây"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Không có thông báo nào"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Đang diễn ra"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Thông báo"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"TẮT TIẾNG"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"TỰ ĐỘNG"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Thông báo"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Gần đây"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Không có ứng dụng nào gần đây."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Ứng dụng"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth được dùng làm điểm truy cập Internet"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Định cấu hình phương pháp nhập liệu"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Sử dụng bàn phím vật lý"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Quay lại"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Trang chủ"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Trình đơn"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Các ứng dụng gần đây"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Ứng dụng gần đây"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Nút chuyển phương thức nhập."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Nút thu phóng khả năng tương thích."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Thu phóng màn hình lớn hơn hoặc nhỏ hơn."</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Dùng làm điểm truy cập Internet qua Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Chế độ trên máy bay."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> phần trăm pin."</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Nút cài đặt."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Nút thông báo."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Xóa thông báo."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Cài đặt hệ thống"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Thông báo."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Xóa thông báo"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Đã bật GPS."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Nhận GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Đã bật TeleTypewriter."</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Đã kết nối Wi-Fi"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Đang tìm kiếm GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Vị trí đặt bởi GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Xóa tất cả thông báo."</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index b073ac2..5cad35a 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"显示通知"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"从列表中删除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"应用程序信息"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"最近没有运行任何应用程序"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"关闭最近运行的应用程序"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 个最近运行的应用程序"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d 个最近运行的应用程序"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"无通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"正在进行的"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"静音"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"自动"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"通知"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"近期任务"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"没有最近使用的应用程序。"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"应用程序"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"蓝牙已绑定"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"配置输入法"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"使用物理键盘"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"返回"</string>
<string name="accessibility_home" msgid="8217216074895377641">"主屏幕"</string>
<string name="accessibility_menu" msgid="316839303324695949">"菜单"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"最近使用的应用程序"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"最近运行的应用程序"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"输入法切换按钮。"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"兼容性缩放按钮。"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"将小屏幕的图片放大在较大屏幕上显示。"</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"设置按钮。"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"通知按钮。"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"删除通知。"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"系统设置。"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"清除通知。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS 已启用。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"正在获取 GPS 信号。"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"电传打字机已启用。"</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已连接"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜索 GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"已通过 GPS 确定位置"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 1b69790..19a6acc 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"顯示通知"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"從清單中移除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"沒有最近使用的應用程式"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 個最近使用的應用程式"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d 個最近使用的應用程式"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"沒有通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"進行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -42,9 +46,6 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"關閉"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"自動"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"通知"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"最新的"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"沒有最近用過的應用程式。"</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"應用程式"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"已透過 Bluetooth 進行網路共用"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"設定輸入方式"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"使用實體鍵盤"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"返回"</string>
<string name="accessibility_home" msgid="8217216074895377641">"主螢幕"</string>
<string name="accessibility_menu" msgid="316839303324695949">"選單"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"最近使用的應用程式"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"最近使用的應用程式"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"相容性縮放按鈕。"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"將較小螢幕的畫面放大在較大螢幕上顯示。"</string>
@@ -109,9 +110,9 @@
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
- <string name="accessibility_settings_button" msgid="7913780116850379698">"設定按鈕。"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"通知按鈕。"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"移除通知。"</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"系統設定"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"清除通知。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS 已啟用。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"正在取得 GPS 訊號。"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter (TTY) 已啟用。"</string>
@@ -127,4 +128,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜尋 GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"GPS 已定位"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 24c0145..44f9fd1 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -25,8 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Bonisa izaziso"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Susa ohlwini"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ulwazi lwensiza"</string>
- <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
- <skip />
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Azikho izinhlelo zokusebenza zakamuva"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Susa izinsiza zakamumva"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"Insiza eyi-1 yakamumva"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d izinsiza zakamumva"</item>
+ </plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Azikho izaziso"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Okuqhubekayo"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Izaziso"</string>
@@ -42,20 +46,17 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"THULISA"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"OKUZENZAKALELAYO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Izaziso"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"Okwakamuva"</string>
- <string name="recent_tasks_empty" msgid="1905484479067697884">"Azikho izinhlelo zokusebenza zamanje."</string>
- <string name="recent_tasks_app_label" msgid="3796483981246752469">"Izinhlelo zokusebenza"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Ukusebenzisa i-Bluetooth njengemodemu"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Misa izindlela zokufakwayo"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Sebenzisa ikhibhodi ebangekayo"</string>
<string name="usb_device_permission_prompt" msgid="3816016361969816903">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> lufinyelele idivayisi ye-USB?"</string>
- <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuze ufinyelele izinto eziphuma ne-USB?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuze ufinyelele kwizinto eziphuma ne-USB?"</string>
<string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Vula <xliff:g id="ACTIVITY">%1$s</xliff:g> uma ledivayisi ye-USB ixhunyiwe?"</string>
<string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Vula <xliff:g id="ACTIVITY">%1$s</xliff:g> uma le-accessory ye-USB ixhunyiwe"</string>
<string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"Azikho izinhlelo zokusebenza zisebenze ngento ze-USB. Funda okwengeziwe ngalento<xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"ama-accessory e-USB"</string>
<string name="label_view" msgid="6304565553218192990">"Buka"</string>
- <string name="always_use_device" msgid="1450287437017315906">"Sebenzisa ngokuzenzakalelayo yaledivayisi ye-USB"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"Sebenzisa ngokuzenzakalelayo yale divayisi ye-USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Sebenzisa ngokuzenzakalelayo kule-accessory ye-USB"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Sondeza ukugcwalisa isikrini"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Nweba ukugcwalisa isikrini"</string>
@@ -70,7 +71,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Emuva"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Ekhaya"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Imenyu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Izinhlelo zokusebenza zamanje"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Izinhlelo zokusebenza zakamuva"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vula indlela yokungena yenkinobho"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Inkinobho evumelekile yokusondeza"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Sondeza kancane esikrinini esikhudlwana"</string>
@@ -107,9 +108,9 @@
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ukusebenzisa i-Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Imodi yendiza."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Iphesenti <xliff:g id="NUMBER">%d</xliff:g> lebhetri"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Inkinobho yezilungiselelo"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Inkinobho Yezazisp"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Susa Isaziso."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"Izilungiselelo zesistimu"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Izaziso"</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Sula isaziso"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"i-GPS inikwe amandla"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"i-GPS iyafuna"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"i-TeleTypewriter inikwe amandla"</string>
@@ -125,4 +126,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"I-Wi-Fi ixhunyiwe"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Isesha i-GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Indawo ihlelwe i-GPS"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Susa zonke izaziso."</string>
</resources>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 5ba1908..c88d651 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -19,6 +19,7 @@
<resources>
<drawable name="notification_number_text_color">#ffffffff</drawable>
<drawable name="notification_item_background_color">#ff111111</drawable>
+ <drawable name="notification_item_background_color_pressed">#ff257390</drawable>
<drawable name="ticker_background_color">#ff1d1d1d</drawable>
<drawable name="status_bar_background">#ff000000</drawable>
<drawable name="status_bar_recents_background">#b3000000</drawable>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index d0ece6c..830506c 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -30,7 +30,7 @@
<!-- Size of application thumbnail -->
<dimen name="status_bar_recents_thumbnail_width">164dp</dimen>
- <dimen name="status_bar_recents_thumbnail_height">164dp</dimen>
+ <dimen name="status_bar_recents_thumbnail_height">145dp</dimen>
<!-- Size of application label text -->
<dimen name="status_bar_recents_app_label_text_size">16dip</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index b9e6d78..e971896 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -42,9 +42,19 @@
<string name="status_bar_recent_inspect_item_title">App info</string>
<!-- Message shown in the middle of the screen after clicking on the recent apps button
- when there are no recent apps to show [CHAR LIMIT=45]-->
+ when there are no recent apps to show. Also used for accessibility. [CHAR LIMIT=45]-->
<string name="status_bar_no_recent_apps">No recent apps</string>
+ <!-- Content description for the button to dismiss Recent Apps (only present on large
+ devices) -->
+ <string name="status_bar_accessibility_dismiss_recents">Dismiss recent apps</string>
+
+ <!-- Message that is read when you enter recent apps in TalkBack -->
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one">1 recent app</item>
+ <item quantity="other">%d recent apps</item>
+ </plurals>
+
<!-- The label in the bar at the top of the status bar when there are no notifications
showing. [CHAR LIMIT=40]-->
<string name="status_bar_no_notifications_title">No notifications</string>
@@ -109,14 +119,6 @@
<!-- Separator for PLMN and SPN in network name. -->
<string name="status_bar_network_name_separator" translatable="false">"\n"</string>
- <!-- Recent Tasks dialog: title [CHAR LIMIT=30] -->
- <string name="recent_tasks_title">Recent</string>
- <!-- Recent Tasks dialog: message when there are no recent applications [CHAR LIMIT=NONE]-->
- <string name="recent_tasks_empty">No recent applications.</string>
-
- <!-- Recent apps label. Shown as title on recent apps panel -->
- <string name="recent_tasks_app_label">Apps</string>
-
<!-- Network connection string for Bluetooth Reverse Tethering -->
<string name="bluetooth_tethered">Bluetooth tethered</string>
<!-- Title of a button to open the settings for input methods [CHAR LIMIT=30] -->
@@ -187,7 +189,7 @@
<!-- Content description of the menu button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_menu">Menu</string>
<!-- Content description of the recents button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
- <string name="accessibility_recent">Recent applications</string>
+ <string name="accessibility_recent">Recent apps</string>
<!-- Content description of the switch input method button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_ime_switch_button">Switch input method button.</string>
@@ -280,13 +282,13 @@
<string name="accessibility_battery_level">Battery <xliff:g id="number">%d</xliff:g> percent.</string>
<!-- Content description of the button for showing a settings panel in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
- <string name="accessibility_settings_button">Settings button.</string>
+ <string name="accessibility_settings_button">System settings.</string>
<!-- Content description of the button for showing a notifications panel in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
- <string name="accessibility_notifications_button">Notifications button.</string>
+ <string name="accessibility_notifications_button">Notifications.</string>
<!-- Content description of the button for removing a notification in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
- <string name="accessibility_remove_notification">Remove notification.</string>
+ <string name="accessibility_remove_notification">Clear notification.</string>
<!-- Content description of the enabled GPS icon in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_gps_enabled">GPS enabled.</string>
@@ -334,4 +336,6 @@
<!-- Notification text: when GPS has found a fix [CHAR LIMIT=50] -->
<string name="gps_notification_found_text">Location set by GPS</string>
+ <!-- Content description of the clear button in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_clear_all">Clear all notifications.</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/Nyandroid.java b/packages/SystemUI/src/com/android/systemui/Nyandroid.java
new file mode 100644
index 0000000..6f168ba
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/Nyandroid.java
@@ -0,0 +1,253 @@
+/*);
+ * 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.systemui;
+
+import android.animation.AnimatorSet;
+import android.animation.PropertyValuesHolder;
+import android.animation.ObjectAnimator;
+import android.animation.TimeAnimator;
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.AnimationDrawable;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Pair;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import java.util.HashMap;
+import java.util.Random;
+
+public class Nyandroid extends Activity {
+ final static boolean DEBUG = false;
+
+ public static class Board extends FrameLayout
+ {
+ public static final boolean FIXED_STARS = true;
+ public static final int NUM_CATS = 20;
+
+ static Random sRNG = new Random();
+
+ static float lerp(float a, float b, float f) {
+ return (b-a)*f + a;
+ }
+
+ static float randfrange(float a, float b) {
+ return lerp(a, b, sRNG.nextFloat());
+ }
+
+ static int randsign() {
+ return sRNG.nextBoolean() ? 1 : -1;
+ }
+
+ static <E> E pick(E[] array) {
+ if (array.length == 0) return null;
+ return array[sRNG.nextInt(array.length)];
+ }
+
+ public class FlyingCat extends ImageView {
+ public static final float VMAX = 1000.0f;
+ public static final float VMIN = 100.0f;
+
+ public float v, vr;
+
+ public float dist;
+ public float z;
+
+ public ComponentName component;
+
+ public FlyingCat(Context context, AttributeSet as) {
+ super(context, as);
+ setImageResource(R.drawable.nyandroid_anim); // @@@
+
+ if (DEBUG) setBackgroundColor(0x80FF0000);
+ }
+
+ public String toString() {
+ return String.format("<cat (%.1f, %.1f) (%d x %d)>",
+ getX(), getY(), getWidth(), getHeight());
+ }
+
+ public void reset() {
+ final float scale = lerp(0.1f,2f,z);
+ setScaleX(scale); setScaleY(scale);
+
+ setX(-scale*getWidth()+1);
+ setY(randfrange(0, Board.this.getHeight()-scale*getHeight()));
+ v = lerp(VMIN, VMAX, z);
+
+ dist = 0;
+
+// android.util.Log.d("Nyandroid", "reset cat: " + this);
+ }
+
+ public void update(float dt) {
+ dist += v * dt;
+ setX(getX() + v * dt);
+ }
+ }
+
+ TimeAnimator mAnim;
+
+ public Board(Context context, AttributeSet as) {
+ super(context, as);
+
+ setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
+ setBackgroundColor(0xFF003366);
+ }
+
+ private void reset() {
+// android.util.Log.d("Nyandroid", "board reset");
+ removeAllViews();
+
+ final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+
+ if (FIXED_STARS) {
+ for(int i=0; i<20; i++) {
+ ImageView fixedStar = new ImageView(getContext(), null);
+ if (DEBUG) fixedStar.setBackgroundColor(0x8000FF80);
+ fixedStar.setImageResource(R.drawable.star_anim); // @@@
+ addView(fixedStar, wrap);
+ final float scale = randfrange(0.1f, 1f);
+ fixedStar.setScaleX(scale); fixedStar.setScaleY(scale);
+ fixedStar.setX(randfrange(0, getWidth()));
+ fixedStar.setY(randfrange(0, getHeight()));
+ final AnimationDrawable anim = (AnimationDrawable) fixedStar.getDrawable();
+ postDelayed(new Runnable() {
+ public void run() {
+ anim.start();
+ }}, (int) randfrange(0, 1000));
+ }
+ }
+
+ for(int i=0; i<NUM_CATS; i++) {
+ FlyingCat nv = new FlyingCat(getContext(), null);
+ addView(nv, wrap);
+ nv.z = ((float)i/NUM_CATS);
+ nv.z *= nv.z;
+ nv.reset();
+ nv.setX(randfrange(0,Board.this.getWidth()));
+ final AnimationDrawable anim = (AnimationDrawable) nv.getDrawable();
+ postDelayed(new Runnable() {
+ public void run() {
+ anim.start();
+ }}, (int) randfrange(0, 1000));
+ }
+
+ if (mAnim != null) {
+ mAnim.cancel();
+ }
+ mAnim = new TimeAnimator();
+ mAnim.setTimeListener(new TimeAnimator.TimeListener() {
+ public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
+ // setRotation(totalTime * 0.01f); // not as cool as you would think
+// android.util.Log.d("Nyandroid", "t=" + totalTime);
+
+ for (int i=0; i<getChildCount(); i++) {
+ View v = getChildAt(i);
+ if (!(v instanceof FlyingCat)) continue;
+ FlyingCat nv = (FlyingCat) v;
+ nv.update(deltaTime / 1000f);
+ final float catWidth = nv.getWidth() * nv.getScaleX();
+ final float catHeight = nv.getHeight() * nv.getScaleY();
+ if ( nv.getX() + catWidth < -2
+ || nv.getX() > getWidth() + 2
+ || nv.getY() + catHeight < -2
+ || nv.getY() > getHeight() + 2)
+ {
+ nv.reset();
+ }
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void onSizeChanged (int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w,h,oldw,oldh);
+// android.util.Log.d("Nyandroid", "resized: " + w + "x" + h);
+ post(new Runnable() { public void run() {
+ reset();
+ mAnim.start();
+ } });
+ }
+
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mAnim.cancel();
+ }
+
+ @Override
+ public boolean isOpaque() {
+ return true;
+ }
+ }
+
+ private Board mBoard;
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ );
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mBoard = new Board(this, null);
+ setContentView(mBoard);
+
+ mBoard.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
+ @Override
+ public void onSystemUiVisibilityChange(int vis) {
+ if (0 == (vis & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) {
+ Nyandroid.this.finish();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onUserInteraction() {
+// android.util.Log.d("Nyandroid", "finishing on user interaction");
+ finish();
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
index fbf00d2..886a14d 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
@@ -121,6 +121,7 @@
createAnimation(appearing);
mContentView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ mContentView.buildLayer();
mContentAnim.start();
mVisible = appearing;
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java b/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java
new file mode 100644
index 0000000..47aa849
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java
@@ -0,0 +1,309 @@
+/*
+ * 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.systemui.recent;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import android.app.ActivityManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Process;
+import android.os.SystemClock;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.util.LruCache;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.PhoneStatusBar;
+import com.android.systemui.statusbar.tablet.TabletStatusBar;
+
+public class RecentTasksLoader {
+ static final String TAG = "RecentTasksLoader";
+ static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false;
+
+ private static final int DISPLAY_TASKS = 20;
+ private static final int MAX_TASKS = DISPLAY_TASKS + 1; // allow extra for non-apps
+
+ private Context mContext;
+ private RecentsPanelView mRecentsPanel;
+
+ private AsyncTask<Void, Integer, Void> mThumbnailLoader;
+ private final Handler mHandler;
+
+ private int mIconDpi;
+ private Bitmap mDefaultThumbnailBackground;
+
+ public RecentTasksLoader(Context context) {
+ mContext = context;
+
+ final Resources res = context.getResources();
+
+ // get the icon size we want -- on tablets, we use bigger icons
+ boolean isTablet = res.getBoolean(R.bool.config_recents_interface_for_tablets);
+ int density = res.getDisplayMetrics().densityDpi;
+ if (isTablet) {
+ if (density == DisplayMetrics.DENSITY_LOW) {
+ mIconDpi = DisplayMetrics.DENSITY_MEDIUM;
+ } else if (density == DisplayMetrics.DENSITY_MEDIUM) {
+ mIconDpi = DisplayMetrics.DENSITY_HIGH;
+ } else if (density == DisplayMetrics.DENSITY_HIGH) {
+ mIconDpi = DisplayMetrics.DENSITY_XHIGH;
+ } else if (density == DisplayMetrics.DENSITY_XHIGH) {
+ // We'll need to use a denser icon, or some sort of a mipmap
+ mIconDpi = DisplayMetrics.DENSITY_XHIGH;
+ }
+ } else {
+ mIconDpi = res.getDisplayMetrics().densityDpi;
+ }
+ mIconDpi = isTablet ? DisplayMetrics.DENSITY_HIGH : res.getDisplayMetrics().densityDpi;
+
+ // Render the default thumbnail background
+ int width = (int) res.getDimension(R.dimen.status_bar_recents_thumbnail_width);
+ int height = (int) res.getDimension(R.dimen.status_bar_recents_thumbnail_height);
+ int color = res.getColor(R.drawable.status_bar_recents_app_thumbnail_background);
+
+ mDefaultThumbnailBackground = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(mDefaultThumbnailBackground);
+ c.drawColor(color);
+
+ // If we're using the cache, begin listening to the activity manager for
+ // updated thumbnails
+ final ActivityManager am = (ActivityManager)
+ mContext.getSystemService(Context.ACTIVITY_SERVICE);
+
+ mHandler = new Handler();
+ }
+
+ public void setRecentsPanel(RecentsPanelView recentsPanel) {
+ mRecentsPanel = recentsPanel;
+ }
+
+ // Create an TaskDescription, returning null if the title or icon is null, or if it's the
+ // home activity
+ TaskDescription createTaskDescription(int taskId, int persistentTaskId, Intent baseIntent,
+ ComponentName origActivity, CharSequence description, ActivityInfo homeInfo) {
+ Intent intent = new Intent(baseIntent);
+ if (origActivity != null) {
+ intent.setComponent(origActivity);
+ }
+ final PackageManager pm = mContext.getPackageManager();
+ if (homeInfo == null) {
+ homeInfo = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)
+ .resolveActivityInfo(pm, 0);
+ }
+
+ intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
+ | Intent.FLAG_ACTIVITY_NEW_TASK);
+ final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);
+ if (resolveInfo != null) {
+ final ActivityInfo info = resolveInfo.activityInfo;
+ final String title = info.loadLabel(pm).toString();
+ Drawable icon = getFullResIcon(resolveInfo, pm);
+
+ if (title != null && title.length() > 0 && icon != null) {
+ if (DEBUG) Log.v(TAG, "creating activity desc for id="
+ + persistentTaskId + ", label=" + title);
+
+ TaskDescription item = new TaskDescription(taskId,
+ persistentTaskId, resolveInfo, baseIntent, info.packageName,
+ description);
+ item.setLabel(title);
+ item.setIcon(icon);
+
+ // Don't load the current home activity.
+ if (homeInfo != null
+ && homeInfo.packageName.equals(intent.getComponent().getPackageName())
+ && homeInfo.name.equals(intent.getComponent().getClassName())) {
+ return null;
+ }
+
+ return item;
+ } else {
+ if (DEBUG) Log.v(TAG, "SKIPPING item " + persistentTaskId);
+ }
+ }
+ return null;
+ }
+
+ void loadThumbnail(TaskDescription td) {
+ final ActivityManager am = (ActivityManager)
+ mContext.getSystemService(Context.ACTIVITY_SERVICE);
+ ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(td.persistentTaskId);
+
+ if (DEBUG) Log.v(TAG, "Loaded bitmap for task "
+ + td + ": " + thumbs.mainThumbnail);
+ synchronized (td) {
+ if (thumbs != null && thumbs.mainThumbnail != null) {
+ td.setThumbnail(thumbs.mainThumbnail);
+ } else {
+ td.setThumbnail(mDefaultThumbnailBackground);
+ }
+ }
+ }
+
+ Drawable getFullResDefaultActivityIcon() {
+ return getFullResIcon(Resources.getSystem(),
+ com.android.internal.R.mipmap.sym_def_app_icon);
+ }
+
+ Drawable getFullResIcon(Resources resources, int iconId) {
+ try {
+ return resources.getDrawableForDensity(iconId, mIconDpi);
+ } catch (Resources.NotFoundException e) {
+ return getFullResDefaultActivityIcon();
+ }
+ }
+
+ private Drawable getFullResIcon(ResolveInfo info, PackageManager packageManager) {
+ Resources resources;
+ try {
+ resources = packageManager.getResourcesForApplication(
+ info.activityInfo.applicationInfo);
+ } catch (PackageManager.NameNotFoundException e) {
+ resources = null;
+ }
+ if (resources != null) {
+ int iconId = info.activityInfo.getIconResource();
+ if (iconId != 0) {
+ return getFullResIcon(resources, iconId);
+ }
+ }
+ return getFullResDefaultActivityIcon();
+ }
+
+ public void cancelLoadingThumbnails() {
+ if (mThumbnailLoader != null) {
+ mThumbnailLoader.cancel(false);
+ mThumbnailLoader = null;
+ }
+ }
+
+ // return a snapshot of the current list of recent apps
+ ArrayList<TaskDescription> getRecentTasks() {
+ cancelLoadingThumbnails();
+
+ ArrayList<TaskDescription> tasks = new ArrayList<TaskDescription>();
+ final PackageManager pm = mContext.getPackageManager();
+ final ActivityManager am = (ActivityManager)
+ mContext.getSystemService(Context.ACTIVITY_SERVICE);
+
+ final List<ActivityManager.RecentTaskInfo> recentTasks =
+ am.getRecentTasks(MAX_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+
+ ActivityInfo homeInfo = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)
+ .resolveActivityInfo(pm, 0);
+
+ HashSet<Integer> recentTasksToKeepInCache = new HashSet<Integer>();
+ int numTasks = recentTasks.size();
+
+ // skip the first task - assume it's either the home screen or the current activity.
+ final int first = 1;
+ recentTasksToKeepInCache.add(recentTasks.get(0).persistentId);
+ for (int i = first, index = 0; i < numTasks && (index < MAX_TASKS); ++i) {
+ final ActivityManager.RecentTaskInfo recentInfo = recentTasks.get(i);
+
+ TaskDescription item = createTaskDescription(recentInfo.id,
+ recentInfo.persistentId, recentInfo.baseIntent,
+ recentInfo.origActivity, recentInfo.description, homeInfo);
+
+ if (item != null) {
+ tasks.add(item);
+ ++index;
+ }
+ }
+
+ // when we're not using the TaskDescription cache, we load the thumbnails in the
+ // background
+ loadThumbnailsInBackground(new ArrayList<TaskDescription>(tasks));
+ return tasks;
+ }
+
+ private void loadThumbnailsInBackground(final ArrayList<TaskDescription> descriptions) {
+ if (descriptions.size() > 0) {
+ if (DEBUG) Log.v(TAG, "Showing " + descriptions.size() + " tasks");
+ loadThumbnail(descriptions.get(0));
+ if (descriptions.size() > 1) {
+ mThumbnailLoader = new AsyncTask<Void, Integer, Void>() {
+ @Override
+ protected void onProgressUpdate(Integer... values) {
+ final TaskDescription td = descriptions.get(values[0]);
+ if (!isCancelled()) {
+ mRecentsPanel.onTaskThumbnailLoaded(td);
+ }
+ // This is to prevent the loader thread from getting ahead
+ // of our UI updates.
+ mHandler.post(new Runnable() {
+ @Override public void run() {
+ synchronized (td) {
+ td.notifyAll();
+ }
+ }
+ });
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ final int origPri = Process.getThreadPriority(Process.myTid());
+ Process.setThreadPriority(Process.THREAD_GROUP_BG_NONINTERACTIVE);
+ long nextTime = SystemClock.uptimeMillis();
+ for (int i=1; i<descriptions.size(); i++) {
+ TaskDescription td = descriptions.get(i);
+ loadThumbnail(td);
+ long now = SystemClock.uptimeMillis();
+ nextTime += 150;
+ if (nextTime > now) {
+ try {
+ Thread.sleep(nextTime-now);
+ } catch (InterruptedException e) {
+ }
+ }
+
+ if (isCancelled()) {
+ break;
+ }
+ synchronized (td) {
+ publishProgress(i);
+ try {
+ td.wait(500);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ Process.setThreadPriority(origPri);
+ return null;
+ }
+ };
+ mThumbnailLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ }
+ }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
index 1c9d80d..f971d2d 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
@@ -26,19 +26,20 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
+import android.view.View.OnTouchListener;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import com.android.systemui.R;
import com.android.systemui.SwipeHelper;
-import com.android.systemui.recent.RecentsPanelView.ActivityDescriptionAdapter;
+import com.android.systemui.recent.RecentsPanelView.TaskDescriptionAdapter;
public class RecentsHorizontalScrollView extends HorizontalScrollView
implements SwipeHelper.Callback {
private static final String TAG = RecentsPanelView.TAG;
private static final boolean DEBUG = RecentsPanelView.DEBUG;
private LinearLayout mLinearLayout;
- private ActivityDescriptionAdapter mAdapter;
+ private TaskDescriptionAdapter mAdapter;
private RecentsCallback mCallback;
protected int mLastScrollPosition;
private SwipeHelper mSwipeHelper;
@@ -65,6 +66,13 @@
mPerformanceHelper.addViewCallback(view);
}
+ OnTouchListener noOpListener = new OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return true;
+ }
+ };
+
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mCallback.dismiss();
@@ -78,22 +86,25 @@
mCallback.handleOnClick(view);
}
};
+
+ final View thumbnailView = view.findViewById(R.id.app_thumbnail);
OnLongClickListener longClickListener = new OnLongClickListener() {
public boolean onLongClick(View v) {
final View anchorView = view.findViewById(R.id.app_description);
- final View thumbnailView = view.findViewById(R.id.app_thumbnail);
mCallback.handleLongPress(view, anchorView, thumbnailView);
return true;
}
};
- final View thumbnail = view.findViewById(R.id.app_thumbnail);
- thumbnail.setClickable(true);
- thumbnail.setOnClickListener(launchAppListener);
- thumbnail.setOnLongClickListener(longClickListener);
+ thumbnailView.setClickable(true);
+ thumbnailView.setOnClickListener(launchAppListener);
+ thumbnailView.setOnLongClickListener(longClickListener);
+
+ // We don't want to dismiss recents if a user clicks on the app title
+ // (we also don't want to launch the app either, though, because the
+ // app title is a small target and doesn't have great click feedback)
final View appTitle = view.findViewById(R.id.app_label);
- appTitle.setClickable(true);
- appTitle.setOnClickListener(launchAppListener);
- appTitle.setOnLongClickListener(longClickListener);
+ appTitle.setContentDescription(" ");
+ appTitle.setOnTouchListener(noOpListener);
mLinearLayout.addView(view);
}
// Scroll to end after layout.
@@ -293,7 +304,7 @@
}
}
- public void setAdapter(ActivityDescriptionAdapter adapter) {
+ public void setAdapter(TaskDescriptionAdapter adapter) {
mAdapter = adapter;
mAdapter.registerDataSetObserver(new DataSetObserver() {
public void onChanged() {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 54bc4e3..5b4c33e 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -17,35 +17,20 @@
package com.android.systemui.recent;
import java.util.ArrayList;
-import java.util.List;
import android.animation.Animator;
import android.animation.LayoutTransition;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
-import android.content.res.Resources;
import android.graphics.Bitmap;
-import android.graphics.Canvas;
import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.RectF;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.Process;
-import android.os.SystemClock;
import android.provider.Settings;
import android.util.AttributeSet;
-import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -56,7 +41,6 @@
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.PopupMenu;
@@ -64,6 +48,7 @@
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ImageView.ScaleType;
import com.android.systemui.R;
import com.android.systemui.statusbar.StatusBar;
@@ -75,66 +60,24 @@
implements OnItemClickListener, RecentsCallback, StatusBarPanel, Animator.AnimatorListener {
static final String TAG = "RecentsPanelView";
static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false;
- private static final int DISPLAY_TASKS = 20;
- private static final int MAX_TASKS = DISPLAY_TASKS + 1; // allow extra for non-apps
+ private Context mContext;
private StatusBar mBar;
- private ArrayList<ActivityDescription> mActivityDescriptions;
- private AsyncTask<Void, Integer, Void> mThumbnailLoader;
- private int mIconDpi;
private View mRecentsScrim;
private View mRecentsGlowView;
private View mRecentsNoApps;
private ViewGroup mRecentsContainer;
- private Bitmap mDefaultThumbnailBackground;
private boolean mShowing;
private Choreographer mChoreo;
private View mRecentsDismissButton;
- private ActivityDescriptionAdapter mListAdapter;
- private final Handler mHandler = new Handler();
- /* package */ final class ActivityDescription {
- final ActivityManager.RecentTaskInfo recentTaskInfo;
- final ResolveInfo resolveInfo;
- final int taskId; // application task id for curating apps
- final int persistentTaskId; // persistent id
- final Intent intent; // launch intent for application
- final String packageName; // used to override animations (see onClick())
- final int position; // position in list
+ private RecentTasksLoader mRecentTasksLoader;
+ private ArrayList<TaskDescription> mRecentTaskDescriptions;
+ private TaskDescriptionAdapter mListAdapter;
+ private int mThumbnailWidth;
- Matrix matrix; // arbitrary rotation matrix to correct orientation
-
- private Bitmap mThumbnail; // generated by Activity.onCreateThumbnail()
- private Drawable mIcon; // application package icon
- private CharSequence mLabel; // application package label
-
- public ActivityDescription(ActivityManager.RecentTaskInfo _recentInfo,
- ResolveInfo _resolveInfo, Intent _intent,
- int _pos, String _packageName) {
- recentTaskInfo = _recentInfo;
- resolveInfo = _resolveInfo;
- intent = _intent;
- taskId = _recentInfo.id;
- persistentTaskId = _recentInfo.persistentId;
- position = _pos;
- packageName = _packageName;
- }
-
- public CharSequence getLabel() {
- return mLabel;
- }
-
- public Drawable getIcon() {
- return mIcon;
- }
-
- public void setThumbnail(Bitmap thumbnail) {
- mThumbnail = thumbnail;
- }
-
- public Bitmap getThumbnail() {
- return mThumbnail;
- }
+ public void setRecentTasksLoader(RecentTasksLoader loader) {
+ mRecentTasksLoader = loader;
}
private final class OnLongClickDelegate implements View.OnLongClickListener {
@@ -153,18 +96,18 @@
ImageView iconView;
TextView labelView;
TextView descriptionView;
- ActivityDescription activityDescription;
+ TaskDescription taskDescription;
}
- /* package */ final class ActivityDescriptionAdapter extends BaseAdapter {
+ /* package */ final class TaskDescriptionAdapter extends BaseAdapter {
private LayoutInflater mInflater;
- public ActivityDescriptionAdapter(Context context) {
+ public TaskDescriptionAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
- return mActivityDescriptions != null ? mActivityDescriptions.size() : 0;
+ return mRecentTaskDescriptions != null ? mRecentTaskDescriptions.size() : 0;
}
public Object getItem(int position) {
@@ -192,17 +135,15 @@
holder = (ViewHolder) convertView.getTag();
}
- // activityId is reverse since most recent appears at the bottom...
- final int activityId = mActivityDescriptions.size() - position - 1;
+ // index is reverse since most recent appears at the bottom...
+ final int index = mRecentTaskDescriptions.size() - position - 1;
- final ActivityDescription activityDescription = mActivityDescriptions.get(activityId);
- holder.thumbnailViewImage.setImageBitmap(activityDescription.getThumbnail());
- holder.iconView.setImageDrawable(activityDescription.getIcon());
- holder.labelView.setText(activityDescription.getLabel());
- holder.descriptionView.setText(activityDescription.recentTaskInfo.description);
- holder.thumbnailView.setTag(activityDescription);
+ final TaskDescription taskDescription = mRecentTaskDescriptions.get(index);
+ applyTaskDescription(holder, taskDescription, false);
+
+ holder.thumbnailView.setTag(taskDescription);
holder.thumbnailView.setOnLongClickListener(new OnLongClickDelegate(convertView));
- holder.activityDescription = activityDescription;
+ holder.taskDescription = taskDescription;
return convertView;
}
@@ -228,6 +169,30 @@
}
public void show(boolean show, boolean animate) {
+ show(show, animate, null);
+ }
+
+ public void show(boolean show, boolean animate,
+ ArrayList<TaskDescription> recentTaskDescriptions) {
+ if (show) {
+ // Need to update list of recent apps before we set visibility so this view's
+ // content description is updated before it gets focus for TalkBack mode
+ refreshRecentTasksList(recentTaskDescriptions);
+
+ // if there are no apps, either bring up a "No recent apps" message, or just
+ // quit early
+ boolean noApps = (mRecentTaskDescriptions.size() == 0);
+ if (mRecentsNoApps != null) { // doesn't exist on large devices
+ mRecentsNoApps.setVisibility(noApps ? View.VISIBLE : View.INVISIBLE);
+ } else {
+ if (noApps) {
+ if (DEBUG) Log.v(TAG, "Nothing to show");
+ return;
+ }
+ }
+ } else {
+ mRecentTasksLoader.cancelLoadingThumbnails();
+ }
if (animate) {
if (mShowing != show) {
mShowing = show;
@@ -240,6 +205,7 @@
mShowing = show;
setVisibility(show ? View.VISIBLE : View.GONE);
mChoreo.jumpTo(show);
+ onAnimationEnd(null);
}
if (show) {
setFocusable(true);
@@ -283,6 +249,9 @@
createCustomAnimations(transitioner);
} else {
((ViewGroup)mRecentsContainer).setLayoutTransition(null);
+ // Clear memory used by screenshots
+ mRecentTaskDescriptions.clear();
+ mListAdapter.notifyDataSetInvalidated();
}
}
@@ -334,21 +303,13 @@
public RecentsPanelView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ mContext = context;
+ updateValuesFromResources();
+ }
- Resources res = context.getResources();
- boolean xlarge = (res.getConfiguration().screenLayout
- & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE;
-
- mIconDpi = xlarge ? DisplayMetrics.DENSITY_HIGH : res.getDisplayMetrics().densityDpi;
-
- int width = (int) res.getDimension(R.dimen.status_bar_recents_thumbnail_width);
- int height = (int) res.getDimension(R.dimen.status_bar_recents_thumbnail_height);
- int color = res.getColor(R.drawable.status_bar_recents_app_thumbnail_background);
-
- // Render the default thumbnail background
- mDefaultThumbnailBackground = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(mDefaultThumbnailBackground);
- c.drawColor(color);
+ public void updateValuesFromResources() {
+ mThumbnailWidth =
+ (int) mContext.getResources().getDimension(R.dimen.status_bar_recents_thumbnail_width);
}
@Override
@@ -356,7 +317,7 @@
super.onFinishInflate();
mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mRecentsContainer = (ViewGroup) findViewById(R.id.recents_container);
- mListAdapter = new ActivityDescriptionAdapter(mContext);
+ mListAdapter = new TaskDescriptionAdapter(mContext);
if (mRecentsContainer instanceof RecentsHorizontalScrollView){
RecentsHorizontalScrollView scrollView
= (RecentsHorizontalScrollView) mRecentsContainer;
@@ -378,11 +339,13 @@
mRecentsNoApps = findViewById(R.id.recents_no_apps);
mChoreo = new Choreographer(this, mRecentsScrim, mRecentsGlowView, mRecentsNoApps, this);
mRecentsDismissButton = findViewById(R.id.recents_dismiss_button);
- mRecentsDismissButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- hide(true);
- }
- });
+ if (mRecentsDismissButton != null) {
+ mRecentsDismissButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ hide(true);
+ }
+ });
+ }
// In order to save space, we make the background texture repeat in the Y direction
if (mRecentsScrim != null && mRecentsScrim.getBackground() instanceof BitmapDrawable) {
@@ -400,9 +363,6 @@
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (DEBUG) Log.v(TAG, "onVisibilityChanged(" + changedView + ", " + visibility + ")");
- if (visibility == View.VISIBLE && changedView == this) {
- refreshApplicationList();
- }
if (mRecentsContainer instanceof RecentsHorizontalScrollView) {
((RecentsHorizontalScrollView) mRecentsContainer).onRecentsVisibilityChanged();
@@ -413,122 +373,50 @@
}
}
- Drawable getFullResDefaultActivityIcon() {
- return getFullResIcon(Resources.getSystem(),
- com.android.internal.R.mipmap.sym_def_app_icon);
- }
- Drawable getFullResIcon(Resources resources, int iconId) {
- try {
- return resources.getDrawableForDensity(iconId, mIconDpi);
- } catch (Resources.NotFoundException e) {
- return getFullResDefaultActivityIcon();
- }
- }
-
- private Drawable getFullResIcon(ResolveInfo info, PackageManager packageManager) {
- Resources resources;
- try {
- resources = packageManager.getResourcesForApplication(
- info.activityInfo.applicationInfo);
- } catch (PackageManager.NameNotFoundException e) {
- resources = null;
- }
- if (resources != null) {
- int iconId = info.activityInfo.getIconResource();
- if (iconId != 0) {
- return getFullResIcon(resources, iconId);
+ void applyTaskDescription(ViewHolder h, TaskDescription td, boolean anim) {
+ h.iconView.setImageDrawable(td.getIcon());
+ if (h.iconView.getVisibility() != View.VISIBLE) {
+ if (anim) {
+ h.iconView.setAnimation(AnimationUtils.loadAnimation(
+ mContext, R.anim.recent_appear));
}
+ h.iconView.setVisibility(View.VISIBLE);
}
- return getFullResDefaultActivityIcon();
- }
-
- private ArrayList<ActivityDescription> getRecentTasks() {
- ArrayList<ActivityDescription> activityDescriptions = new ArrayList<ActivityDescription>();
- final PackageManager pm = mContext.getPackageManager();
- final ActivityManager am = (ActivityManager)
- mContext.getSystemService(Context.ACTIVITY_SERVICE);
-
- final List<ActivityManager.RecentTaskInfo> recentTasks =
- am.getRecentTasks(MAX_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
-
- ActivityInfo homeInfo = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)
- .resolveActivityInfo(pm, 0);
-
- int numTasks = recentTasks.size();
-
- // skip the first activity - assume it's either the home screen or the current app.
- final int first = 1;
- for (int i = first, index = 0; i < numTasks && (index < MAX_TASKS); ++i) {
- final ActivityManager.RecentTaskInfo recentInfo = recentTasks.get(i);
-
- Intent intent = new Intent(recentInfo.baseIntent);
- if (recentInfo.origActivity != null) {
- intent.setComponent(recentInfo.origActivity);
+ h.labelView.setText(td.getLabel());
+ h.thumbnailView.setContentDescription(td.getLabel());
+ if (h.labelView.getVisibility() != View.VISIBLE) {
+ if (anim) {
+ h.labelView.setAnimation(AnimationUtils.loadAnimation(
+ mContext, R.anim.recent_appear));
}
-
- // Skip the current home activity.
- if (homeInfo != null
- && homeInfo.packageName.equals(intent.getComponent().getPackageName())
- && homeInfo.name.equals(intent.getComponent().getClassName())) {
- continue;
- }
-
- intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
- | Intent.FLAG_ACTIVITY_NEW_TASK);
- final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);
- if (resolveInfo != null) {
- final ActivityInfo info = resolveInfo.activityInfo;
- final String title = info.loadLabel(pm).toString();
- Drawable icon = getFullResIcon(resolveInfo, pm);
- if (title != null && title.length() > 0 && icon != null) {
- if (DEBUG) Log.v(TAG, "creating activity desc for id="
- + recentInfo.id + ", label=" + title);
- ActivityDescription item = new ActivityDescription(recentInfo,
- resolveInfo, intent, index, info.packageName);
- activityDescriptions.add(item);
- ++index;
- } else {
- if (DEBUG) Log.v(TAG, "SKIPPING item " + recentInfo.id);
+ h.labelView.setVisibility(View.VISIBLE);
+ }
+ Bitmap thumbnail = td.getThumbnail();
+ if (thumbnail != null) {
+ // Should remove the default image in the frame
+ // that this now covers, to improve scrolling speed.
+ // That can't be done until the anim is complete though.
+ h.thumbnailViewImage.setImageBitmap(thumbnail);
+ // scale to fill up the full width
+ Matrix scaleMatrix = new Matrix();
+ float scale = mThumbnailWidth / (float) thumbnail.getWidth();
+ scaleMatrix.setScale(scale, scale);
+ h.thumbnailViewImage.setScaleType(ScaleType.MATRIX);
+ h.thumbnailViewImage.setImageMatrix(scaleMatrix);
+ if (h.thumbnailViewImage.getVisibility() != View.VISIBLE) {
+ if (anim) {
+ h.thumbnailViewImage.setAnimation(
+ AnimationUtils.loadAnimation(
+ mContext, R.anim.recent_appear));
}
+ h.thumbnailViewImage.setVisibility(View.VISIBLE);
}
}
- return activityDescriptions;
+ //h.descriptionView.setText(ad.description);
}
- ActivityDescription findActivityDescription(int id)
- {
- ActivityDescription desc = null;
- for (int i = 0; i < mActivityDescriptions.size(); i++) {
- ActivityDescription item = mActivityDescriptions.get(i);
- if (item != null && item.taskId == id) {
- desc = item;
- break;
- }
- }
- return desc;
- }
-
- void loadActivityDescription(ActivityDescription ad, int index) {
- final ActivityManager am = (ActivityManager)
- mContext.getSystemService(Context.ACTIVITY_SERVICE);
- final PackageManager pm = mContext.getPackageManager();
- ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(
- ad.recentTaskInfo.persistentId);
- CharSequence label = ad.resolveInfo.activityInfo.loadLabel(pm);
- Drawable icon = getFullResIcon(ad.resolveInfo, pm);
- if (DEBUG) Log.v(TAG, "Loaded bitmap for #" + index + " in "
- + ad + ": " + thumbs.mainThumbnail);
- synchronized (ad) {
- ad.mLabel = label;
- ad.mIcon = icon;
- if (thumbs != null && thumbs.mainThumbnail != null) {
- ad.setThumbnail(thumbs.mainThumbnail);
- }
- }
- }
-
- void applyActivityDescription(ActivityDescription ad, int index, boolean anim) {
+ void onTaskThumbnailLoaded(TaskDescription ad) {
synchronized (ad) {
if (mRecentsContainer != null) {
ViewGroup container = mRecentsContainer;
@@ -542,34 +430,8 @@
View v = container.getChildAt(i);
if (v.getTag() instanceof ViewHolder) {
ViewHolder h = (ViewHolder)v.getTag();
- if (h.activityDescription == ad) {
- if (DEBUG) Log.v(TAG, "Updatating thumbnail #" + index + " in "
- + h.activityDescription
- + ": " + ad.getThumbnail());
- h.iconView.setImageDrawable(ad.getIcon());
- if (anim) {
- h.iconView.setAnimation(AnimationUtils.loadAnimation(
- mContext, R.anim.recent_appear));
- }
- h.iconView.setVisibility(View.VISIBLE);
- h.labelView.setText(ad.getLabel());
- if (anim) {
- h.labelView.setAnimation(AnimationUtils.loadAnimation(
- mContext, R.anim.recent_appear));
- }
- h.labelView.setVisibility(View.VISIBLE);
- Bitmap thumbnail = ad.getThumbnail();
- if (thumbnail != null) {
- // Should remove the default image in the frame
- // that this now covers, to improve scrolling speed.
- // That can't be done until the anim is complete though.
- h.thumbnailViewImage.setImageBitmap(thumbnail);
- if (anim) {
- h.thumbnailViewImage.setAnimation(AnimationUtils.loadAnimation(
- mContext, R.anim.recent_appear));
- }
- h.thumbnailViewImage.setVisibility(View.VISIBLE);
- }
+ if (h.taskDescription == ad) {
+ applyTaskDescription(h, ad, true);
}
}
}
@@ -577,98 +439,41 @@
}
}
- private void refreshApplicationList() {
- if (mThumbnailLoader != null) {
- mThumbnailLoader.cancel(false);
- mThumbnailLoader = null;
- }
- if (mRecentsNoApps != null) { // doesn't exist on large devices
- mRecentsNoApps.setVisibility(View.INVISIBLE);
- }
- mActivityDescriptions = getRecentTasks();
- for (ActivityDescription ad : mActivityDescriptions) {
- ad.setThumbnail(mDefaultThumbnailBackground);
+ private void refreshRecentTasksList(ArrayList<TaskDescription> recentTasksList) {
+ if (recentTasksList != null) {
+ mRecentTaskDescriptions = recentTasksList;
+ } else {
+ mRecentTaskDescriptions = mRecentTasksLoader.getRecentTasks();
}
mListAdapter.notifyDataSetInvalidated();
- if (mActivityDescriptions.size() > 0) {
- if (DEBUG) Log.v(TAG, "Showing " + mActivityDescriptions.size() + " apps");
- updateUiElements(getResources().getConfiguration());
- final ArrayList<ActivityDescription> descriptions =
- new ArrayList<ActivityDescription>(mActivityDescriptions);
- loadActivityDescription(descriptions.get(0), 0);
- applyActivityDescription(descriptions.get(0), 0, false);
- if (descriptions.size() > 1) {
- mThumbnailLoader = new AsyncTask<Void, Integer, Void>() {
- @Override
- protected void onProgressUpdate(Integer... values) {
- final ActivityDescription ad = descriptions.get(values[0]);
- if (!isCancelled()) {
- applyActivityDescription(ad, values[0], true);
- }
- // This is to prevent the loader thread from getting ahead
- // of our UI updates.
- mHandler.post(new Runnable() {
- @Override public void run() {
- synchronized (ad) {
- ad.notifyAll();
- }
- }
- });
- }
+ updateUiElements(getResources().getConfiguration());
+ }
- @Override
- protected Void doInBackground(Void... params) {
- final int origPri = Process.getThreadPriority(Process.myTid());
- Process.setThreadPriority(Process.THREAD_GROUP_BG_NONINTERACTIVE);
- long nextTime = SystemClock.uptimeMillis();
- for (int i=1; i<descriptions.size(); i++) {
- ActivityDescription ad = descriptions.get(i);
- loadActivityDescription(ad, i);
- long now = SystemClock.uptimeMillis();
- nextTime += 150;
- if (nextTime > now) {
- try {
- Thread.sleep(nextTime-now);
- } catch (InterruptedException e) {
- }
- }
- if (isCancelled()) {
- break;
- }
- synchronized (ad) {
- publishProgress(i);
- try {
- ad.wait(500);
- } catch (InterruptedException e) {
- }
- }
- }
- Process.setThreadPriority(origPri);
- return null;
- }
- };
- mThumbnailLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- } else {
- // Immediately hide this panel
- if (DEBUG) Log.v(TAG, "Nothing to show");
- if (mRecentsNoApps != null) { // doesn't exist on large devices
- mRecentsNoApps.setVisibility(View.VISIBLE);
- } else {
- hide(false);
- }
- }
+ public ArrayList<TaskDescription> getRecentTasksList() {
+ return mRecentTaskDescriptions;
}
private void updateUiElements(Configuration config) {
- final int items = mActivityDescriptions.size();
+ final int items = mRecentTaskDescriptions.size();
mRecentsContainer.setVisibility(items > 0 ? View.VISIBLE : View.GONE);
mRecentsGlowView.setVisibility(items > 0 ? View.VISIBLE : View.GONE);
+
+ // Set description for accessibility
+ int numRecentApps = mRecentTaskDescriptions.size();
+ String recentAppsAccessibilityDescription;
+ if (numRecentApps == 0) {
+ recentAppsAccessibilityDescription =
+ getResources().getString(R.string.status_bar_no_recent_apps);
+ } else {
+ recentAppsAccessibilityDescription = getResources().getQuantityString(
+ R.plurals.status_bar_accessibility_recent_apps, numRecentApps, numRecentApps);
+ }
+ setContentDescription(recentAppsAccessibilityDescription);
}
public void handleOnClick(View view) {
- ActivityDescription ad = ((ViewHolder) view.getTag()).activityDescription;
+ TaskDescription ad = ((ViewHolder) view.getTag()).taskDescription;
final Context context = view.getContext();
final ActivityManager am = (ActivityManager)
context.getSystemService(Context.ACTIVITY_SERVICE);
@@ -690,14 +495,14 @@
}
public void handleSwipe(View view) {
- ActivityDescription ad = ((ViewHolder) view.getTag()).activityDescription;
+ TaskDescription ad = ((ViewHolder) view.getTag()).taskDescription;
if (DEBUG) Log.v(TAG, "Jettison " + ad.getLabel());
- mActivityDescriptions.remove(ad);
+ mRecentTaskDescriptions.remove(ad);
// Handled by widget containers to enable LayoutTransitions properly
// mListAdapter.notifyDataSetChanged();
- if (mActivityDescriptions.size() == 0) {
+ if (mRecentTaskDescriptions.size() == 0) {
hide(false);
}
@@ -727,7 +532,7 @@
} else if (item.getItemId() == R.id.recent_inspect_item) {
ViewHolder viewHolder = (ViewHolder) selectedView.getTag();
if (viewHolder != null) {
- final ActivityDescription ad = viewHolder.activityDescription;
+ final TaskDescription ad = viewHolder.taskDescription;
startApplicationDetailsActivity(ad.packageName);
mBar.animateCollapse();
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
index 213803c..dc13092 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
@@ -31,13 +31,13 @@
import com.android.systemui.R;
import com.android.systemui.SwipeHelper;
-import com.android.systemui.recent.RecentsPanelView.ActivityDescriptionAdapter;
+import com.android.systemui.recent.RecentsPanelView.TaskDescriptionAdapter;
public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper.Callback {
private static final String TAG = RecentsPanelView.TAG;
private static final boolean DEBUG = RecentsPanelView.DEBUG;
private LinearLayout mLinearLayout;
- private ActivityDescriptionAdapter mAdapter;
+ private TaskDescriptionAdapter mAdapter;
private RecentsCallback mCallback;
protected int mLastScrollPosition;
private SwipeHelper mSwipeHelper;
@@ -74,6 +74,13 @@
}
if (old == null) {
+ OnTouchListener noOpListener = new OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return true;
+ }
+ };
+
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mCallback.dismiss();
@@ -87,26 +94,27 @@
mCallback.handleOnClick(view);
}
};
+
+ final View thumbnailView = view.findViewById(R.id.app_thumbnail);
OnLongClickListener longClickListener = new OnLongClickListener() {
public boolean onLongClick(View v) {
final View anchorView = view.findViewById(R.id.app_description);
- final View thumbnailView = view.findViewById(R.id.app_thumbnail);
mCallback.handleLongPress(view, anchorView, thumbnailView);
return true;
}
};
- final View thumbnail = view.findViewById(R.id.app_thumbnail);
- thumbnail.setClickable(true);
- thumbnail.setOnClickListener(launchAppListener);
- thumbnail.setOnLongClickListener(longClickListener);
+ thumbnailView.setClickable(true);
+ thumbnailView.setOnClickListener(launchAppListener);
+ thumbnailView.setOnLongClickListener(longClickListener);
+
+ // We don't want to dismiss recents if a user clicks on the app title
+ // (we also don't want to launch the app either, though, because the
+ // app title is a small target and doesn't have great click feedback)
final View appTitle = view.findViewById(R.id.app_label);
- appTitle.setClickable(true);
- appTitle.setOnClickListener(launchAppListener);
- appTitle.setOnLongClickListener(longClickListener);
+ appTitle.setContentDescription(" ");
+ appTitle.setOnTouchListener(noOpListener);
final View calloutLine = view.findViewById(R.id.recents_callout_line);
- calloutLine.setClickable(true);
- calloutLine.setOnClickListener(launchAppListener);
- calloutLine.setOnLongClickListener(longClickListener);
+ calloutLine.setOnTouchListener(noOpListener);
mLinearLayout.addView(view);
}
}
@@ -311,7 +319,7 @@
}
}
- public void setAdapter(ActivityDescriptionAdapter adapter) {
+ public void setAdapter(TaskDescriptionAdapter adapter) {
mAdapter = adapter;
mAdapter.registerDataSetObserver(new DataSetObserver() {
public void onChanged() {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java b/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java
new file mode 100644
index 0000000..dcfd6d8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java
@@ -0,0 +1,72 @@
+/*
+ * 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.systemui.recent;
+
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+
+public final class TaskDescription {
+ final ResolveInfo resolveInfo;
+ final int taskId; // application task id for curating apps
+ final int persistentTaskId; // persistent id
+ final Intent intent; // launch intent for application
+ final String packageName; // used to override animations (see onClick())
+ final CharSequence description;
+
+ private Bitmap mThumbnail; // generated by Activity.onCreateThumbnail()
+ private Drawable mIcon; // application package icon
+ private CharSequence mLabel; // application package label
+
+ public TaskDescription(int _taskId, int _persistentTaskId,
+ ResolveInfo _resolveInfo, Intent _intent,
+ String _packageName, CharSequence _description) {
+ resolveInfo = _resolveInfo;
+ intent = _intent;
+ taskId = _taskId;
+ persistentTaskId = _persistentTaskId;
+
+ description = _description;
+ packageName = _packageName;
+ }
+
+ // mark all these as locked?
+ public CharSequence getLabel() {
+ return mLabel;
+ }
+
+ public void setLabel(CharSequence label) {
+ mLabel = label;
+ }
+
+ public Drawable getIcon() {
+ return mIcon;
+ }
+
+ public void setIcon(Drawable icon) {
+ mIcon = icon;
+ }
+
+ public void setThumbnail(Bitmap thumbnail) {
+ mThumbnail = thumbnail;
+ }
+
+ public Bitmap getThumbnail() {
+ return mThumbnail;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index c91f513..bf2d5e8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -60,8 +60,7 @@
private static final int MSG_SHOW_IME_BUTTON = 9 << MSG_SHIFT;
private static final int MSG_SET_HARD_KEYBOARD_STATUS = 10 << MSG_SHIFT;
- private static final int MSG_USER_ACTIVITY = 11 << MSG_SHIFT;
- private static final int MSG_TOGGLE_RECENT_APPS = 12 << MSG_SHIFT;
+ private static final int MSG_TOGGLE_RECENT_APPS = 11 << MSG_SHIFT;
private StatusBarIconList mList;
private Callbacks mCallbacks;
@@ -90,7 +89,6 @@
public void topAppWindowChanged(boolean visible);
public void setImeWindowStatus(IBinder token, int vis, int backDisposition);
public void setHardKeyboardStatus(boolean available, boolean enabled);
- public void userActivity();
public void toggleRecentApps();
}
@@ -191,13 +189,6 @@
}
}
- public void userActivity() {
- synchronized (mList) {
- mHandler.removeMessages(MSG_USER_ACTIVITY);
- mHandler.obtainMessage(MSG_USER_ACTIVITY, 0, 0, null).sendToTarget();
- }
- }
-
public void toggleRecentApps() {
synchronized (mList) {
mHandler.removeMessages(MSG_TOGGLE_RECENT_APPS);
@@ -271,9 +262,6 @@
case MSG_SET_HARD_KEYBOARD_STATUS:
mCallbacks.setHardKeyboardStatus(msg.arg1 != 0, msg.arg2 != 0);
break;
- case MSG_USER_ACTIVITY:
- mCallbacks.userActivity();
- break;
case MSG_TOGGLE_RECENT_APPS:
mCallbacks.toggleRecentApps();
break;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 59b09d49..744a46b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -44,6 +44,7 @@
private boolean mMobileVisible = false;
private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0;
private boolean mIsAirplaneMode = false;
+ private String mWifiDescription, mMobileDescription, mMobileTypeDescription;
ViewGroup mWifiGroup, mMobileGroup;
ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType;
@@ -95,20 +96,24 @@
super.onDetachedFromWindow();
}
- public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon) {
+ public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
+ String contentDescription) {
mWifiVisible = visible;
mWifiStrengthId = strengthIcon;
mWifiActivityId = activityIcon;
+ mWifiDescription = contentDescription;
apply();
}
public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
- int typeIcon) {
+ int typeIcon, String contentDescription, String typeContentDescription) {
mMobileVisible = visible;
mMobileStrengthId = strengthIcon;
mMobileActivityId = activityIcon;
mMobileTypeId = typeIcon;
+ mMobileDescription = contentDescription;
+ mMobileTypeDescription = typeContentDescription;
apply();
}
@@ -125,6 +130,7 @@
mWifiGroup.setVisibility(View.VISIBLE);
mWifi.setImageResource(mWifiStrengthId);
mWifiActivity.setImageResource(mWifiActivityId);
+ mWifiGroup.setContentDescription(mWifiDescription);
} else {
mWifiGroup.setVisibility(View.GONE);
}
@@ -139,6 +145,7 @@
mMobile.setImageResource(mMobileStrengthId);
mMobileActivity.setImageResource(mMobileActivityId);
mMobileType.setImageResource(mMobileTypeId);
+ mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription);
} else {
mMobileGroup.setVisibility(View.GONE);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index d260e6d..e3a64a8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -17,9 +17,7 @@
package com.android.systemui.statusbar.phone;
import android.animation.Animator;
-import android.animation.AnimatorSet;
import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.os.ServiceManager;
@@ -27,14 +25,12 @@
import android.util.Slog;
import android.view.animation.AccelerateInterpolator;
import android.view.Display;
-import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Surface;
import android.view.WindowManager;
import android.widget.LinearLayout;
-import android.content.res.Configuration;
import com.android.internal.statusbar.IStatusBarService;
@@ -54,7 +50,6 @@
final Display mDisplay;
View mCurrentView = null;
View[] mRotatedViews = new View[4];
- AnimatorSet mLastAnimator = null;
int mBarSize;
boolean mVertical;
@@ -204,43 +199,6 @@
// bring up the lights no matter what
setLowProfile(false);
-
- if (!ANIMATE_HIDE_TRANSITION) {
- setVisibility(hide ? View.GONE : View.VISIBLE);
- return;
- }
-
- float oldAlpha = mCurrentView.getAlpha();
- if (DEBUG) {
- Slog.d(TAG, "animating alpha: " + oldAlpha + " -> "
- + (!hide ? 1f : 0f));
- }
-
- if (mLastAnimator != null && mLastAnimator.isRunning()) mLastAnimator.cancel();
-
- if (!hide) {
- setVisibility(View.VISIBLE);
- }
-
- // play us off, animatorset
- mLastAnimator = new AnimatorSet();
- mLastAnimator.playTogether(
- ObjectAnimator.ofFloat(mCurrentView, "alpha", hide ? 0f : 1f),
- ObjectAnimator.ofFloat(mCurrentView,
- mVertical ? "translationX" : "translationY",
- hide ? mBarSize : 0)
- );
- mLastAnimator.setDuration(!hide ? 250 : 1000);
- mLastAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator _a) {
- mLastAnimator = null;
- if (hide) {
- setVisibility(View.GONE);
- }
- }
- });
- mLastAnimator.start();
}
public void onFinishInflate() {
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 e5d4d22..e54de59 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -31,12 +31,8 @@
import android.content.res.Resources;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
-import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
-import android.net.Uri;
-import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.Handler;
@@ -78,7 +74,9 @@
import com.android.internal.statusbar.StatusBarNotification;
import com.android.systemui.R;
+import com.android.systemui.recent.RecentTasksLoader;
import com.android.systemui.recent.RecentsPanelView;
+import com.android.systemui.recent.TaskDescription;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.StatusBar;
import com.android.systemui.statusbar.StatusBarIconView;
@@ -87,6 +85,7 @@
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.NetworkController;
+import com.android.systemui.statusbar.policy.NotificationRowLayout;
public class PhoneStatusBar extends StatusBar {
static final String TAG = "PhoneStatusBar";
@@ -103,8 +102,10 @@
static final int EXPANDED_LEAVE_ALONE = -10000;
static final int EXPANDED_FULL_OPEN = -10001;
- private static final int MSG_ANIMATE = 1000;
- private static final int MSG_ANIMATE_REVEAL = 1001;
+ private static final int MSG_ANIMATE = 100;
+ private static final int MSG_ANIMATE_REVEAL = 101;
+ private static final int MSG_OPEN_NOTIFICATION_PANEL = 1000;
+ private static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001;
private static final int MSG_SHOW_INTRUDER = 1002;
private static final int MSG_HIDE_INTRUDER = 1003;
private static final int MSG_OPEN_RECENTS_PANEL = 1020;
@@ -165,7 +166,7 @@
// all notifications
NotificationData mNotificationData = new NotificationData();
- ViewGroup mPile;
+ NotificationRowLayout mPile;
// position
int[] mPositionTmp = new int[2];
@@ -192,8 +193,9 @@
private View mTickerView;
private boolean mTicking;
- // Recent applications
+ // Recent apps
private RecentsPanelView mRecentsPanel;
+ private RecentTasksLoader mRecentTasksLoader;
// Tracking finger for opening/closing.
int mEdgeBorder; // corresponds to R.dimen.status_bar_edge_ignore
@@ -324,7 +326,7 @@
mExpandedDialog = new ExpandedDialog(context);
mExpandedView = expanded;
- mPile = (ViewGroup)expanded.findViewById(R.id.latestItems);
+ mPile = (NotificationRowLayout)expanded.findViewById(R.id.latestItems);
mExpandedContents = mPile; // was: expanded.findViewById(R.id.notificationLinearLayout);
mNoNotificationsTitle = (TextView)expanded.findViewById(R.id.noNotificationsTitle);
mNoNotificationsTitle.setVisibility(View.GONE); // disabling for now
@@ -332,6 +334,7 @@
mClearButton = expanded.findViewById(R.id.clear_all_button);
mClearButton.setOnClickListener(mClearButtonListener);
mClearButton.setAlpha(0f);
+ mClearButton.setEnabled(false);
mDateView = (DateView)expanded.findViewById(R.id.date);
mSettingsButton = expanded.findViewById(R.id.settings_button);
mSettingsButton.setOnClickListener(mSettingsButtonListener);
@@ -363,6 +366,7 @@
signalCluster.setNetworkController(mNetworkController);
// Recents Panel
+ mRecentTasksLoader = new RecentTasksLoader(context);
updateRecentsPanel();
// receive broadcasts
@@ -399,16 +403,21 @@
protected void updateRecentsPanel() {
// Recents Panel
boolean visible = false;
+ ArrayList<TaskDescription> recentTasksList = null;
if (mRecentsPanel != null) {
visible = mRecentsPanel.isShowing();
WindowManagerImpl.getDefault().removeView(mRecentsPanel);
+ if (visible) {
+ recentTasksList = mRecentsPanel.getRecentTasksList();
+ }
}
// Provide RecentsPanelView with a temporary parent to allow layout params to work.
LinearLayout tmpRoot = new LinearLayout(mContext);
mRecentsPanel = (RecentsPanelView) LayoutInflater.from(mContext).inflate(
R.layout.status_bar_recent_panel, tmpRoot, false);
-
+ mRecentsPanel.setRecentTasksLoader(mRecentTasksLoader);
+ mRecentTasksLoader.setRecentsPanel(mRecentsPanel);
mRecentsPanel.setOnTouchListener(new TouchOutsideListener(MSG_CLOSE_RECENTS_PANEL,
mRecentsPanel));
mRecentsPanel.setVisibility(View.GONE);
@@ -417,10 +426,7 @@
WindowManagerImpl.getDefault().addView(mRecentsPanel, lp);
mRecentsPanel.setBar(this);
if (visible) {
- // need to set visibility to View.GONE earlier since that
- // triggers refreshing application list
- mRecentsPanel.setVisibility(View.VISIBLE);
- mRecentsPanel.show(true, false);
+ mRecentsPanel.show(true, false, recentTasksList);
}
}
@@ -470,6 +476,7 @@
0
| WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+ | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
| WindowManager.LayoutParams.FLAG_SLIPPERY,
PixelFormat.OPAQUE);
@@ -1008,6 +1015,7 @@
} else {
mClearButton.setAlpha(clearable ? 1.0f : 0.0f);
}
+ mClearButton.setEnabled(clearable);
/*
if (mNoNotificationsTitle.isShown()) {
@@ -1117,6 +1125,12 @@
case MSG_ANIMATE_REVEAL:
doRevealAnimation();
break;
+ case MSG_OPEN_NOTIFICATION_PANEL:
+ animateExpand();
+ break;
+ case MSG_CLOSE_NOTIFICATION_PANEL:
+ animateCollapse();
+ break;
case MSG_SHOW_INTRUDER:
setIntruderAlertVisibility(true);
break;
@@ -1126,7 +1140,6 @@
case MSG_OPEN_RECENTS_PANEL:
if (DEBUG) Slog.d(TAG, "opening recents panel");
if (mRecentsPanel != null) {
- mRecentsPanel.setVisibility(View.VISIBLE);
mRecentsPanel.show(true, true);
}
break;
@@ -1185,6 +1198,10 @@
}
public void animateCollapse(boolean excludeRecents) {
+ animateCollapse(excludeRecents, 1.0f);
+ }
+
+ public void animateCollapse(boolean excludeRecents, float velocityMultiplier) {
if (SPEW) {
Slog.d(TAG, "animateCollapse(): mExpanded=" + mExpanded
+ " mExpandedVisible=" + mExpandedVisible
@@ -1213,7 +1230,7 @@
// and doesn't try to re-open the windowshade.
mExpanded = true;
prepareTracking(y, false);
- performFling(y, -mSelfCollapseVelocityPx, true);
+ performFling(y, -mSelfCollapseVelocityPx*velocityMultiplier, true);
}
void performExpand() {
@@ -2017,19 +2034,6 @@
}
}
- // The user is not allowed to get stuck without navigation UI. Upon the slightest user
- // interaction we bring the navigation back.
- public void userActivity() {
- if (0 != (mSystemUiVisibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) {
- try {
- mBarService.setSystemUiVisibility(
- mSystemUiVisibility & ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
- } catch (RemoteException ex) {
- // weep softly
- }
- }
- }
-
public void toggleRecentApps() {
int msg = (mRecentsPanel.getVisibility() == View.GONE)
? MSG_OPEN_RECENTS_PANEL : MSG_CLOSE_RECENTS_PANEL;
@@ -2090,13 +2094,57 @@
}
private View.OnClickListener mClearButtonListener = new View.OnClickListener() {
+ final int mini(int a, int b) {
+ return (b>a?a:b);
+ }
public void onClick(View v) {
- try {
- mBarService.onClearAllNotifications();
- } catch (RemoteException ex) {
- // system process is dead if we're here.
+ synchronized (mNotificationData) {
+ // let's also queue up 400ms worth of animated dismissals
+ final int N = mini(5, mPile.getChildCount());
+
+ final ArrayList<View> snapshot = new ArrayList<View>(N);
+ for (int i=0; i<N; i++) {
+ final View child = mPile.getChildAt(i);
+ if (mPile.canChildBeDismissed(child)) snapshot.add(child);
+ }
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ final int ROW_DELAY = 100;
+
+ mHandler.postDelayed(new Runnable() {
+ public void run() {
+ animateCollapse(false, 0f);
+ }
+ }, (N-1) * ROW_DELAY);
+
+ mHandler.postDelayed(new Runnable() {
+ public void run() {
+ try {
+ mBarService.onClearAllNotifications();
+ } catch (RemoteException ex) { }
+ }
+ }, N * ROW_DELAY + 500);
+
+ mPile.setAnimateBounds(false); // temporarily disable some re-layouts
+
+ for (View v : snapshot) {
+ final View _v = v;
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mPile.dismissRowAnimated(_v, (int)(ROW_DELAY*0.25f));
+ }
+ });
+ try {
+ Thread.sleep(ROW_DELAY);
+ } catch (InterruptedException ex) { }
+ }
+
+ mPile.setAnimateBounds(true); // reenable layout animation
+ }
+ }).start();
}
- animateCollapse();
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java
index 5ac5ad0..a31e2a4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java
@@ -22,6 +22,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
+import android.util.Log;
import android.util.Slog;
import android.view.IWindowManager;
import android.widget.CompoundButton;
@@ -63,13 +64,13 @@
try {
IWindowManager wm = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
- ContentResolver cr = mContext.getContentResolver();
if (autorotate) {
wm.thawRotation();
} else {
- wm.freezeRotation();
+ wm.freezeRotation(-1);
}
} catch (RemoteException exc) {
+ Log.w(TAG, "Unable to save auto-rotate setting");
}
}
});
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index c83c470..8d964e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -139,9 +139,10 @@
IBatteryStats mBatteryStats;
public interface SignalCluster {
- void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon);
+ void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
+ String contentDescription);
void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
- int typeIcon);
+ int typeIcon, String contentDescription, String typeContentDescription);
void setIsAirplaneMode(boolean is);
}
@@ -235,12 +236,16 @@
cluster.setWifiIndicators(
mWifiConnected, // only show wifi in the cluster if connected
mWifiIconId,
- mWifiActivityIconId);
+ mWifiActivityIconId,
+ mContentDescriptionWifi);
cluster.setMobileDataIndicators(
mHasMobileDataFeature,
mPhoneSignalIconId,
mMobileActivityIconId,
- mDataTypeIconId);
+ mDataTypeIconId,
+ mContentDescriptionPhoneSignal,
+ mContentDescriptionDataType);
+
}
public void setStackedMode(boolean stacked) {
@@ -786,6 +791,7 @@
mWifiActivityIconId = R.drawable.stat_sys_wifi_inout;
break;
case WifiManager.DATA_ACTIVITY_NONE:
+ mWifiActivityIconId = 0;
break;
}
}
@@ -806,8 +812,8 @@
(mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly()))) {
// Only display the flight-mode icon if not in "emergency calls only" mode.
label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
- mContentDescriptionCombinedSignal = mContext.getString(
- R.string.accessibility_airplane_mode);
+ mContentDescriptionCombinedSignal = mContentDescriptionPhoneSignal
+ = mContext.getString(R.string.accessibility_airplane_mode);
// look again; your radios are now airplanes
mPhoneSignalIconId = mDataSignalIconId = R.drawable.stat_sys_signal_flightmode;
@@ -862,12 +868,15 @@
cluster.setWifiIndicators(
mWifiConnected, // only show wifi in the cluster if connected
mWifiIconId,
- mWifiActivityIconId);
+ mWifiActivityIconId,
+ mContentDescriptionWifi);
cluster.setMobileDataIndicators(
mHasMobileDataFeature,
mPhoneSignalIconId,
mMobileActivityIconId,
- mDataTypeIconId);
+ mDataTypeIconId,
+ mContentDescriptionPhoneSignal,
+ mContentDescriptionDataType);
cluster.setIsAirplaneMode(mAirplaneMode);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
index 06798c6..a7342dc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
@@ -44,11 +44,11 @@
private static final boolean DEBUG = false;
private static final boolean SLOW_ANIMATIONS = DEBUG;
- private static final boolean ANIMATE_LAYOUT = true;
-
private static final int APPEAR_ANIM_LEN = SLOW_ANIMATIONS ? 5000 : 250;
private static final int DISAPPEAR_ANIM_LEN = APPEAR_ANIM_LEN;
+ boolean mAnimateBounds = true;
+
Rect mTmpRect = new Rect();
int mNumRows = 0;
int mRowHeight = 0;
@@ -93,6 +93,10 @@
mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
}
+ public void setAnimateBounds(boolean anim) {
+ mAnimateBounds = anim;
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (DEBUG) Log.v(TAG, "onInterceptTouchEvent()");
@@ -165,7 +169,7 @@
final View childF = child;
- if (ANIMATE_LAYOUT) {
+ if (mAnimateBounds) {
child.setPivotY(0);
final ObjectAnimator alphaFade = ObjectAnimator.ofFloat(child, "alpha", 0f, 1f);
alphaFade.setDuration(APPEAR_ANIM_LEN);
@@ -185,10 +189,18 @@
}
}
+ public void dismissRowAnimated(View child) {
+ dismissRowAnimated(child, 0);
+ }
+
+ public void dismissRowAnimated(View child, int vel) {
+ mSwipeHelper.dismissChild(child, vel);
+ }
+
@Override
public void removeView(View child) {
final View childF = child;
- if (ANIMATE_LAYOUT) {
+ if (mAnimateBounds) {
if (mAppearingViews.containsKey(child)) {
mAppearingViews.remove(child);
}
@@ -264,7 +276,7 @@
mNumRows = numRows;
- if (ANIMATE_LAYOUT && isShown()) {
+ if (mAnimateBounds && isShown()) {
ObjectAnimator.ofInt(this, "forcedHeight", computedHeight)
.setDuration(APPEAR_ANIM_LEN)
.start();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 435aa8c..271e508 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -77,6 +77,7 @@
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.Prefs;
+import com.android.systemui.recent.RecentTasksLoader;
import com.android.systemui.recent.RecentsPanelView;
public class TabletStatusBar extends StatusBar implements
@@ -179,6 +180,7 @@
int mDisabled = 0;
private RecentsPanelView mRecentsPanel;
+ private RecentTasksLoader mRecentTasksLoader;
private InputMethodsPanel mInputMethodsPanel;
private CompatModePanel mCompatModePanel;
@@ -299,12 +301,15 @@
}
// Recents Panel
+ mRecentTasksLoader = new RecentTasksLoader(context);
mRecentsPanel = (RecentsPanelView) View.inflate(context,
R.layout.status_bar_recent_panel, null);
mRecentsPanel.setVisibility(View.GONE);
mRecentsPanel.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK);
mRecentsPanel.setOnTouchListener(new TouchOutsideListener(MSG_CLOSE_RECENTS_PANEL,
mRecentsPanel));
+ mRecentsPanel.setRecentTasksLoader(mRecentTasksLoader);
+ mRecentTasksLoader.setRecentsPanel(mRecentsPanel);
mStatusBarView.setIgnoreChildren(2, mRecentButton, mRecentsPanel);
lp = new WindowManager.LayoutParams(
@@ -392,6 +397,7 @@
mNotificationPanelParams.height = getNotificationPanelHeight();
WindowManagerImpl.getDefault().updateViewLayout(mNotificationPanel,
mNotificationPanelParams);
+ mRecentsPanel.updateValuesFromResources();
}
protected void loadDimens() {
@@ -714,7 +720,6 @@
case MSG_OPEN_RECENTS_PANEL:
if (DEBUG) Slog.d(TAG, "opening recents panel");
if (mRecentsPanel != null) {
- mRecentsPanel.setVisibility(View.VISIBLE);
mRecentsPanel.show(true, true);
}
break;
@@ -1823,9 +1828,6 @@
visibilityChanged(false);
}
- public void userActivity() {
- }
-
public void toggleRecentApps() {
int msg = (mRecentsPanel.getVisibility() == View.GONE)
? MSG_OPEN_RECENTS_PANEL : MSG_CLOSE_RECENTS_PANEL;
diff --git a/packages/VpnDialogs/res/values-am/strings.xml b/packages/VpnDialogs/res/values-am/strings.xml
index 45eaa02..c13c56b 100644
--- a/packages/VpnDialogs/res/values-am/strings.xml
+++ b/packages/VpnDialogs/res/values-am/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"አለያይ"</string>
<string name="session" msgid="6470628549473641030">"ክፍለ ጊዜ፡"</string>
<string name="duration" msgid="3584782459928719435">"ጊዜ"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"ውሂብ ተላልፏል፡"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"ውሂብ ተቀብሏል"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"ተልኳል ለ:"</string>
+ <string name="data_received" msgid="4062776929376067820">"ተቀብሏል፡"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> ባይትስ / <xliff:g id="NUMBER_1">%2$s</xliff:g> ፓኬቶች"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-ar/strings.xml b/packages/VpnDialogs/res/values-ar/strings.xml
index 17b9937..337b2ce 100644
--- a/packages/VpnDialogs/res/values-ar/strings.xml
+++ b/packages/VpnDialogs/res/values-ar/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"قطع الاتصال"</string>
<string name="session" msgid="6470628549473641030">"الجلسة"</string>
<string name="duration" msgid="3584782459928719435">"المدة:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"البيانات المنقولة:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"البيانات المستلمة:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"مرسل:"</string>
+ <string name="data_received" msgid="4062776929376067820">"تم الاستلام:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> بايت / <xliff:g id="NUMBER_1">%2$s</xliff:g> من الحزم"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-bg/strings.xml b/packages/VpnDialogs/res/values-bg/strings.xml
index fc8fbeb..5d186a3 100644
--- a/packages/VpnDialogs/res/values-bg/strings.xml
+++ b/packages/VpnDialogs/res/values-bg/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Изключване"</string>
<string name="session" msgid="6470628549473641030">"Сесия:"</string>
<string name="duration" msgid="3584782459928719435">"Продължителност:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Предадени данни:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Получени данни:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Изпратено:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Получено:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> байта/ <xliff:g id="NUMBER_1">%2$s</xliff:g> пакета"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-cs/strings.xml b/packages/VpnDialogs/res/values-cs/strings.xml
index 00fbe2d..ee737a1 100644
--- a/packages/VpnDialogs/res/values-cs/strings.xml
+++ b/packages/VpnDialogs/res/values-cs/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Odpojit"</string>
<string name="session" msgid="6470628549473641030">"Relace:"</string>
<string name="duration" msgid="3584782459928719435">"Doba trvání:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Odeslaná data:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Přijatá data:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Odesláno:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Přijato:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bajtů / <xliff:g id="NUMBER_1">%2$s</xliff:g> paketů"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-da/strings.xml b/packages/VpnDialogs/res/values-da/strings.xml
index 436c570..2a48a90 100644
--- a/packages/VpnDialogs/res/values-da/strings.xml
+++ b/packages/VpnDialogs/res/values-da/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Fjern tilknytning"</string>
<string name="session" msgid="6470628549473641030">"Session:"</string>
<string name="duration" msgid="3584782459928719435">"Varighed:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data sendt:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Data modtaget:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Sendt:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Modtaget:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> pakker"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-de/strings.xml b/packages/VpnDialogs/res/values-de/strings.xml
index 51690da2..0d2ee85 100644
--- a/packages/VpnDialogs/res/values-de/strings.xml
+++ b/packages/VpnDialogs/res/values-de/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Verbindung trennen"</string>
<string name="session" msgid="6470628549473641030">"Sitzung:"</string>
<string name="duration" msgid="3584782459928719435">"Dauer:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Übertragene Daten:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Empfangene Daten:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Gesendet:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Empfangen:"</string>
<string name="blank_value" msgid="6278484582661984635">"-"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> Byte/<xliff:g id="NUMBER_1">%2$s</xliff:g> Pakete"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-el/strings.xml b/packages/VpnDialogs/res/values-el/strings.xml
index 58abede..b82272a 100644
--- a/packages/VpnDialogs/res/values-el/strings.xml
+++ b/packages/VpnDialogs/res/values-el/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Αποσύνδεση"</string>
<string name="session" msgid="6470628549473641030">"Περίοδος σύνδεσης"</string>
<string name="duration" msgid="3584782459928719435">"Διάρκεια:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Στοιχεία που μεταδόθηκαν:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Δεδομένα που λήφθηκαν:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Στάλθηκε:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Λήφθηκε:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> πακέτα"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-es-rUS/strings.xml b/packages/VpnDialogs/res/values-es-rUS/strings.xml
index 7c563ae..58e72d1 100644
--- a/packages/VpnDialogs/res/values-es-rUS/strings.xml
+++ b/packages/VpnDialogs/res/values-es-rUS/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Desconectar"</string>
<string name="session" msgid="6470628549473641030">"Sesión:"</string>
<string name="duration" msgid="3584782459928719435">"Duración:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Datos transmitidos:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Datos recibidos:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Enviados:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Recibidos:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquetes"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-es/strings.xml b/packages/VpnDialogs/res/values-es/strings.xml
index e957542..79ad80c 100644
--- a/packages/VpnDialogs/res/values-es/strings.xml
+++ b/packages/VpnDialogs/res/values-es/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Desconectar"</string>
<string name="session" msgid="6470628549473641030">"Sesión:"</string>
<string name="duration" msgid="3584782459928719435">"Duración:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Datos transmitidos:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Datos recibidos:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Enviado:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Recibido:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquetes"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-fa/strings.xml b/packages/VpnDialogs/res/values-fa/strings.xml
index d0fe3ff..9a76594 100644
--- a/packages/VpnDialogs/res/values-fa/strings.xml
+++ b/packages/VpnDialogs/res/values-fa/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"قطع اتصال"</string>
<string name="session" msgid="6470628549473641030">"جلسه:"</string>
<string name="duration" msgid="3584782459928719435">"مدت زمان:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"دادههای منتقل شده:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"داده دریافت شده:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"ارسال شده:"</string>
+ <string name="data_received" msgid="4062776929376067820">"دریافتی:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> بایت / <xliff:g id="NUMBER_1">%2$s</xliff:g> بسته"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-fi/strings.xml b/packages/VpnDialogs/res/values-fi/strings.xml
index e2f30ef..c8d830c 100644
--- a/packages/VpnDialogs/res/values-fi/strings.xml
+++ b/packages/VpnDialogs/res/values-fi/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Katkaise yhteys"</string>
<string name="session" msgid="6470628549473641030">"Käyttökerta"</string>
<string name="duration" msgid="3584782459928719435">"Kesto:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Siirretyt tiedot:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Vastaanotetut tiedot:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Lähetetty:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Vastaanotettu:"</string>
<string name="blank_value" msgid="6278484582661984635">"-"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> tavua / <xliff:g id="NUMBER_1">%2$s</xliff:g> pakettia"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-fr/strings.xml b/packages/VpnDialogs/res/values-fr/strings.xml
index 16b8c8f..e38c1a2 100644
--- a/packages/VpnDialogs/res/values-fr/strings.xml
+++ b/packages/VpnDialogs/res/values-fr/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Déconnecter"</string>
<string name="session" msgid="6470628549473641030">"Session :"</string>
<string name="duration" msgid="3584782459928719435">"Durée :"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Données transmises :"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Données reçues :"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Envoyé :"</string>
+ <string name="data_received" msgid="4062776929376067820">"Reçu :"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> octets / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquets"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-hr/strings.xml b/packages/VpnDialogs/res/values-hr/strings.xml
index 9eabfff..cdbffbc 100644
--- a/packages/VpnDialogs/res/values-hr/strings.xml
+++ b/packages/VpnDialogs/res/values-hr/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Prekini vezu"</string>
<string name="session" msgid="6470628549473641030">"Sesija"</string>
<string name="duration" msgid="3584782459928719435">"Trajanje:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Preneseno podataka:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Primljeni podaci:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Poslano:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Primljeno:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"Bajtova: <xliff:g id="NUMBER_0">%1$s</xliff:g>/paketa: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-hu/strings.xml b/packages/VpnDialogs/res/values-hu/strings.xml
index 5872046..a268402 100644
--- a/packages/VpnDialogs/res/values-hu/strings.xml
+++ b/packages/VpnDialogs/res/values-hu/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Kapcsolat bontása"</string>
<string name="session" msgid="6470628549473641030">"Munkamenet:"</string>
<string name="duration" msgid="3584782459928719435">"Időtartam:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Továbbított adatok:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Fogadott adatok:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Elküldve:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Érkezett:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bájt/<xliff:g id="NUMBER_1">%2$s</xliff:g> adatcsomag"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-in/strings.xml b/packages/VpnDialogs/res/values-in/strings.xml
index 9a985e6..1721d68 100644
--- a/packages/VpnDialogs/res/values-in/strings.xml
+++ b/packages/VpnDialogs/res/values-in/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Putuskan sambungan"</string>
<string name="session" msgid="6470628549473641030">"Sesi:"</string>
<string name="duration" msgid="3584782459928719435">"Durasi:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data yang Dikirimkan:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Data Diterima:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Terkirim:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Diterima:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-iw/strings.xml b/packages/VpnDialogs/res/values-iw/strings.xml
index 093015a..4b8d125 100644
--- a/packages/VpnDialogs/res/values-iw/strings.xml
+++ b/packages/VpnDialogs/res/values-iw/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"נתק"</string>
<string name="session" msgid="6470628549473641030">"הפעלה"</string>
<string name="duration" msgid="3584782459928719435">"משך:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"הנתונים המועברים:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"הנתונים שהתקבלו:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"נשלח:"</string>
+ <string name="data_received" msgid="4062776929376067820">"התקבל:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> בתים / <xliff:g id="NUMBER_1">%2$s</xliff:g> מנות"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-ja/strings.xml b/packages/VpnDialogs/res/values-ja/strings.xml
index d5f97e5..751162f 100644
--- a/packages/VpnDialogs/res/values-ja/strings.xml
+++ b/packages/VpnDialogs/res/values-ja/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"切断"</string>
<string name="session" msgid="6470628549473641030">"セッション:"</string>
<string name="duration" msgid="3584782459928719435">"期間:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"送信されたデータ:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"受信したデータ:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"送信:"</string>
+ <string name="data_received" msgid="4062776929376067820">"受信:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g>バイト/<xliff:g id="NUMBER_1">%2$s</xliff:g>パケット"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-ko/strings.xml b/packages/VpnDialogs/res/values-ko/strings.xml
index 6c99f7b..cfc4ffc 100644
--- a/packages/VpnDialogs/res/values-ko/strings.xml
+++ b/packages/VpnDialogs/res/values-ko/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"연결 끊기"</string>
<string name="session" msgid="6470628549473641030">"세션:"</string>
<string name="duration" msgid="3584782459928719435">"기간:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"전송된 데이터:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"수신된 데이터:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"보냄:"</string>
+ <string name="data_received" msgid="4062776929376067820">"수신됨:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g>바이트/<xliff:g id="NUMBER_1">%2$s</xliff:g>패킷"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-lt/strings.xml b/packages/VpnDialogs/res/values-lt/strings.xml
index ae8573b..e70c5e8 100644
--- a/packages/VpnDialogs/res/values-lt/strings.xml
+++ b/packages/VpnDialogs/res/values-lt/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Atsijungti"</string>
<string name="session" msgid="6470628549473641030">"Sesija"</string>
<string name="duration" msgid="3584782459928719435">"Trukmė:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Duomenys perduodami:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Gauti duomenys:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Išsiųsta"</string>
+ <string name="data_received" msgid="4062776929376067820">"Gauta"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"Baitų: <xliff:g id="NUMBER_0">%1$s</xliff:g> baitų / paketų: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-lv/strings.xml b/packages/VpnDialogs/res/values-lv/strings.xml
index 88ff8bb..2e1a9f7c 100644
--- a/packages/VpnDialogs/res/values-lv/strings.xml
+++ b/packages/VpnDialogs/res/values-lv/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Pārtraukt savienojumu"</string>
<string name="session" msgid="6470628549473641030">"Sesija:"</string>
<string name="duration" msgid="3584782459928719435">"Ilgums:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Nosūtītie dati:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Saņemtie dati:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Nosūtīts:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Saņemts:"</string>
<string name="blank_value" msgid="6278484582661984635">"—"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> baiti/<xliff:g id="NUMBER_1">%2$s</xliff:g> paketes"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-ms/strings.xml b/packages/VpnDialogs/res/values-ms/strings.xml
index 63d0da3..f17d851 100644
--- a/packages/VpnDialogs/res/values-ms/strings.xml
+++ b/packages/VpnDialogs/res/values-ms/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Putuskan sambungan"</string>
<string name="session" msgid="6470628549473641030">"Sesi:"</string>
<string name="duration" msgid="3584782459928719435">"Tempoh:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data yang Dihantarkan:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Data yang Diterima:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Dihantar:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Diterima:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bait / <xliff:g id="NUMBER_1">%2$s</xliff:g> bingkisan"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-nb/strings.xml b/packages/VpnDialogs/res/values-nb/strings.xml
index f469cce..fbd9185 100644
--- a/packages/VpnDialogs/res/values-nb/strings.xml
+++ b/packages/VpnDialogs/res/values-nb/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Koble fra"</string>
<string name="session" msgid="6470628549473641030">"Økt:"</string>
<string name="duration" msgid="3584782459928719435">"Varighet:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data overført:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Data mottatt:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Sendt:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Mottatt:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> pakker"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-nl/strings.xml b/packages/VpnDialogs/res/values-nl/strings.xml
index 807704c..7f6e0b1 100644
--- a/packages/VpnDialogs/res/values-nl/strings.xml
+++ b/packages/VpnDialogs/res/values-nl/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Verbinding verbreken"</string>
<string name="session" msgid="6470628549473641030">"Sessie:"</string>
<string name="duration" msgid="3584782459928719435">"Duur:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Verzonden gegevens:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Ontvangen gegevens:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Verzonden:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Ontvangen:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes/<xliff:g id="NUMBER_1">%2$s</xliff:g> pakketten"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-pl/strings.xml b/packages/VpnDialogs/res/values-pl/strings.xml
index 207c82d..80c5a7c 100644
--- a/packages/VpnDialogs/res/values-pl/strings.xml
+++ b/packages/VpnDialogs/res/values-pl/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Rozłącz"</string>
<string name="session" msgid="6470628549473641030">"Sesja:"</string>
<string name="duration" msgid="3584782459928719435">"Czas trwania:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Dane przesłane:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Dane odebrane:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Wysłano:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Odebrano:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"Bajty: <xliff:g id="NUMBER_0">%1$s</xliff:g> / pakiety: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-pt-rPT/strings.xml b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
index 960a100..e25ef66 100644
--- a/packages/VpnDialogs/res/values-pt-rPT/strings.xml
+++ b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Desligar"</string>
<string name="session" msgid="6470628549473641030">"Sessão"</string>
<string name="duration" msgid="3584782459928719435">"Duração:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Dados Transmitidos:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Dados Recebidos:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Enviados:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Recebidos:"</string>
<string name="blank_value" msgid="6278484582661984635">"-"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> pacotes"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-pt/strings.xml b/packages/VpnDialogs/res/values-pt/strings.xml
index 92bd1a2..8a16e87 100644
--- a/packages/VpnDialogs/res/values-pt/strings.xml
+++ b/packages/VpnDialogs/res/values-pt/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Desconectar"</string>
<string name="session" msgid="6470628549473641030">"Sessão:"</string>
<string name="duration" msgid="3584782459928719435">"Duração:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Dados transmitidos:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Dados recebidos:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Enviado:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Recebido:"</string>
<string name="blank_value" msgid="6278484582661984635">"-"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes/<xliff:g id="NUMBER_1">%2$s</xliff:g> pacotes"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-ro/strings.xml b/packages/VpnDialogs/res/values-ro/strings.xml
index fa79ae1..5b71cfa 100644
--- a/packages/VpnDialogs/res/values-ro/strings.xml
+++ b/packages/VpnDialogs/res/values-ro/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Deconectaţi"</string>
<string name="session" msgid="6470628549473641030">"Sesiune:"</string>
<string name="duration" msgid="3584782459928719435">"Durată:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Date transmise:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Date primite:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Trimise:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Primite:"</string>
<string name="blank_value" msgid="6278484582661984635">"-"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> (de) octeţi/<xliff:g id="NUMBER_1">%2$s</xliff:g> (de) pachete"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-ru/strings.xml b/packages/VpnDialogs/res/values-ru/strings.xml
index a3888fc..411c51a 100644
--- a/packages/VpnDialogs/res/values-ru/strings.xml
+++ b/packages/VpnDialogs/res/values-ru/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Разъединить"</string>
<string name="session" msgid="6470628549473641030">"Сеанс:"</string>
<string name="duration" msgid="3584782459928719435">"Продолжительность:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Отправлено:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Получено:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Отправлено:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Получено:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> Б; пакетов: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-sk/strings.xml b/packages/VpnDialogs/res/values-sk/strings.xml
index 77090aa..733efd4 100644
--- a/packages/VpnDialogs/res/values-sk/strings.xml
+++ b/packages/VpnDialogs/res/values-sk/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Odpojiť"</string>
<string name="session" msgid="6470628549473641030">"Relácia"</string>
<string name="duration" msgid="3584782459928719435">"Trvanie:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Prenášané údaje:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Prijaté dáta:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Odoslané:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Prijaté:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> B/<xliff:g id="NUMBER_1">%2$s</xliff:g> paketov"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-sl/strings.xml b/packages/VpnDialogs/res/values-sl/strings.xml
index 1dda8b2f..92806fc 100644
--- a/packages/VpnDialogs/res/values-sl/strings.xml
+++ b/packages/VpnDialogs/res/values-sl/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Prekini povezavo"</string>
<string name="session" msgid="6470628549473641030">"Seja:"</string>
<string name="duration" msgid="3584782459928719435">"Trajanje:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Preneseni podatki:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Prejeti podatki:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Poslano:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Prejeto:"</string>
<string name="blank_value" msgid="6278484582661984635">"-"</string>
<string name="data_value_format" msgid="2192466557826897580">"Št. bajtov: <xliff:g id="NUMBER_0">%1$s</xliff:g>/št. paketov: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-sr/strings.xml b/packages/VpnDialogs/res/values-sr/strings.xml
index 3274e5e..425ee89 100644
--- a/packages/VpnDialogs/res/values-sr/strings.xml
+++ b/packages/VpnDialogs/res/values-sr/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Прекини везу"</string>
<string name="session" msgid="6470628549473641030">"Сесија:"</string>
<string name="duration" msgid="3584782459928719435">"Трајање:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Пренесени подаци:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Примљени подаци:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Послато:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Примљенo:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> бајт(ов)а / <xliff:g id="NUMBER_1">%2$s</xliff:g> пакета"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-sv/strings.xml b/packages/VpnDialogs/res/values-sv/strings.xml
index 3c9ef6a..7cec26c 100644
--- a/packages/VpnDialogs/res/values-sv/strings.xml
+++ b/packages/VpnDialogs/res/values-sv/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Koppla från"</string>
<string name="session" msgid="6470628549473641030">"Session:"</string>
<string name="duration" msgid="3584782459928719435">"Längd:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data som överförs:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Mottagna data:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Skickat:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Mottaget:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte/<xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-sw/strings.xml b/packages/VpnDialogs/res/values-sw/strings.xml
index 87b592c..4607728 100644
--- a/packages/VpnDialogs/res/values-sw/strings.xml
+++ b/packages/VpnDialogs/res/values-sw/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Tenganisha"</string>
<string name="session" msgid="6470628549473641030">"Kipindi:"</string>
<string name="duration" msgid="3584782459928719435">"Muda:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data Zilizopitishwa:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Data Iliyopokewa:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Zilizotumwa:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Imepokelewa:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"baiti <xliff:g id="NUMBER_0">%1$s</xliff:g> / pakiti <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-th/strings.xml b/packages/VpnDialogs/res/values-th/strings.xml
index 17360c8..2e9f6f9 100644
--- a/packages/VpnDialogs/res/values-th/strings.xml
+++ b/packages/VpnDialogs/res/values-th/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"ยกเลิกการเชื่อมต่อ"</string>
<string name="session" msgid="6470628549473641030">"เซสชัน"</string>
<string name="duration" msgid="3584782459928719435">"ระยะเวลา:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"ข้อมูลที่ส่ง:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"ข้อมูลที่ได้รับ:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"ส่งแล้ว:"</string>
+ <string name="data_received" msgid="4062776929376067820">"รับแล้ว:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> ไบต์/<xliff:g id="NUMBER_1">%2$s</xliff:g> แพ็คเก็ต"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-tl/strings.xml b/packages/VpnDialogs/res/values-tl/strings.xml
index 7a6b3c0..4826d8f 100644
--- a/packages/VpnDialogs/res/values-tl/strings.xml
+++ b/packages/VpnDialogs/res/values-tl/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Idiskonekta"</string>
<string name="session" msgid="6470628549473641030">"Session:"</string>
<string name="duration" msgid="3584782459928719435">"Tagal:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Naipadalang Data:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Natanggap na Data:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Ipinadala:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Natanggap:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> (na) byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> (na) packet"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-tr/strings.xml b/packages/VpnDialogs/res/values-tr/strings.xml
index 9e7d1e0..f4fd967 100644
--- a/packages/VpnDialogs/res/values-tr/strings.xml
+++ b/packages/VpnDialogs/res/values-tr/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Bağlantıyı kes"</string>
<string name="session" msgid="6470628549473641030">"Oturum:"</string>
<string name="duration" msgid="3584782459928719435">"Süre:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"İletilen Veriler:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Alınan Veriler:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Gönderilen:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Alınan:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bayt / <xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-uk/strings.xml b/packages/VpnDialogs/res/values-uk/strings.xml
index bdb2435..a12bfea 100644
--- a/packages/VpnDialogs/res/values-uk/strings.xml
+++ b/packages/VpnDialogs/res/values-uk/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Від’єднати"</string>
<string name="session" msgid="6470628549473641030">"Сеанс:"</string>
<string name="duration" msgid="3584782459928719435">"Тривалість:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Передані дані:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Отримані дані:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Надіслано:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Отримано:"</string>
<string name="blank_value" msgid="6278484582661984635">"–"</string>
<string name="data_value_format" msgid="2192466557826897580">"Байтів: <xliff:g id="NUMBER_0">%1$s</xliff:g> / пакетів: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-vi/strings.xml b/packages/VpnDialogs/res/values-vi/strings.xml
index 7e10a73..eab3812 100644
--- a/packages/VpnDialogs/res/values-vi/strings.xml
+++ b/packages/VpnDialogs/res/values-vi/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Ngắt kết nối"</string>
<string name="session" msgid="6470628549473641030">"Phiên"</string>
<string name="duration" msgid="3584782459928719435">"Thời lượng:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Đã truyền dữ liệu:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Đã nhận dữ liệu:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Đã gửi:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Đã nhận:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> gói"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-zh-rCN/strings.xml b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
index f9294e3..24774eb 100644
--- a/packages/VpnDialogs/res/values-zh-rCN/strings.xml
+++ b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"断开连接"</string>
<string name="session" msgid="6470628549473641030">"会话:"</string>
<string name="duration" msgid="3584782459928719435">"时长:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"传输的数据:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"收到的数据:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"已发送:"</string>
+ <string name="data_received" msgid="4062776929376067820">"已接收:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> 字节/<xliff:g id="NUMBER_1">%2$s</xliff:g> 个数据包"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-zh-rTW/strings.xml b/packages/VpnDialogs/res/values-zh-rTW/strings.xml
index 5a39ca5..f7663c2 100644
--- a/packages/VpnDialogs/res/values-zh-rTW/strings.xml
+++ b/packages/VpnDialogs/res/values-zh-rTW/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"中斷連線"</string>
<string name="session" msgid="6470628549473641030">"工作階段:"</string>
<string name="duration" msgid="3584782459928719435">"持續時間:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"已傳輸的數據:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"已接收的數據:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"已傳送:"</string>
+ <string name="data_received" msgid="4062776929376067820">"已接收:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> 位元組 / <xliff:g id="NUMBER_1">%2$s</xliff:g> 個封包"</string>
</resources>
diff --git a/packages/VpnDialogs/res/values-zu/strings.xml b/packages/VpnDialogs/res/values-zu/strings.xml
index 492d3ff..67eeeb9 100644
--- a/packages/VpnDialogs/res/values-zu/strings.xml
+++ b/packages/VpnDialogs/res/values-zu/strings.xml
@@ -24,8 +24,8 @@
<string name="disconnect" msgid="971412338304200056">"Ayixhumekile kwi-inthanethi"</string>
<string name="session" msgid="6470628549473641030">"Iseshini:"</string>
<string name="duration" msgid="3584782459928719435">"Ubude besikhathi:"</string>
- <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Idatha Ithunyelwe:"</string>
- <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Idatha Etholiwe:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"Thunyelwe:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Okwamukelwe:"</string>
<string name="blank_value" msgid="6278484582661984635">"--"</string>
<string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> amaphakethe/ <xliff:g id="NUMBER_1">%2$s</xliff:g> amabhayithi"</string>
</resources>
diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java
index 8569143..11b6c15 100644
--- a/policy/src/com/android/internal/policy/impl/GlobalActions.java
+++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java
@@ -18,7 +18,6 @@
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -57,8 +56,6 @@
private static final String TAG = "GlobalActions";
- private StatusBarManager mStatusBar;
-
private final Context mContext;
private final AudioManager mAudioManager;
@@ -103,13 +100,12 @@
mKeyguardShowing = keyguardShowing;
mDeviceProvisioned = isDeviceProvisioned;
if (mDialog == null) {
- mStatusBar = (StatusBarManager)mContext.getSystemService(Context.STATUS_BAR_SERVICE);
mDialog = createDialog();
}
prepareDialog();
- mStatusBar.disable(StatusBarManager.DISABLE_EXPAND);
mDialog.show();
+ mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);
}
/**
@@ -249,7 +245,6 @@
/** {@inheritDoc} */
public void onDismiss(DialogInterface dialog) {
- mStatusBar.disable(StatusBarManager.DISABLE_NONE);
}
/** {@inheritDoc} */
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
index 24dce1a..8343bbd 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
@@ -186,6 +186,9 @@
mTransientTextManager = new TransientTextManager(mCarrierView);
+ mUpdateMonitor.registerInfoCallback(mInfoCallback);
+ mUpdateMonitor.registerSimStateCallback(mSimStateCallback);
+
resetStatusInfo();
refreshDate();
updateOwnerInfo();
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
index 10cf3aa..f67f0e0 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
@@ -218,7 +218,7 @@
// take a guess to start
mSimState = IccCard.State.READY;
- mBatteryStatus = BATTERY_STATUS_FULL;
+ mBatteryStatus = BATTERY_STATUS_UNKNOWN;
mBatteryLevel = 100;
mTelephonyPlmn = getDefaultPlmn();
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
index 3dae5ad..c25e3ca 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -31,9 +31,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
+import android.media.SoundPool;
import android.os.Handler;
import android.os.LocalPowerManager;
import android.os.Message;
@@ -149,8 +147,16 @@
*/
private static final boolean ENABLE_INSECURE_STATUS_BAR_EXPAND = true;
+ /** The stream type that the lock sounds are tied to. */
+ private static final int MASTER_STREAM_TYPE = AudioManager.STREAM_RING;
+ /** Minimum volume for lock sounds, as a ratio of max MASTER_STREAM_TYPE */
+ final float MIN_LOCK_VOLUME = 0.05f;
+ /** Maximum volume for lock sounds, as a ratio of max MASTER_STREAM_TYPE */
+ final float MAX_LOCK_VOLUME = 0.4f;
+
private Context mContext;
private AlarmManager mAlarmManager;
+ private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
private boolean mShowLockIcon;
private boolean mShowingLockIcon;
@@ -253,6 +259,12 @@
private boolean mWaitingUntilKeyguardVisible = false;
private LockPatternUtils mLockPatternUtils;
+ private SoundPool mLockSounds;
+ private int mLockSoundId;
+ private int mUnlockSoundId;
+ private int mLockSoundStreamId;
+ private int mMasterStreamMaxVolume;
+
public KeyguardViewMediator(Context context, PhoneWindowManager callback,
LocalPowerManager powerManager) {
mContext = context;
@@ -298,6 +310,22 @@
final ContentResolver cr = mContext.getContentResolver();
mShowLockIcon = (Settings.System.getInt(cr, "show_status_bar_lock", 0) == 1);
+
+ mLockSounds = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
+ String soundPath = Settings.System.getString(cr, Settings.System.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.System.getString(cr, Settings.System.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);
+ }
}
/**
@@ -1042,31 +1070,33 @@
}
final ContentResolver cr = mContext.getContentResolver();
- if (Settings.System.getInt(cr, Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 1) == 1)
- {
- final String whichSound = locked
- ? Settings.System.LOCK_SOUND
- : Settings.System.UNLOCK_SOUND;
- final String soundPath = Settings.System.getString(cr, whichSound);
- if (soundPath != null) {
- final Uri soundUri = Uri.parse("file://" + soundPath);
- if (soundUri != null) {
- final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
- if (sfx != null) {
- sfx.setStreamType(AudioManager.STREAM_SYSTEM);
- sfx.setWakeMode(mContext, PowerManager.PARTIAL_WAKE_LOCK);
- sfx.play();
- } else {
- if (DEBUG) Log.d(TAG, "playSounds: failed to load ringtone from uri: "
- + soundUri);
- }
- } else {
- if (DEBUG) Log.d(TAG, "playSounds: could not parse Uri: " + soundPath);
- }
- } else {
- if (DEBUG) Log.d(TAG, "playSounds: whichSound = " + whichSound
- + "; soundPath was null");
+ 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;
+ mMasterStreamMaxVolume = mAudioManager.getStreamMaxVolume(MASTER_STREAM_TYPE);
}
+ // If the stream is muted, don't play the sound
+ if (mAudioManager.isStreamMute(MASTER_STREAM_TYPE)) return;
+
+ // Adjust the lock sound volume from a minimum of MIN_LOCK_VOLUME to a maximum
+ // of MAX_LOCK_VOLUME, relative to the maximum level of the MASTER_STREAM_TYPE volume.
+ float lockSoundVolume;
+ int masterStreamVolume = mAudioManager.getStreamVolume(MASTER_STREAM_TYPE);
+ if (masterStreamVolume == 0) {
+ return;
+ } else {
+ lockSoundVolume = MIN_LOCK_VOLUME + (MAX_LOCK_VOLUME - MIN_LOCK_VOLUME)
+ * ((float) masterStreamVolume / mMasterStreamMaxVolume);
+ }
+
+ mLockSoundStreamId = mLockSounds.play(whichSound, lockSoundVolume, lockSoundVolume, 1,
+ 0, 1.0f);
}
}
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 2c7f86d..a010ba1 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -76,7 +76,8 @@
* {@link com.android.internal.policy.impl.KeyguardViewManager}
* via its {@link com.android.internal.policy.impl.KeyguardViewCallback}, as appropriate.
*/
-public class LockPatternKeyguardView extends KeyguardViewBase implements Handler.Callback {
+public class LockPatternKeyguardView extends KeyguardViewBase implements Handler.Callback,
+ KeyguardUpdateMonitor.InfoCallback {
private static final int TRANSPORT_USERACTIVITY_TIMEOUT = 10000;
@@ -97,7 +98,8 @@
private View mLockScreen;
private View mUnlockScreen;
- private boolean mScreenOn = false;
+ private volatile boolean mScreenOn = false;
+ private volatile boolean mWindowFocused = false;
private boolean mEnableFallback = false; // assume no fallback UI until we know better
private boolean mShowLockBeforeUnlock = false;
@@ -109,6 +111,7 @@
private boolean mFaceLockServiceRunning = false;
private final Object mFaceLockServiceRunningLock = new Object();
+ private final Object mFaceLockStartupLock = new Object();
private Handler mHandler;
private final int MSG_SHOW_FACELOCK_AREA_VIEW = 0;
@@ -125,6 +128,7 @@
private boolean mRequiresSim;
+ private volatile boolean mEmergencyCall;
/**
@@ -231,6 +235,8 @@
}
};
+ private TransportControlView mTransportControlView;
+
/**
* @return Whether we are stuck on the lock screen because the sim is
* missing.
@@ -263,6 +269,9 @@
mUpdateMonitor = updateMonitor;
mLockPatternUtils = lockPatternUtils;
mWindowController = controller;
+ mEmergencyCall = false;
+
+ mUpdateMonitor.registerInfoCallback(this);
mKeyguardScreenCallback = new KeyguardScreenCallback() {
@@ -315,6 +324,7 @@
}
public void takeEmergencyCallAction() {
+ mEmergencyCall = true;
// FaceLock must be stopped if it is running when emergency call is pressed
stopAndUnbindFromFaceLock();
@@ -499,6 +509,7 @@
public void onScreenTurnedOff() {
mScreenOn = false;
mForgotPattern = false;
+ mEmergencyCall = false;
if (mMode == Mode.LockScreen) {
((KeyguardScreen) mLockScreen).onPause();
} else {
@@ -509,21 +520,60 @@
stopAndUnbindFromFaceLock();
}
- @Override
- public void onScreenTurnedOn() {
- mScreenOn = true;
- show();
-
- // When screen is turned on, need to bind to FaceLock service if we are using FaceLock
- // But only if not dealing with a call
- if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE) {
+ /** When screen is turned on and focused, need to bind to FaceLock service if we are using
+ * FaceLock, but only if we're not dealing with a call
+ */
+ private void activateFaceLockIfAble() {
+ final boolean transportInvisible = mTransportControlView == null ? true :
+ mTransportControlView.getVisibility() != View.VISIBLE;
+ if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE
+ && transportInvisible) {
bindToFaceLock();
+ //Eliminate the black background so that the lockpattern will be visible
+ //If FaceUnlock is cancelled
+ mHandler.sendEmptyMessageDelayed(MSG_HIDE_FACELOCK_AREA_VIEW, 4000);
} else {
mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW);
}
}
@Override
+ public void onScreenTurnedOn() {
+ boolean runFaceLock = false;
+ //Make sure to start facelock iff the screen is both on and focused
+ synchronized(mFaceLockStartupLock) {
+ mScreenOn = true;
+ runFaceLock = mWindowFocused;
+ }
+ show();
+ if(runFaceLock) activateFaceLockIfAble();
+ }
+
+ /** Unbind from facelock if something covers this window (such as an alarm)
+ * bind to facelock 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 runFaceLock = false;
+ //Make sure to start facelock iff the screen is both on and focused
+ synchronized(mFaceLockStartupLock) {
+ if(mScreenOn && !mWindowFocused) runFaceLock = hasWindowFocus;
+ mWindowFocused = hasWindowFocus;
+ }
+ if(!hasWindowFocus) {
+ stopAndUnbindFromFaceLock();
+ mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW);
+ } else if (runFaceLock) {
+ //Don't activate facelock while the user is calling 911!
+ if(mEmergencyCall) mEmergencyCall = false;
+ else {
+ activateFaceLockIfAble();
+ }
+ }
+ }
+
+ @Override
public void show() {
if (mMode == Mode.LockScreen) {
((KeyguardScreen) mLockScreen).onResume();
@@ -531,7 +581,8 @@
((KeyguardScreen) mUnlockScreen).onResume();
}
- if (mLockPatternUtils.usingBiometricWeak()) {
+ if (mLockPatternUtils.usingBiometricWeak() &&
+ mLockPatternUtils.isBiometricWeakInstalled()) {
mHandler.sendEmptyMessage(MSG_SHOW_FACELOCK_AREA_VIEW);
} else {
mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW);
@@ -582,6 +633,29 @@
post(mRecreateRunnable);
}
+ //Ignore these events; they are implemented only because they come from the same interface
+ @Override
+ public void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel)
+ {}
+ @Override
+ public void onTimeChanged() {}
+ @Override
+ public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {}
+ @Override
+ public void onRingerModeChanged(int state) {}
+ @Override
+ public void onClockVisibilityChanged() {}
+
+ //We need to stop faceunlock when a phonecall comes in
+ @Override
+ public void onPhoneStateChanged(int phoneState) {
+ if (DEBUG) Log.d(TAG, "phone state: " + phoneState);
+ if(phoneState == TelephonyManager.CALL_STATE_RINGING) {
+ stopAndUnbindFromFaceLock();
+ mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW);
+ }
+ }
+
@Override
protected boolean dispatchHoverEvent(MotionEvent event) {
// Do not let the screen to get locked while the user is disabled and touch
@@ -804,14 +878,13 @@
}
private void initializeTransportControlView(View view) {
- com.android.internal.widget.TransportControlView tcv =
- (TransportControlView) view.findViewById(R.id.transport);
- if (tcv == null) {
+ 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);
- tcv.setVisibility(View.GONE); // hide tcv until we get the callback below to show it.
- tcv.setCallback(mWidgetCallback);
+ mTransportControlView.setVisibility(View.GONE); // hide until it requests being shown.
+ mTransportControlView.setCallback(mWidgetCallback);
}
}
@@ -996,10 +1069,14 @@
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MSG_SHOW_FACELOCK_AREA_VIEW:
- mFaceLockAreaView.setVisibility(View.VISIBLE);
+ if (mFaceLockAreaView != null) {
+ mFaceLockAreaView.setVisibility(View.VISIBLE);
+ }
break;
case MSG_HIDE_FACELOCK_AREA_VIEW:
- mFaceLockAreaView.setVisibility(View.GONE);
+ if (mFaceLockAreaView != null) {
+ mFaceLockAreaView.setVisibility(View.GONE);
+ }
break;
default:
Log.w(TAG, "Unhandled message");
@@ -1010,7 +1087,8 @@
// Binds to FaceLock service, but does not tell it to start
public void bindToFaceLock() {
- if (mLockPatternUtils.usingBiometricWeak()) {
+ if (mLockPatternUtils.usingBiometricWeak() &&
+ mLockPatternUtils.isBiometricWeakInstalled()) {
if (!mBoundToFaceLockService) {
if (DEBUG) Log.d(TAG, "before bind to FaceLock service");
mContext.bindService(new Intent(IFaceLockInterface.class.getName()),
@@ -1026,7 +1104,8 @@
// Tells FaceLock to stop and then unbinds from the FaceLock service
public void stopAndUnbindFromFaceLock() {
- if (mLockPatternUtils.usingBiometricWeak()) {
+ if (mLockPatternUtils.usingBiometricWeak() &&
+ mLockPatternUtils.isBiometricWeakInstalled()) {
stopFaceLock();
if (mBoundToFaceLockService) {
@@ -1075,7 +1154,8 @@
// Tells the FaceLock service to start displaying its UI and perform recognition
public void startFaceLock(IBinder windowToken, int x, int y, int h, int w)
{
- if (mLockPatternUtils.usingBiometricWeak()) {
+ if (mLockPatternUtils.usingBiometricWeak() &&
+ mLockPatternUtils.isBiometricWeakInstalled()) {
synchronized (mFaceLockServiceRunningLock) {
if (!mFaceLockServiceRunning) {
if (DEBUG) Log.d(TAG, "Starting FaceLock");
@@ -1095,7 +1175,8 @@
// Tells the FaceLock service to stop displaying its UI and stop recognition
public void stopFaceLock()
{
- if (mLockPatternUtils.usingBiometricWeak()) {
+ if (mLockPatternUtils.usingBiometricWeak() &&
+ mLockPatternUtils.isBiometricWeakInstalled()) {
// Note that attempting to stop FaceLock when it's not running is not an issue.
// FaceLock can return, which stops it and then we try to stop it when the
// screen is turned off. That's why we check.
@@ -1135,5 +1216,12 @@
mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW); // Expose fallback
stopFaceLock();
}
+
+ // Allows the Face Unlock service to poke the wake lock to keep the lockscreen alive
+ @Override
+ public void pokeWakelock() {
+ if (DEBUG) Log.d(TAG, "FaceLock pokeWakelock()");
+ mKeyguardScreenCallback.pokeWakelock();
+ }
};
}
diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
index 6d2f2f2..3ad716b 100644
--- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
@@ -28,6 +28,7 @@
import android.os.CountDownTimer;
import android.os.SystemClock;
+import android.provider.Settings;
import android.security.KeyStore;
import android.text.Editable;
import android.text.InputType;
@@ -60,19 +61,18 @@
private final KeyguardUpdateMonitor mUpdateMonitor;
private final KeyguardScreenCallback mCallback;
- private boolean mIsAlpha;
+ private final boolean mIsAlpha;
- private EditText mPasswordEntry;
- private LockPatternUtils mLockPatternUtils;
- private PasswordEntryKeyboardView mKeyboardView;
- private PasswordEntryKeyboardHelper mKeyboardHelper;
+ private final EditText mPasswordEntry;
+ private final LockPatternUtils mLockPatternUtils;
+ private final PasswordEntryKeyboardView mKeyboardView;
+ private final PasswordEntryKeyboardHelper mKeyboardHelper;
- private int mCreationOrientation;
- private int mCreationHardKeyboardHidden;
- private CountDownTimer mCountdownTimer;
+ private final int mCreationOrientation;
+ private final int mCreationHardKeyboardHidden;
- private KeyguardStatusViewManager mStatusViewManager;
- private boolean mUseSystemIME = true; // TODO: Make configurable
+ 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
@@ -110,6 +110,10 @@
mPasswordEntry.setOnEditorActionListener(this);
mKeyboardHelper = new PasswordEntryKeyboardHelper(context, mKeyboardView, this, false);
+ mKeyboardHelper.setEnableHaptics(
+ Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, 0)
+ != 0);
if (mIsAlpha) {
// We always use the system IME for alpha keyboard, so hide lockscreen's soft keyboard
mKeyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA);
@@ -119,6 +123,19 @@
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);
+ pinDelete.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mKeyboardHelper.handleBackspace();
+ }
+ });
+ }
}
mPasswordEntry.requestFocus();
@@ -138,9 +155,6 @@
//KeyguardStatusViewManager.LOCK_ICON);
}
- mKeyboardHelper.setVibratePattern(mLockPatternUtils.isTactileFeedbackEnabled() ?
- com.android.internal.R.array.config_virtualKeyVibePattern : 0);
-
// Poke the wakelock any time the text is selected or modified
mPasswordEntry.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
@@ -293,7 +307,7 @@
mPasswordEntry.setEnabled(false);
mKeyboardView.setEnabled(false);
long elapsedRealtime = SystemClock.elapsedRealtime();
- mCountdownTimer = new CountDownTimer(elapsedRealtimeDeadline - elapsedRealtime, 1000) {
+ new CountDownTimer(elapsedRealtimeDeadline - elapsedRealtime, 1000) {
@Override
public void onTick(long millisUntilFinished) {
@@ -309,7 +323,6 @@
mPasswordEntry.setEnabled(true);
mKeyboardView.setEnabled(true);
mStatusViewManager.resetStatusInfo();
- mCountdownTimer = null;
}
}.start();
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 9205b9a..de8d41a2 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -1084,8 +1084,8 @@
}
MenuView menuView = st.isInListMode()
- ? st.getListMenuView(mPanelMenuPresenterCallback)
- : st.getIconMenuView(mPanelMenuPresenterCallback);
+ ? st.getListMenuView(getContext(), mPanelMenuPresenterCallback)
+ : st.getIconMenuView(getContext(), mPanelMenuPresenterCallback);
st.shownPanelView = (View) menuView;
@@ -2147,15 +2147,12 @@
mActionMode = mode;
} else {
if (mActionModeView == null) {
- if (hasFeature(FEATURE_ACTION_MODE_OVERLAY)) {
+ if (isFloating()) {
mActionModeView = new ActionBarContextView(mContext);
mActionModePopup = new PopupWindow(mContext, null,
com.android.internal.R.attr.actionModePopupWindowStyle);
mActionModePopup.setLayoutInScreenEnabled(true);
mActionModePopup.setLayoutInsetDecor(true);
- mActionModePopup.setFocusable(true);
- mActionModePopup.setOutsideTouchable(false);
- mActionModePopup.setTouchModal(false);
mActionModePopup.setWindowLayoutType(
WindowManager.LayoutParams.TYPE_APPLICATION);
mActionModePopup.setContentView(mActionModeView);
@@ -2186,7 +2183,8 @@
if (mActionModeView != null) {
mActionModeView.killMode();
- mode = new StandaloneActionMode(getContext(), mActionModeView, wrappedCallback);
+ mode = new StandaloneActionMode(getContext(), mActionModeView, wrappedCallback,
+ mActionModePopup == null);
if (callback.onCreateActionMode(mode, mode.getMenu())) {
mode.invalidate();
mActionModeView.initForMode(mode);
@@ -2664,6 +2662,8 @@
layoutResource = com.android.internal.R.layout.screen_title;
}
// System.out.println("Title!");
+ } else if ((features & (1 << FEATURE_ACTION_MODE_OVERLAY)) != 0) {
+ layoutResource = com.android.internal.R.layout.screen_simple_overlay_action_mode;
} else {
// Embedded, so no decoration is needed.
layoutResource = com.android.internal.R.layout.screen_simple;
@@ -3251,11 +3251,11 @@
}
}
- MenuView getListMenuView(MenuPresenter.Callback cb) {
+ MenuView getListMenuView(Context context, MenuPresenter.Callback cb) {
if (menu == null) return null;
if (!isCompact) {
- getIconMenuView(cb); // Need this initialized to know where our offset goes
+ getIconMenuView(context, cb); // Need this initialized to know where our offset goes
}
if (listMenuPresenter == null) {
@@ -3275,11 +3275,11 @@
return result;
}
- MenuView getIconMenuView(MenuPresenter.Callback cb) {
+ MenuView getIconMenuView(Context context, MenuPresenter.Callback cb) {
if (menu == null) return null;
if (iconMenuPresenter == null) {
- iconMenuPresenter = new IconMenuPresenter();
+ iconMenuPresenter = new IconMenuPresenter(context);
iconMenuPresenter.setCallback(cb);
iconMenuPresenter.setId(com.android.internal.R.id.icon_menu_presenter);
menu.addMenuPresenter(iconMenuPresenter);
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 968180c..3eb04cb 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -103,6 +103,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_DRAG;
+import static android.view.WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER;
import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD;
import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_PHONE;
@@ -127,6 +128,7 @@
import android.view.WindowManagerImpl;
import android.view.WindowManagerPolicy;
import android.view.KeyCharacterMap.FallbackAction;
+import android.view.WindowManagerPolicy.WindowManagerFuncs;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
@@ -205,6 +207,7 @@
static final int BOOT_PROGRESS_LAYER = 22;
// the (mouse) pointer layer
static final int POINTER_LAYER = 23;
+ static final int HIDDEN_NAV_CONSUMER_LAYER = 24;
static final int APPLICATION_MEDIA_SUBLAYER = -2;
static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1;
@@ -220,10 +223,16 @@
private static final int SW_LID = 0x00;
private static final int BTN_MOUSE = 0x110;
+ /**
+ * Lock protecting internal state. Must not call out into window
+ * manager with lock held. (This lock will be acquired in places
+ * where the window manager is calling in with its own lock held.)
+ */
final Object mLock = new Object();
-
+
Context mContext;
IWindowManager mWindowManager;
+ WindowManagerFuncs mWindowManagerFuncs;
LocalPowerManager mPowerManager;
IStatusBarService mStatusBarService;
Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
@@ -258,7 +267,8 @@
WindowState mKeyguard = null;
KeyguardViewMediator mKeyguardMediator;
GlobalActions mGlobalActions;
- volatile boolean mPowerKeyHandled;
+ volatile boolean mPowerKeyHandled; // accessed from input reader and handler thread
+ boolean mPendingPowerKeyUpCanceled;
RecentApplicationsDialog mRecentAppsDialog;
Handler mHandler;
@@ -276,6 +286,7 @@
int mLidOpenRotation;
int mCarDockRotation;
int mDeskDockRotation;
+ int mHdmiRotation;
int mUserRotationMode = WindowManagerPolicy.USER_ROTATION_FREE;
int mUserRotation = Surface.ROTATION_0;
@@ -343,7 +354,11 @@
int mDockLeft, mDockTop, mDockRight, mDockBottom;
// During layout, the layer at which the doc window is placed.
int mDockLayer;
-
+ int mLastSystemUiVisibility;
+ int mForceClearingStatusBarVisibility = 0;
+
+ FakeWindow mHideNavFakeWindow = null;
+
static final Rect mTmpParentFrame = new Rect();
static final Rect mTmpDisplayFrame = new Rect();
static final Rect mTmpContentFrame = new Rect();
@@ -389,8 +404,14 @@
private int mLongPressOnHomeBehavior = -1;
// Screenshot trigger states
- private boolean mVolumeDownTriggered;
- private boolean mPowerDownTriggered;
+ // Time to volume and power must be pressed within this interval of each other.
+ private static final long SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS = 150;
+ private boolean mVolumeDownKeyTriggered;
+ private long mVolumeDownKeyTime;
+ private boolean mVolumeDownKeyConsumedByScreenshotChord;
+ private boolean mVolumeUpKeyTriggered;
+ private boolean mPowerKeyTriggered;
+ private long mPowerKeyTime;
ShortcutManager mShortcutManager;
PowerManager.WakeLock mBroadcastWakeLock;
@@ -538,37 +559,64 @@
if (!mPowerKeyHandled) {
mHandler.removeCallbacks(mPowerLongPress);
return !canceled;
- } else {
- mPowerKeyHandled = true;
- return false;
}
+ return false;
+ }
+
+ private void cancelPendingPowerKeyAction() {
+ if (!mPowerKeyHandled) {
+ mHandler.removeCallbacks(mPowerLongPress);
+ }
+ mPendingPowerKeyUpCanceled = true;
+ }
+
+ private void interceptScreenshotChord() {
+ if (mVolumeDownKeyTriggered && mPowerKeyTriggered && !mVolumeUpKeyTriggered) {
+ final long now = SystemClock.uptimeMillis();
+ if (now <= mVolumeDownKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS
+ && now <= mPowerKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS) {
+ mVolumeDownKeyConsumedByScreenshotChord = true;
+ cancelPendingPowerKeyAction();
+
+ mHandler.postDelayed(mScreenshotChordLongPress,
+ ViewConfiguration.getGlobalActionKeyTimeout());
+ }
+ }
+ }
+
+ private void cancelPendingScreenshotChordAction() {
+ mHandler.removeCallbacks(mScreenshotChordLongPress);
}
private final Runnable mPowerLongPress = new Runnable() {
public void run() {
- if (!mPowerKeyHandled) {
- // The context isn't read
- if (mLongPressOnPowerBehavior < 0) {
- mLongPressOnPowerBehavior = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior);
- }
- switch (mLongPressOnPowerBehavior) {
- case LONG_PRESS_POWER_NOTHING:
- break;
- case LONG_PRESS_POWER_GLOBAL_ACTIONS:
- mPowerKeyHandled = true;
- performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
- sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
- showGlobalActionsDialog();
- break;
- case LONG_PRESS_POWER_SHUT_OFF:
- mPowerKeyHandled = true;
- performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
- sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
- ShutdownThread.shutdown(mContext, true);
- break;
- }
+ // The context isn't read
+ if (mLongPressOnPowerBehavior < 0) {
+ mLongPressOnPowerBehavior = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_longPressOnPowerBehavior);
}
+ switch (mLongPressOnPowerBehavior) {
+ case LONG_PRESS_POWER_NOTHING:
+ break;
+ case LONG_PRESS_POWER_GLOBAL_ACTIONS:
+ mPowerKeyHandled = true;
+ performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
+ sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
+ showGlobalActionsDialog();
+ break;
+ case LONG_PRESS_POWER_SHUT_OFF:
+ mPowerKeyHandled = true;
+ performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
+ sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
+ ShutdownThread.shutdown(mContext, true);
+ break;
+ }
+ }
+ };
+
+ private final Runnable mScreenshotChordLongPress = new Runnable() {
+ public void run() {
+ takeScreenshot();
}
};
@@ -646,9 +694,11 @@
/** {@inheritDoc} */
public void init(Context context, IWindowManager windowManager,
+ WindowManagerFuncs windowManagerFuncs,
LocalPowerManager powerManager) {
mContext = context;
mWindowManager = windowManager;
+ mWindowManagerFuncs = windowManagerFuncs;
mPowerManager = powerManager;
mKeyguardMediator = new KeyguardViewMediator(context, this, powerManager);
mHandler = new Handler();
@@ -777,6 +827,12 @@
? mContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_width)
: 0;
+
+ if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {
+ mHdmiRotation = mPortraitRotation;
+ } else {
+ mHdmiRotation = mLandscapeRotation;
+ }
}
public void updateSettings() {
@@ -1061,6 +1117,8 @@
return NAVIGATION_BAR_LAYER;
case TYPE_BOOT_PROGRESS:
return BOOT_PROGRESS_LAYER;
+ case TYPE_HIDDEN_NAV_CONSUMER:
+ return HIDDEN_NAV_CONSUMER_LAYER;
}
Log.e(TAG, "Unknown window type: " + type);
return APPLICATION_LAYER;
@@ -1357,11 +1415,12 @@
/** {@inheritDoc} */
@Override
- public boolean interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
+ public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
final boolean keyguardOn = keyguardOn();
final int keyCode = event.getKeyCode();
final int repeatCount = event.getRepeatCount();
final int metaState = event.getMetaState();
+ final int flags = event.getFlags();
final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
final boolean canceled = event.isCanceled();
@@ -1370,6 +1429,26 @@
+ repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed);
}
+ // If we think we might have a volume down & power key chord on the way
+ // but we're not sure, then tell the dispatcher to wait a little while and
+ // try again later before dispatching.
+ if ((flags & KeyEvent.FLAG_FALLBACK) == 0) {
+ if (mVolumeDownKeyTriggered && !mPowerKeyTriggered) {
+ final long now = SystemClock.uptimeMillis();
+ final long timeoutTime = mVolumeDownKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS;
+ if (now < timeoutTime) {
+ return timeoutTime - now;
+ }
+ }
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
+ && mVolumeDownKeyConsumedByScreenshotChord) {
+ if (!down) {
+ mVolumeDownKeyConsumedByScreenshotChord = false;
+ }
+ return -1;
+ }
+ }
+
// First we always handle the home key here, so applications
// can never break it, although if keyguard is on, we do let
// it handle it, because that gives us the correct 5 second
@@ -1401,7 +1480,7 @@
} else {
Log.i(TAG, "Ignoring HOME; event canceled.");
}
- return true;
+ return -1;
}
// If a system window has focus, then it doesn't make sense
@@ -1412,13 +1491,13 @@
if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
|| type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
// the "app" is keyguard, so give it the key
- return false;
+ return 0;
}
final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
for (int i=0; i<typeCount; i++) {
if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
// don't do anything, but also don't pass it to the app
- return true;
+ return -1;
}
}
}
@@ -1432,7 +1511,7 @@
}
}
}
- return true;
+ return -1;
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
// Hijack modified menu keys for debugging features
final int chordBug = KeyEvent.META_SHIFT_ON;
@@ -1441,7 +1520,7 @@
if (mEnableShiftMenuBugReports && (metaState & chordBug) == chordBug) {
Intent intent = new Intent(Intent.ACTION_BUG_REPORT);
mContext.sendOrderedBroadcast(intent, null);
- return true;
+ return -1;
} else if (SHOW_PROCESSES_ON_ALT_MENU &&
(metaState & KeyEvent.META_ALT_ON) == KeyEvent.META_ALT_ON) {
Intent service = new Intent();
@@ -1456,7 +1535,7 @@
}
Settings.System.putInt(
res, Settings.System.SHOW_PROCESSES, shown ? 0 : 1);
- return true;
+ return -1;
}
}
} else if (keyCode == KeyEvent.KEYCODE_SEARCH) {
@@ -1469,15 +1548,15 @@
mShortcutKeyPressed = -1;
if (mConsumeShortcutKeyUp) {
mConsumeShortcutKeyUp = false;
- return true;
+ return -1;
}
}
- return false;
+ return 0;
} else if (keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
if (down && repeatCount == 0) {
showOrHideRecentAppsDialog(0, true /*dismissIfShown*/);
}
- return true;
+ return -1;
}
// Shortcuts are invoked through Search+key, so intercept those here
@@ -1507,11 +1586,11 @@
+ "+" + KeyEvent.keyCodeToString(keyCode));
}
}
- return true;
+ return -1;
}
}
- return false;
+ return 0;
}
/** {@inheritDoc} */
@@ -1582,7 +1661,9 @@
flags, event.getSource(), null);
int actions = interceptKeyBeforeQueueing(fallbackEvent, policyFlags, true);
if ((actions & ACTION_PASS_TO_USER) != 0) {
- if (!interceptKeyBeforeDispatching(win, fallbackEvent, policyFlags)) {
+ long delayMillis = interceptKeyBeforeDispatching(
+ win, fallbackEvent, policyFlags);
+ if (delayMillis == 0) {
if (DEBUG_FALLBACK) {
Slog.d(TAG, "Performing fallback.");
}
@@ -1639,6 +1720,46 @@
}
}
+ final InputHandler mHideNavInputHandler = new BaseInputHandler() {
+ @Override
+ public void handleMotion(MotionEvent event, InputQueue.FinishedCallback finishedCallback) {
+ boolean handled = false;
+ try {
+ if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ // When the user taps down, we re-show the nav bar.
+ boolean changed = false;
+ synchronized (mLock) {
+ // Any user activity always causes us to show the navigation controls,
+ // if they had been hidden.
+ int newVal = mForceClearingStatusBarVisibility
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ if (mForceClearingStatusBarVisibility != newVal) {
+ mForceClearingStatusBarVisibility = newVal;
+ changed = true;
+ }
+ }
+ if (changed) {
+ mWindowManagerFuncs.reevaluateStatusBarVisibility();
+ }
+ }
+ }
+ } finally {
+ finishedCallback.finished(handled);
+ }
+ }
+ };
+
+ @Override
+ public int adjustSystemUiVisibilityLw(int visibility) {
+ // Reset any bits in mForceClearingStatusBarVisibility that
+ // are now clear.
+ mForceClearingStatusBarVisibility &= visibility;
+ // Clear any bits in the new visibility that are currently being
+ // force cleared, before reporting it.
+ return visibility & ~mForceClearingStatusBarVisibility;
+ }
+
public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset) {
final int fl = attrs.flags;
@@ -1677,8 +1798,9 @@
// decide where the status bar goes ahead of time
if (mStatusBar != null) {
- Rect navr = null;
if (mNavigationBar != null) {
+ final boolean navVisible = mNavigationBar.isVisibleLw() &&
+ (mLastSystemUiVisibility&View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
// Force the navigation bar to its appropriate place and
// size. We need to do this directly, instead of relying on
// it to bubble up from the nav bar, because this needs to
@@ -1687,19 +1809,45 @@
// Portrait screen; nav bar goes on bottom.
mTmpNavigationFrame.set(0, displayHeight-mNavigationBarHeight,
displayWidth, displayHeight);
- if (mNavigationBar.isVisibleLw()) {
+ if (navVisible) {
mDockBottom = mTmpNavigationFrame.top;
mRestrictedScreenHeight = mDockBottom - mDockTop;
+ } else {
+ // We currently want to hide the navigation UI. Do this by just
+ // moving it off the screen, so it can still receive input events
+ // to know when to be re-shown.
+ mTmpNavigationFrame.offset(0, mNavigationBarHeight);
}
} else {
// Landscape screen; nav bar goes to the right.
mTmpNavigationFrame.set(displayWidth-mNavigationBarWidth, 0,
displayWidth, displayHeight);
- if (mNavigationBar.isVisibleLw()) {
+ if (navVisible) {
mDockRight = mTmpNavigationFrame.left;
mRestrictedScreenWidth = mDockRight - mDockLeft;
+ } else {
+ // We currently want to hide the navigation UI. Do this by just
+ // moving it off the screen, so it can still receive input events
+ // to know when to be re-shown.
+ mTmpNavigationFrame.offset(mNavigationBarWidth, 0);
}
}
+ // When the navigation bar isn't visible, we put up a fake
+ // input window to catch all touch events. This way we can
+ // detect when the user presses anywhere to bring back the nav
+ // bar and ensure the application doesn't see the event.
+ if (navVisible) {
+ if (mHideNavFakeWindow != null) {
+ mHideNavFakeWindow.dismiss();
+ mHideNavFakeWindow = null;
+ }
+ } else if (mHideNavFakeWindow == null) {
+ mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
+ mHandler.getLooper(), mHideNavInputHandler,
+ "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER,
+ 0, false, false, true);
+ }
+ // And compute the final frame.
mNavigationBar.computeFrameLw(mTmpNavigationFrame, mTmpNavigationFrame,
mTmpNavigationFrame, mTmpNavigationFrame);
if (DEBUG_LAYOUT) Log.i(TAG, "mNavigationBar frame: " + mTmpNavigationFrame);
@@ -2207,7 +2355,11 @@
}
}
- updateSystemUiVisibility();
+ if ((updateSystemUiVisibilityLw()&View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) {
+ // If the navigation bar has been hidden or shown, we need to do another
+ // layout pass to update that window.
+ changes |= FINISH_LAYOUT_REDO_LAYOUT;
+ }
// update since mAllowLockscreenWhenOn might have changed
updateLockScreenTimeout();
@@ -2248,9 +2400,14 @@
return true;
}
- public void focusChanged(WindowState lastFocus, WindowState newFocus) {
+ public int focusChangedLw(WindowState lastFocus, WindowState newFocus) {
mFocusedWindow = newFocus;
- updateSystemUiVisibility();
+ if ((updateSystemUiVisibilityLw()&View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) {
+ // If the navigation bar has been hidden or shown, we need to do another
+ // layout pass to update that window.
+ return FINISH_LAYOUT_REDO_LAYOUT;
+ }
+ return 0;
}
/** {@inheritDoc} */
@@ -2372,76 +2529,65 @@
final Object mScreenshotLock = new Object();
ServiceConnection mScreenshotConnection = null;
- Runnable mScreenshotTimeout = null;
- void finishScreenshotLSS(ServiceConnection conn) {
- if (mScreenshotConnection == conn) {
- mContext.unbindService(conn);
- mScreenshotConnection = null;
- if (mScreenshotTimeout != null) {
- mHandler.removeCallbacks(mScreenshotTimeout);
- mScreenshotTimeout = null;
- }
- }
- }
-
- private void takeScreenshot() {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection != null) {
- return;
- }
- ComponentName cn = new ComponentName("com.android.systemui",
- "com.android.systemui.screenshot.TakeScreenshotService");
- Intent intent = new Intent();
- intent.setComponent(cn);
- ServiceConnection conn = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection != this) {
- return;
- }
- Messenger messenger = new Messenger(service);
- Message msg = Message.obtain(null, 1);
- final ServiceConnection myConn = this;
- Handler h = new Handler(mHandler.getLooper()) {
- @Override
- public void handleMessage(Message msg) {
- synchronized (mScreenshotLock) {
- finishScreenshotLSS(myConn);
- }
- }
- };
- msg.replyTo = new Messenger(h);
- try {
- messenger.send(msg);
- } catch (RemoteException e) {
- }
- }
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {}
- };
- if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
- mScreenshotConnection = conn;
- mScreenshotTimeout = new Runnable() {
- @Override public void run() {
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection != null) {
- finishScreenshotLSS(mScreenshotConnection);
- }
- }
- }
-
- };
- mHandler.postDelayed(mScreenshotTimeout, 10000);
- }
+ final Runnable mScreenshotTimeout = new Runnable() {
+ @Override public void run() {
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection != null) {
+ mContext.unbindService(mScreenshotConnection);
+ mScreenshotConnection = null;
}
}
- });
+ }
+ };
+
+ // Assume this is called from the Handler thread.
+ private void takeScreenshot() {
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection != null) {
+ return;
+ }
+ ComponentName cn = new ComponentName("com.android.systemui",
+ "com.android.systemui.screenshot.TakeScreenshotService");
+ Intent intent = new Intent();
+ intent.setComponent(cn);
+ ServiceConnection conn = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection != this) {
+ return;
+ }
+ Messenger messenger = new Messenger(service);
+ Message msg = Message.obtain(null, 1);
+ final ServiceConnection myConn = this;
+ Handler h = new Handler(mHandler.getLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection == myConn) {
+ mContext.unbindService(mScreenshotConnection);
+ mScreenshotConnection = null;
+ mHandler.removeCallbacks(mScreenshotTimeout);
+ }
+ }
+ }
+ };
+ msg.replyTo = new Messenger(h);
+ try {
+ messenger.send(msg);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+ @Override
+ public void onServiceDisconnected(ComponentName name) {}
+ };
+ if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
+ mScreenshotConnection = conn;
+ mHandler.postDelayed(mScreenshotTimeout, 10000);
+ }
+ }
}
/** {@inheritDoc} */
@@ -2509,28 +2655,35 @@
// Handle special keys.
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
- if (down) {
- if (isScreenOn) {
- // If the power key down was already triggered, take the screenshot
- if (mPowerDownTriggered) {
- // Dismiss the power-key longpress
- mHandler.removeCallbacks(mPowerLongPress);
- mPowerKeyHandled = true;
-
- // Take the screenshot
- takeScreenshot();
-
- // Prevent the event from being passed through to the current activity
- result &= ~ACTION_PASS_TO_USER;
- break;
- }
- mVolumeDownTriggered = true;
- }
- } else {
- mVolumeDownTriggered = false;
- }
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_MUTE: {
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
+ if (down) {
+ if (isScreenOn && !mVolumeDownKeyTriggered
+ && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
+ mVolumeDownKeyTriggered = true;
+ mVolumeDownKeyTime = event.getDownTime();
+ mVolumeDownKeyConsumedByScreenshotChord = false;
+ cancelPendingPowerKeyAction();
+ interceptScreenshotChord();
+ }
+ } else {
+ mVolumeDownKeyTriggered = false;
+ cancelPendingScreenshotChordAction();
+ }
+ } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
+ if (down) {
+ if (isScreenOn && !mVolumeUpKeyTriggered
+ && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
+ mVolumeUpKeyTriggered = true;
+ cancelPendingPowerKeyAction();
+ cancelPendingScreenshotChordAction();
+ }
+ } else {
+ mVolumeUpKeyTriggered = false;
+ cancelPendingScreenshotChordAction();
+ }
+ }
if (down) {
ITelephony telephonyService = getTelephonyService();
if (telephonyService != null) {
@@ -2609,17 +2762,11 @@
case KeyEvent.KEYCODE_POWER: {
result &= ~ACTION_PASS_TO_USER;
if (down) {
- if (isScreenOn) {
- // If the volume down key has been triggered, then just take the screenshot
- if (mVolumeDownTriggered) {
- // Take the screenshot
- takeScreenshot();
- mPowerKeyHandled = true;
-
- // Prevent the event from being passed through to the current activity
- break;
- }
- mPowerDownTriggered = true;
+ if (isScreenOn && !mPowerKeyTriggered
+ && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
+ mPowerKeyTriggered = true;
+ mPowerKeyTime = event.getDownTime();
+ interceptScreenshotChord();
}
ITelephony telephonyService = getTelephonyService();
@@ -2641,12 +2788,15 @@
Log.w(TAG, "ITelephony threw RemoteException", ex);
}
}
- interceptPowerKeyDown(!isScreenOn || hungUp);
+ interceptPowerKeyDown(!isScreenOn || hungUp
+ || mVolumeDownKeyTriggered || mVolumeUpKeyTriggered);
} else {
- mPowerDownTriggered = false;
- if (interceptPowerKeyUp(canceled)) {
+ mPowerKeyTriggered = false;
+ cancelPendingScreenshotChordAction();
+ if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) {
result = (result & ~ACTION_POKE_USER_ACTIVITY) | ACTION_GO_TO_SLEEP;
}
+ mPendingPowerKeyUpCanceled = false;
}
break;
}
@@ -2922,7 +3072,7 @@
int preferredRotation = -1;
if (mHdmiPlugged) {
// Ignore sensor when plugged into HDMI.
- preferredRotation = mLandscapeRotation;
+ preferredRotation = mHdmiRotation;
} else if (mLidOpen == LID_OPEN && mLidOpenRotation >= 0) {
// Ignore sensor when lid switch is open and rotation is forced.
preferredRotation = mLidOpenRotation;
@@ -2940,10 +3090,7 @@
// enable 180 degree rotation while docked.
preferredRotation = mDeskDockEnablesAccelerometer
? sensorRotation : mDeskDockRotation;
- } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
- // Ignore sensor when user locked rotation.
- preferredRotation = mUserRotation;
- } else if ((mAccelerometerDefault != 0
+ } else if ((mAccelerometerDefault != 0 /* implies not rotation locked */
&& (orientation == ActivityInfo.SCREEN_ORIENTATION_USER
|| orientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED))
|| orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR
@@ -2966,6 +3113,9 @@
} else {
preferredRotation = lastRotation;
}
+ } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
+ // Apply rotation lock.
+ preferredRotation = mUserRotation;
}
// TODO: Sometimes, we might want to override the application-requested
@@ -3011,8 +3161,8 @@
return mPortraitRotation;
default:
- // For USER, UNSPECIFIED and NOSENSOR, just return the preferred
- // orientation we already calculated.
+ // For USER, UNSPECIFIED, NOSENSOR, SENSOR and FULL_SENSOR,
+ // just return the preferred orientation we already calculated.
if (preferredRotation >= 0) {
return preferredRotation;
}
@@ -3193,6 +3343,17 @@
/** {@inheritDoc} */
public void userActivity() {
+ // ***************************************
+ // NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+ // ***************************************
+ // THIS IS CALLED FROM DEEP IN THE POWER MANAGER
+ // WITH ITS LOCKS HELD.
+ //
+ // This code must be VERY careful about the locks
+ // it acquires.
+ // In fact, the current code acquires way too many,
+ // and probably has lurking deadlocks.
+
synchronized (mScreenLockTimeout) {
if (mLockScreenTimerActive) {
// reset the timer
@@ -3201,14 +3362,11 @@
}
}
- if (mStatusBarService != null) {
- try {
- mStatusBarService.userActivity();
- } catch (RemoteException ex) {}
- }
-
- synchronized (mLock) {
- updateScreenSaverTimeoutLocked();
+ // Turn this off for now, screen savers not currently enabled.
+ if (false) {
+ synchronized (mLock) {
+ updateScreenSaverTimeoutLocked();
+ }
}
}
@@ -3250,6 +3408,9 @@
private void updateScreenSaverTimeoutLocked() {
if (mScreenSaverActivator == null) return;
+ // GAH... acquiring a lock within a lock? Please let's fix this.
+ // (Also note this is called from userActivity, with the power manager
+ // lock held. Not good.)
synchronized (mScreenSaverActivator) {
mHandler.removeCallbacks(mScreenSaverActivator);
if (mScreenSaverEnabled && mScreenOnEarly && mScreenSaverTimeout > 0) {
@@ -3486,33 +3647,36 @@
return mScreenOnEarly;
}
- private void updateSystemUiVisibility() {
+ private int updateSystemUiVisibilityLw() {
// If there is no window focused, there will be nobody to handle the events
// anyway, so just hang on in whatever state we're in until things settle down.
- if (mFocusedWindow != null) {
- final WindowManager.LayoutParams params = mFocusedWindow.getAttrs();
- final int visibility = params.systemUiVisibility | params.subtreeSystemUiVisibility;
- mHandler.post(new Runnable() {
- public void run() {
- if (mStatusBarService == null) {
- mStatusBarService = IStatusBarService.Stub.asInterface(
- ServiceManager.getService("statusbar"));
- }
- if (mStatusBarService != null) {
- // need to assume status bar privileges to invoke lights on
- long origId = Binder.clearCallingIdentity();
- try {
- mStatusBarService.setSystemUiVisibility(visibility);
- } catch (RemoteException e) {
- // not much to be done
- mStatusBarService = null;
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
+ if (mFocusedWindow == null) {
+ return 0;
+ }
+ final int visibility = mFocusedWindow.getSystemUiVisibility()
+ & ~mForceClearingStatusBarVisibility;
+ int diff = visibility ^ mLastSystemUiVisibility;
+ if (diff == 0) {
+ return 0;
+ }
+ mLastSystemUiVisibility = visibility;
+ mHandler.post(new Runnable() {
+ public void run() {
+ if (mStatusBarService == null) {
+ mStatusBarService = IStatusBarService.Stub.asInterface(
+ ServiceManager.getService("statusbar"));
+ }
+ if (mStatusBarService != null) {
+ try {
+ mStatusBarService.setSystemUiVisibility(visibility);
+ } catch (RemoteException e) {
+ // not much to be done
+ mStatusBarService = null;
}
}
- });
- }
+ }
+ });
+ return diff;
}
public void dump(String prefix, FileDescriptor fd, PrintWriter pw, String[] args) {
@@ -3522,6 +3686,12 @@
pw.print(prefix); pw.print("mLidOpen="); pw.print(mLidOpen);
pw.print(" mLidOpenRotation="); pw.print(mLidOpenRotation);
pw.print(" mHdmiPlugged="); pw.println(mHdmiPlugged);
+ if (mLastSystemUiVisibility != 0 || mForceClearingStatusBarVisibility != 0) {
+ pw.print(prefix); pw.print("mLastSystemUiVisibility=0x");
+ pw.println(Integer.toHexString(mLastSystemUiVisibility));
+ pw.print(" mForceClearingStatusBarVisibility=0x");
+ pw.println(Integer.toHexString(mForceClearingStatusBarVisibility));
+ }
pw.print(prefix); pw.print("mUiMode="); pw.print(mUiMode);
pw.print(" mDockMode="); pw.print(mDockMode);
pw.print(" mCarDockRotation="); pw.print(mCarDockRotation);
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 01f5a6f..ab49f93 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -5550,7 +5550,7 @@
// remove chain first. This is useful only if reconfiguring effect chain on same output thread,
// so that a new chain is created with correct parameters when first effect is added. This is
- // otherwise unecessary as removeEffect_l() will remove the chain when last effect is
+ // otherwise unnecessary as removeEffect_l() will remove the chain when last effect is
// removed.
srcThread->removeEffectChain_l(chain);
@@ -5563,6 +5563,11 @@
while (effect != 0) {
srcThread->removeEffect_l(effect);
dstThread->addEffect_l(effect);
+ // removeEffect_l() has stopped the effect if it was active so it must be restarted
+ if (effect->state() == EffectModule::ACTIVE ||
+ effect->state() == EffectModule::STOPPING) {
+ effect->start();
+ }
// if the move request is not received from audio policy manager, the effect must be
// re-registered with the new strategy and output
if (dstChain == 0) {
@@ -6350,6 +6355,12 @@
return status;
}
+status_t AudioFlinger::EffectModule::start()
+{
+ Mutex::Autolock _l(mLock);
+ return start_l();
+}
+
status_t AudioFlinger::EffectModule::start_l()
{
if (mEffectInterface == NULL) {
@@ -7214,7 +7225,10 @@
// calling stop here will remove pre-processing effect from the audio HAL.
// This is safe as we hold the EffectChain mutex which guarantees that we are not in
// the middle of a read from audio HAL
- mEffects[i]->stop();
+ if (mEffects[i]->state() == EffectModule::ACTIVE ||
+ mEffects[i]->state() == EffectModule::STOPPING) {
+ mEffects[i]->stop();
+ }
if (type == EFFECT_FLAG_TYPE_AUXILIARY) {
delete[] effect->inBuffer();
} else {
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 2e05593..ed9d81e 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -1117,6 +1117,7 @@
status_t setDevice(uint32_t device);
status_t setVolume(uint32_t *left, uint32_t *right, bool controller);
status_t setMode(uint32_t mode);
+ status_t start();
status_t stop();
void setSuspended(bool suspended);
bool suspended();
diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h
index 31544b3..c3ced4c2 100644
--- a/services/camera/libcameraservice/CameraHardwareInterface.h
+++ b/services/camera/libcameraservice/CameraHardwareInterface.h
@@ -80,24 +80,33 @@
class CameraHardwareInterface : public virtual RefBase {
public:
- CameraHardwareInterface(hw_module_t *module, const char *name)
+ CameraHardwareInterface(const char *name)
{
mDevice = 0;
mName = name;
- LOGI("Opening camera %s, this %p", name, this);
- int rc = module->methods->open(module, name,
- (hw_device_t **)&mDevice);
- if (rc != OK)
- LOGE("Could not open camera %s: %d", name, rc);
- initHalPreviewWindow();
}
~CameraHardwareInterface()
{
LOGI("Destroying camera %s", mName.string());
- int rc = mDevice->common.close(&mDevice->common);
- if (rc != OK)
- LOGE("Could not close camera %s: %d", mName.string(), rc);
+ if(mDevice) {
+ int rc = mDevice->common.close(&mDevice->common);
+ if (rc != OK)
+ LOGE("Could not close camera %s: %d", mName.string(), rc);
+ }
+ }
+
+ status_t initialize(hw_module_t *module)
+ {
+ LOGI("Opening camera %s", mName.string());
+ int rc = module->methods->open(module, mName.string(),
+ (hw_device_t **)&mDevice);
+ if (rc != OK) {
+ LOGE("Could not open camera %s: %d", mName.string(), rc);
+ return rc;
+ }
+ initHalPreviewWindow();
+ return rc;
}
/** Set the ANativeWindow to which preview frames are sent */
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index b178fd9..f306e4a 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -133,6 +133,8 @@
sp<ICamera> CameraService::connect(
const sp<ICameraClient>& cameraClient, int cameraId) {
int callingPid = getCallingPid();
+ sp<CameraHardwareInterface> hardware = NULL;
+
LOG1("CameraService::connect E (pid %d, id %d)", callingPid, cameraId);
if (!mModule) {
@@ -187,10 +189,13 @@
char camera_device_name[10];
snprintf(camera_device_name, sizeof(camera_device_name), "%d", cameraId);
- client = new Client(this, cameraClient,
- new CameraHardwareInterface(&mModule->common,
- camera_device_name),
- cameraId, info.facing, callingPid);
+ hardware = new CameraHardwareInterface(camera_device_name);
+ if (hardware->initialize(&mModule->common) != OK) {
+ hardware.clear();
+ return NULL;
+ }
+
+ client = new Client(this, cameraClient, hardware, cameraId, info.facing, callingPid);
mClient[cameraId] = client;
LOG1("CameraService::connect X");
return client;
@@ -278,9 +283,20 @@
// media players.
static MediaPlayer* newMediaPlayer(const char *file) {
+ // Read the system property to determine if we have need to use the
+ // AUDIO_STREAM_ENFORCED_AUDIBLE type.
+ char value[PROPERTY_VALUE_MAX];
+ property_get("ro.camera.sound.forced", value, "0");
+ int audioStreamType;
+ if (strcmp(value, "0") != 0) {
+ audioStreamType = AUDIO_STREAM_ENFORCED_AUDIBLE;
+ } else {
+ audioStreamType = AUDIO_STREAM_MUSIC;
+ }
+
MediaPlayer* mp = new MediaPlayer();
if (mp->setDataSource(file, NULL) == NO_ERROR) {
- mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
+ mp->setAudioStreamType(audioStreamType);
mp->prepare();
} else {
LOGE("Failed to load CameraService sounds: %s", file);
@@ -849,16 +865,16 @@
if (result != NO_ERROR) return result;
if (cmd == CAMERA_CMD_SET_DISPLAY_ORIENTATION) {
- // The orientation cannot be set during preview.
- if (mHardware->previewEnabled()) {
- return INVALID_OPERATION;
- }
// Mirror the preview if the camera is front-facing.
orientation = getOrientation(arg1, mCameraFacing == CAMERA_FACING_FRONT);
if (orientation == -1) return BAD_VALUE;
if (mOrientation != orientation) {
mOrientation = orientation;
+ if (mPreviewWindow != 0) {
+ native_window_set_buffers_transform(mPreviewWindow.get(),
+ mOrientation);
+ }
}
return OK;
} else if (cmd == CAMERA_CMD_ENABLE_SHUTTER_SOUND) {
diff --git a/services/input/EventHub.cpp b/services/input/EventHub.cpp
index 80ee28e..790b395 100644
--- a/services/input/EventHub.cpp
+++ b/services/input/EventHub.cpp
@@ -639,6 +639,8 @@
sizeof(struct input_event) * capacity);
if (readSize == 0 || (readSize < 0 && errno == ENODEV)) {
// Device was removed before INotify noticed.
+ LOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d capacity: %d errno: %d)\n",
+ device->fd, readSize, bufferSize, capacity, errno);
deviceChanged = true;
closeDeviceLocked(device);
} else if (readSize < 0) {
@@ -1254,6 +1256,7 @@
if(event->mask & IN_CREATE) {
openDeviceLocked(devname);
} else {
+ LOGI("Removing device '%s' due to inotify event\n", devname);
closeDeviceByPathLocked(devname);
}
}
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index 1eb5f0e..04b4855 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -804,6 +804,18 @@
logOutboundKeyDetailsLocked("dispatchKey - ", entry);
}
+ // Handle case where the policy asked us to try again later last time.
+ if (entry->interceptKeyResult == KeyEntry::INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER) {
+ if (currentTime < entry->interceptKeyWakeupTime) {
+ if (entry->interceptKeyWakeupTime < *nextWakeupTime) {
+ *nextWakeupTime = entry->interceptKeyWakeupTime;
+ }
+ return false; // wait until next wakeup
+ }
+ entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN;
+ entry->interceptKeyWakeupTime = 0;
+ }
+
// Give the policy a chance to intercept the key.
if (entry->interceptKeyResult == KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN) {
if (entry->policyFlags & POLICY_FLAG_PASS_TO_USER) {
@@ -3827,14 +3839,19 @@
mLock.unlock();
- bool consumed = mPolicy->interceptKeyBeforeDispatching(commandEntry->inputWindowHandle,
+ nsecs_t delay = mPolicy->interceptKeyBeforeDispatching(commandEntry->inputWindowHandle,
&event, entry->policyFlags);
mLock.lock();
- entry->interceptKeyResult = consumed
- ? KeyEntry::INTERCEPT_KEY_RESULT_SKIP
- : KeyEntry::INTERCEPT_KEY_RESULT_CONTINUE;
+ if (delay < 0) {
+ entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_SKIP;
+ } else if (!delay) {
+ entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_CONTINUE;
+ } else {
+ entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER;
+ entry->interceptKeyWakeupTime = now() + delay;
+ }
entry->release();
}
@@ -4156,7 +4173,8 @@
deviceId(deviceId), source(source), action(action), flags(flags),
keyCode(keyCode), scanCode(scanCode), metaState(metaState),
repeatCount(repeatCount), downTime(downTime),
- syntheticRepeat(false), interceptKeyResult(KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN) {
+ syntheticRepeat(false), interceptKeyResult(KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN),
+ interceptKeyWakeupTime(0) {
}
InputDispatcher::KeyEntry::~KeyEntry() {
@@ -4168,6 +4186,7 @@
dispatchInProgress = false;
syntheticRepeat = false;
interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN;
+ interceptKeyWakeupTime = 0;
}
diff --git a/services/input/InputDispatcher.h b/services/input/InputDispatcher.h
index e78f7bd..8ae5a56 100644
--- a/services/input/InputDispatcher.h
+++ b/services/input/InputDispatcher.h
@@ -242,7 +242,7 @@
virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) = 0;
/* Allows the policy a chance to intercept a key before dispatching. */
- virtual bool interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
+ virtual nsecs_t interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
const KeyEvent* keyEvent, uint32_t policyFlags) = 0;
/* Allows the policy a chance to perform default processing for an unhandled key.
@@ -481,8 +481,10 @@
INTERCEPT_KEY_RESULT_UNKNOWN,
INTERCEPT_KEY_RESULT_SKIP,
INTERCEPT_KEY_RESULT_CONTINUE,
+ INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER,
};
InterceptKeyResult interceptKeyResult; // set based on the interception result
+ nsecs_t interceptKeyWakeupTime; // used with INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER
KeyEntry(nsecs_t eventTime,
int32_t deviceId, uint32_t source, uint32_t policyFlags, int32_t action,
diff --git a/services/input/tests/InputDispatcher_test.cpp b/services/input/tests/InputDispatcher_test.cpp
index 8dfb44b..961566f 100644
--- a/services/input/tests/InputDispatcher_test.cpp
+++ b/services/input/tests/InputDispatcher_test.cpp
@@ -75,9 +75,9 @@
virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) {
}
- virtual bool interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
+ virtual nsecs_t interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
const KeyEvent* keyEvent, uint32_t policyFlags) {
- return false;
+ return 0;
}
virtual bool dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java
index 9f4936df..dd649e7 100644
--- a/services/java/com/android/server/AppWidgetService.java
+++ b/services/java/com/android/server/AppWidgetService.java
@@ -172,6 +172,10 @@
boolean mSafeMode;
boolean mStateLoaded;
+ // These are for debugging only -- widgets are going missing in some rare instances
+ ArrayList<Provider> mDeletedProviders = new ArrayList<Provider>();
+ ArrayList<Host> mDeletedHosts = new ArrayList<Host>();
+
AppWidgetService(Context context) {
mContext = context;
mPackageManager = context.getPackageManager();
@@ -219,6 +223,55 @@
}
}
+ private void dumpProvider(Provider p, int index, PrintWriter pw) {
+ AppWidgetProviderInfo info = p.info;
+ pw.print(" ["); pw.print(index); pw.print("] provider ");
+ pw.print(info.provider.flattenToShortString());
+ pw.println(':');
+ pw.print(" min=("); pw.print(info.minWidth);
+ pw.print("x"); pw.print(info.minHeight);
+ pw.print(") minResize=("); pw.print(info.minResizeWidth);
+ pw.print("x"); pw.print(info.minResizeHeight);
+ pw.print(") updatePeriodMillis=");
+ pw.print(info.updatePeriodMillis);
+ pw.print(" resizeMode=");
+ pw.print(info.resizeMode);
+ pw.print(" autoAdvanceViewId=");
+ pw.print(info.autoAdvanceViewId);
+ pw.print(" initialLayout=#");
+ pw.print(Integer.toHexString(info.initialLayout));
+ pw.print(" zombie="); pw.println(p.zombie);
+ }
+
+ private void dumpHost(Host host, int index, PrintWriter pw) {
+ pw.print(" ["); pw.print(index); pw.print("] hostId=");
+ pw.print(host.hostId); pw.print(' ');
+ pw.print(host.packageName); pw.print('/');
+ pw.print(host.uid); pw.println(':');
+ pw.print(" callbacks="); pw.println(host.callbacks);
+ pw.print(" instances.size="); pw.print(host.instances.size());
+ pw.print(" zombie="); pw.println(host.zombie);
+ }
+
+ private void dumpAppWidgetId(AppWidgetId id, int index, PrintWriter pw) {
+ pw.print(" ["); pw.print(index); pw.print("] id=");
+ pw.println(id.appWidgetId);
+ pw.print(" hostId=");
+ pw.print(id.host.hostId); pw.print(' ');
+ pw.print(id.host.packageName); pw.print('/');
+ pw.println(id.host.uid);
+ if (id.provider != null) {
+ pw.print(" provider=");
+ pw.println(id.provider.info.provider.flattenToShortString());
+ }
+ if (id.host != null) {
+ pw.print(" host.callbacks="); pw.println(id.host.callbacks);
+ }
+ if (id.views != null) {
+ pw.print(" views="); pw.println(id.views);
+ }
+ }
+
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
@@ -233,61 +286,35 @@
int N = mInstalledProviders.size();
pw.println("Providers:");
for (int i=0; i<N; i++) {
- Provider p = mInstalledProviders.get(i);
- AppWidgetProviderInfo info = p.info;
- pw.print(" ["); pw.print(i); pw.print("] provider ");
- pw.print(info.provider.flattenToShortString());
- pw.println(':');
- pw.print(" min=("); pw.print(info.minWidth);
- pw.print("x"); pw.print(info.minHeight);
- pw.print(") minResize=("); pw.print(info.minResizeWidth);
- pw.print("x"); pw.print(info.minResizeHeight);
- pw.print(") updatePeriodMillis=");
- pw.print(info.updatePeriodMillis);
- pw.print(" resizeMode=");
- pw.print(info.resizeMode);
- pw.print(" autoAdvanceViewId=");
- pw.print(info.autoAdvanceViewId);
- pw.print(" initialLayout=#");
- pw.print(Integer.toHexString(info.initialLayout));
- pw.print(" zombie="); pw.println(p.zombie);
+ dumpProvider(mInstalledProviders.get(i), i, pw);
}
N = mAppWidgetIds.size();
pw.println(" ");
pw.println("AppWidgetIds:");
for (int i=0; i<N; i++) {
- AppWidgetId id = mAppWidgetIds.get(i);
- pw.print(" ["); pw.print(i); pw.print("] id=");
- pw.println(id.appWidgetId);
- pw.print(" hostId=");
- pw.print(id.host.hostId); pw.print(' ');
- pw.print(id.host.packageName); pw.print('/');
- pw.println(id.host.uid);
- if (id.provider != null) {
- pw.print(" provider=");
- pw.println(id.provider.info.provider.flattenToShortString());
- }
- if (id.host != null) {
- pw.print(" host.callbacks="); pw.println(id.host.callbacks);
- }
- if (id.views != null) {
- pw.print(" views="); pw.println(id.views);
- }
+ dumpAppWidgetId(mAppWidgetIds.get(i), i, pw);
}
N = mHosts.size();
pw.println(" ");
pw.println("Hosts:");
for (int i=0; i<N; i++) {
- Host host = mHosts.get(i);
- pw.print(" ["); pw.print(i); pw.print("] hostId=");
- pw.print(host.hostId); pw.print(' ');
- pw.print(host.packageName); pw.print('/');
- pw.print(host.uid); pw.println(':');
- pw.print(" callbacks="); pw.println(host.callbacks);
- pw.print(" instances.size="); pw.print(host.instances.size());
- pw.print(" zombie="); pw.println(host.zombie);
+ dumpHost(mHosts.get(i), i, pw);
+ }
+
+ N = mDeletedProviders.size();
+ pw.println(" ");
+ pw.println("Deleted Providers:");
+ for (int i=0; i<N; i++) {
+ dumpProvider(mDeletedProviders.get(i), i, pw);
+ }
+
+ N = mDeletedHosts.size();
+ pw.println(" ");
+ pw.println("Deleted Hosts:");
+ for (int i=0; i<N; i++) {
+ dumpHost(mDeletedHosts.get(i), i, pw);
}
}
}
@@ -363,6 +390,7 @@
}
host.instances.clear();
mHosts.remove(host);
+ mDeletedHosts.add(host);
// it's gone or going away, abruptly drop the callback connection
host.callbacks = null;
}
@@ -934,6 +962,7 @@
}
p.instances.clear();
mInstalledProviders.remove(index);
+ mDeletedProviders.add(p);
// no need to send the DISABLE broadcast, since the receiver is gone anyway
cancelBroadcasts(p);
}
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index e30ce72..f9f5458 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -228,6 +228,7 @@
// completed.
final Object mAgentConnectLock = new Object();
IBackupAgent mConnectedAgent;
+ volatile boolean mBackupRunning;
volatile boolean mConnecting;
volatile long mLastBackupPass;
volatile long mNextBackupPass;
@@ -325,14 +326,16 @@
public boolean includeApks;
public boolean includeShared;
public boolean allApps;
+ public boolean includeSystem;
public String[] packages;
FullBackupParams(ParcelFileDescriptor output, boolean saveApks, boolean saveShared,
- boolean doAllApps, String[] pkgList) {
+ boolean doAllApps, boolean doSystem, String[] pkgList) {
fd = output;
includeApks = saveApks;
includeShared = saveShared;
allApps = doAllApps;
+ includeSystem = doSystem;
packages = pkgList;
}
}
@@ -432,6 +435,9 @@
IBackupTransport transport = getTransport(mCurrentTransport);
if (transport == null) {
Slog.v(TAG, "Backup requested but no transport available");
+ synchronized (mQueueLock) {
+ mBackupRunning = false;
+ }
mWakelock.release();
break;
}
@@ -468,6 +474,9 @@
sendMessage(pbtMessage);
} else {
Slog.v(TAG, "Backup requested but nothing pending");
+ synchronized (mQueueLock) {
+ mBackupRunning = false;
+ }
mWakelock.release();
}
break;
@@ -504,7 +513,7 @@
PerformFullBackupTask task = new PerformFullBackupTask(params.fd,
params.observer, params.includeApks,
params.includeShared, params.curPassword, params.encryptPassword,
- params.allApps, params.packages, params.latch);
+ params.allApps, params.includeSystem, params.packages, params.latch);
(new Thread(task)).start();
break;
}
@@ -802,14 +811,19 @@
// Don't run backups now if we're disabled or not yet
// fully set up.
if (mEnabled && mProvisioned) {
- if (DEBUG) Slog.v(TAG, "Running a backup pass");
+ if (!mBackupRunning) {
+ if (DEBUG) Slog.v(TAG, "Running a backup pass");
- // Acquire the wakelock and pass it to the backup thread. it will
- // be released once backup concludes.
- mWakelock.acquire();
+ // Acquire the wakelock and pass it to the backup thread. it will
+ // be released once backup concludes.
+ mBackupRunning = true;
+ mWakelock.acquire();
- Message msg = mBackupHandler.obtainMessage(MSG_RUN_BACKUP);
- mBackupHandler.sendMessage(msg);
+ Message msg = mBackupHandler.obtainMessage(MSG_RUN_BACKUP);
+ mBackupHandler.sendMessage(msg);
+ } else {
+ Slog.i(TAG, "Backup time but one already running");
+ }
} else {
Slog.w(TAG, "Backup pass but e=" + mEnabled + " p=" + mProvisioned);
}
@@ -1946,9 +1960,17 @@
writeRestoreTokens();
}
- // Set up the next backup pass
- if (mStatus == BackupConstants.TRANSPORT_NOT_INITIALIZED) {
- backupNow();
+ // Set up the next backup pass - at this point we can set mBackupRunning
+ // to false to allow another pass to fire, because we're done with the
+ // state machine sequence and the wakelock is refcounted.
+ synchronized (mQueueLock) {
+ mBackupRunning = false;
+ if (mStatus == BackupConstants.TRANSPORT_NOT_INITIALIZED) {
+ // Make sure we back up everything and perform the one-time init
+ clearMetadata();
+ if (DEBUG) Slog.d(TAG, "Server requires init; rerunning");
+ backupNow();
+ }
}
// Only once we're entirely finished do we release the wakelock
@@ -1956,6 +1978,12 @@
mWakelock.release();
}
+ // Remove the PM metadata state. This will generate an init on the next pass.
+ void clearMetadata() {
+ final File pmState = new File(mStateDir, PACKAGE_MANAGER_SENTINEL);
+ if (pmState.exists()) pmState.delete();
+ }
+
// Invoke an agent's doBackup() and start a timeout message spinning on the main
// handler in case it doesn't get back to us.
int invokeAgentForBackup(String packageName, IBackupAgent agent,
@@ -2161,6 +2189,7 @@
boolean mIncludeApks;
boolean mIncludeShared;
boolean mAllApps;
+ final boolean mIncludeSystem;
String[] mPackages;
String mCurrentPassword;
String mEncryptPassword;
@@ -2219,13 +2248,14 @@
PerformFullBackupTask(ParcelFileDescriptor fd, IFullBackupRestoreObserver observer,
boolean includeApks, boolean includeShared, String curPassword,
- String encryptPassword, boolean doAllApps, String[] packages,
+ String encryptPassword, boolean doAllApps, boolean doSystem, String[] packages,
AtomicBoolean latch) {
mOutputFile = fd;
mObserver = observer;
mIncludeApks = includeApks;
mIncludeShared = includeShared;
mAllApps = doAllApps;
+ mIncludeSystem = doSystem;
mPackages = packages;
mCurrentPassword = curPassword;
// when backing up, if there is a current backup password, we require that
@@ -2245,7 +2275,7 @@
@Override
public void run() {
- final List<PackageInfo> packagesToBackup;
+ List<PackageInfo> packagesToBackup = new ArrayList<PackageInfo>();
Slog.i(TAG, "--- Performing full-dataset backup ---");
sendStartBackup();
@@ -2254,8 +2284,23 @@
if (mAllApps) {
packagesToBackup = mPackageManager.getInstalledPackages(
PackageManager.GET_SIGNATURES);
- } else {
- packagesToBackup = new ArrayList<PackageInfo>();
+ // Exclude system apps if we've been asked to do so
+ if (mIncludeSystem == false) {
+ for (int i = 0; i < packagesToBackup.size(); ) {
+ PackageInfo pkg = packagesToBackup.get(i);
+ if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ packagesToBackup.remove(i);
+ } else {
+ i++;
+ }
+ }
+ }
+ }
+
+ // Now process the command line argument packages, if any. Note that explicitly-
+ // named system-partition packages will be included even if includeSystem was
+ // set to false.
+ if (mPackages != null) {
for (String pkgName : mPackages) {
try {
packagesToBackup.add(mPackageManager.getPackageInfo(pkgName,
@@ -2268,8 +2313,8 @@
// Cull any packages that have indicated that backups are not permitted.
for (int i = 0; i < packagesToBackup.size(); ) {
- PackageInfo info = packagesToBackup.get(i);
- if ((info.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_BACKUP) == 0) {
+ PackageInfo pkg = packagesToBackup.get(i);
+ if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_BACKUP) == 0) {
packagesToBackup.remove(i);
} else {
i++;
@@ -2381,8 +2426,8 @@
mLatchObject.notifyAll();
}
sendEndBackup();
- mWakelock.release();
if (DEBUG) Slog.d(TAG, "Full backup pass complete.");
+ mWakelock.release();
}
}
@@ -2889,8 +2934,8 @@
mLatchObject.notifyAll();
}
sendEndRestore();
- mWakelock.release();
Slog.d(TAG, "Full restore pass complete.");
+ mWakelock.release();
}
}
@@ -4781,7 +4826,7 @@
// to the supplied file descriptor. This method is synchronous and does not return
// to the caller until the backup has been completed.
public void fullBackup(ParcelFileDescriptor fd, boolean includeApks, boolean includeShared,
- boolean doAllApps, String[] pkgList) {
+ boolean doAllApps, boolean includeSystem, String[] pkgList) {
mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "fullBackup");
// Validate
@@ -4811,7 +4856,7 @@
Slog.i(TAG, "Beginning full backup...");
FullBackupParams params = new FullBackupParams(fd, includeApks, includeShared,
- doAllApps, pkgList);
+ doAllApps, includeSystem, pkgList);
final int token = generateToken();
synchronized (mFullConfirmations) {
mFullConfirmations.put(token, params);
@@ -5596,12 +5641,23 @@
}
private void dumpInternal(PrintWriter pw) {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump Backup Manager service from from pid="
+ + Binder.getCallingPid()
+ + ", uid=" + Binder.getCallingUid()
+ + " without permission "
+ + android.Manifest.permission.DUMP);
+ return;
+ }
+
synchronized (mQueueLock) {
pw.println("Backup Manager is " + (mEnabled ? "enabled" : "disabled")
+ " / " + (!mProvisioned ? "not " : "") + "provisioned / "
+ (this.mPendingInits.size() == 0 ? "not " : "") + "pending init");
pw.println("Auto-restore is " + (mAutoRestore ? "enabled" : "disabled"));
- pw.println("Last backup pass: " + mLastBackupPass
+ if (mBackupRunning) pw.println("Backup currently running");
+ pw.println("Last backup pass started: " + mLastBackupPass
+ " (now = " + System.currentTimeMillis() + ')');
pw.println(" next scheduled: " + mNextBackupPass);
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 991b7da..498bdfc 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -73,6 +73,7 @@
import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
import com.android.internal.telephony.Phone;
+import com.android.server.am.BatteryStatsService;
import com.android.server.connectivity.Tethering;
import com.android.server.connectivity.Vpn;
import com.google.android.collect.Lists;
@@ -284,6 +285,9 @@
// track the current default http proxy - tell the world if we get a new one (real change)
private ProxyProperties mDefaultProxy = null;
+ private Object mDefaultProxyLock = new Object();
+ private boolean mDefaultProxyDisabled = false;
+
// track the global proxy.
private ProxyProperties mGlobalProxy = null;
private final Object mGlobalProxyLock = new Object();
@@ -1646,11 +1650,11 @@
}
private void handleConnect(NetworkInfo info) {
- int type = info.getType();
+ final int type = info.getType();
// snapshot isFailover, because sendConnectedBroadcast() resets it
boolean isFailover = info.isFailover();
- NetworkStateTracker thisNet = mNetTrackers[type];
+ final NetworkStateTracker thisNet = mNetTrackers[type];
// if this is a default net and other default is running
// kill the one not preferred
@@ -1707,6 +1711,16 @@
updateNetworkSettings(thisNet);
handleConnectivityChange(type, false);
sendConnectedBroadcastDelayed(info, getConnectivityChangeDelay());
+
+ // notify battery stats service about this network
+ final String iface = thisNet.getLinkProperties().getInterfaceName();
+ if (iface != null) {
+ try {
+ BatteryStatsService.getService().noteNetworkInterfaceType(iface, type);
+ } catch (RemoteException e) {
+ // ignored; service lives in system_server
+ }
+ }
}
/**
@@ -1770,7 +1784,7 @@
}
}
if (mNetConfigs[netType].isDefault()) {
- handleApplyDefaultProxy(netType);
+ handleApplyDefaultProxy(newLp.getHttpProxy());
}
} else {
if (VDBG) {
@@ -1975,8 +1989,7 @@
Integer pid = (Integer)pids.get(j);
if (pid.intValue() == myPid) {
Collection<InetAddress> dnses = p.getDnses();
- String proto = determineProto(p);
- writePidDns(dnses, myPid, proto);
+ writePidDns(dnses, myPid);
if (doBump) {
bumpDns();
}
@@ -1986,9 +1999,6 @@
}
}
// nothing found - delete
- if (SystemProperties.get("net.dnsproto." + myPid).length() != 0) {
- SystemProperties.set("net.dnsproto." + myPid, "");
- }
for (int i = 1; ; i++) {
String prop = "net.dns" + i + "." + myPid;
if (SystemProperties.get(prop).length() == 0) {
@@ -2002,7 +2012,7 @@
}
// return true if results in a change
- private boolean writePidDns(Collection <InetAddress> dnses, int pid, String proto) {
+ private boolean writePidDns(Collection <InetAddress> dnses, int pid) {
int j = 1;
boolean changed = false;
for (InetAddress dns : dnses) {
@@ -2012,11 +2022,6 @@
SystemProperties.set("net.dns" + j++ + "." + pid, dns.getHostAddress());
}
}
- if (dnses.size() > 0 && (changed || !proto.equals(SystemProperties.get("net.dnsproto." +
- pid)))) {
- changed = true;
- SystemProperties.set("net.dnsproto." + pid, proto);
- }
return changed;
}
@@ -2047,7 +2052,7 @@
// Caller must grab mDnsLock.
private boolean updateDns(String network, String iface,
- Collection<InetAddress> dnses, String domains, String proto) {
+ Collection<InetAddress> dnses, String domains) {
boolean changed = false;
int last = 0;
if (dnses.size() == 0 && mDefaultDns != null) {
@@ -2083,11 +2088,6 @@
}
mNumDnsEntries = last;
- if (changed || !proto.equals(SystemProperties.get("net.dnsproto"))) {
- changed = true;
- SystemProperties.set("net.dnsproto", proto);
- }
-
if (changed) {
try {
mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses));
@@ -2111,14 +2111,11 @@
if (p == null) return;
Collection<InetAddress> dnses = p.getDnses();
boolean changed = false;
- String proto = determineProto(p);
-
if (mNetConfigs[netType].isDefault()) {
String network = nt.getNetworkInfo().getTypeName();
synchronized (mDnsLock) {
if (!mDnsOverridden) {
- changed = updateDns(network, p.getInterfaceName(), dnses, "",
- proto);
+ changed = updateDns(network, p.getInterfaceName(), dnses, "");
}
}
} else {
@@ -2132,35 +2129,13 @@
List pids = mNetRequestersPids[netType];
for (int y=0; y< pids.size(); y++) {
Integer pid = (Integer)pids.get(y);
- changed = writePidDns(dnses, pid.intValue(), proto);
+ changed = writePidDns(dnses, pid.intValue());
}
}
if (changed) bumpDns();
}
}
- private String determineProto(LinkProperties p) {
- boolean v4 = false;
- boolean v6 = false;
- for (RouteInfo r : p.getRoutes()) {
- if (r.getDestination().getAddress() instanceof Inet6Address) {
- v6 = true;
- } else {
- v4 = true;
- }
- }
- // secondary connections often don't have routes and we infer routes
- // to the dns servers. Look at the dns addrs too
- for (InetAddress i : p.getDnses()) {
- if (i instanceof Inet6Address) {
- v6 = true;
- } else {
- v4 = true;
- }
- }
- return (v4 ? "v4" : "") + (v6 ? "v6" : "");
- }
-
private int getRestoreDefaultNetworkDelay(int networkType) {
String restoreDefaultNetworkDelayStr = SystemProperties.get(
NETWORK_RESTORE_DELAY_PROP_NAME);
@@ -2588,10 +2563,10 @@
return;
}
- public synchronized ProxyProperties getProxy() {
- if (mGlobalProxy != null) return mGlobalProxy;
- if (mDefaultProxy != null) return mDefaultProxy;
- return null;
+ public ProxyProperties getProxy() {
+ synchronized (mDefaultProxyLock) {
+ return mDefaultProxyDisabled ? null : mDefaultProxy;
+ }
}
public void setGlobalProxy(ProxyProperties proxyProperties) {
@@ -2622,7 +2597,7 @@
if (mGlobalProxy == null) {
proxyProperties = mDefaultProxy;
}
- sendProxyBroadcast(proxyProperties);
+ //sendProxyBroadcast(proxyProperties);
}
private void loadGlobalProxy() {
@@ -2645,23 +2620,19 @@
}
}
- private void handleApplyDefaultProxy(int type) {
- // check if new default - push it out to all VM if so
- ProxyProperties proxy = mNetTrackers[type].getLinkProperties().getHttpProxy();
- synchronized (this) {
+ private void handleApplyDefaultProxy(ProxyProperties proxy) {
+ if (proxy != null && TextUtils.isEmpty(proxy.getHost())) {
+ proxy = null;
+ }
+ synchronized (mDefaultProxyLock) {
if (mDefaultProxy != null && mDefaultProxy.equals(proxy)) return;
if (mDefaultProxy == proxy) return;
- if (proxy != null && !TextUtils.isEmpty(proxy.getHost())) {
- mDefaultProxy = proxy;
- } else {
- mDefaultProxy = null;
+ mDefaultProxy = proxy;
+
+ if (!mDefaultProxyDisabled) {
+ sendProxyBroadcast(proxy);
}
}
- if (VDBG) log("changing default proxy to " + proxy);
-
- // global trumps default, if set, ignore this.
- if (mGlobalProxy != null) return;
- sendProxyBroadcast(proxy);
}
private void handleDeprecatedGlobalHttpProxy() {
@@ -2882,24 +2853,37 @@
// Apply DNS changes.
boolean changed = false;
synchronized (mDnsLock) {
- changed = updateDns("VPN", "VPN", addresses, domains, "v4");
+ changed = updateDns("VPN", "VPN", addresses, domains);
mDnsOverridden = true;
}
if (changed) {
bumpDns();
}
- // TODO: temporarily remove http proxy?
+ // Temporarily disable the default proxy.
+ synchronized (mDefaultProxyLock) {
+ mDefaultProxyDisabled = true;
+ if (mDefaultProxy != null) {
+ sendProxyBroadcast(null);
+ }
+ }
+
+ // TODO: support proxy per network.
}
public void restore() {
synchronized (mDnsLock) {
- if (!mDnsOverridden) {
- return;
+ if (mDnsOverridden) {
+ mDnsOverridden = false;
+ mHandler.sendEmptyMessage(EVENT_RESTORE_DNS);
}
- mDnsOverridden = false;
}
- mHandler.sendEmptyMessage(EVENT_RESTORE_DNS);
+ synchronized (mDefaultProxyLock) {
+ mDefaultProxyDisabled = false;
+ if (mDefaultProxy != null) {
+ sendProxyBroadcast(mDefaultProxy);
+ }
+ }
}
}
}
diff --git a/services/java/com/android/server/EventLogTags.logtags b/services/java/com/android/server/EventLogTags.logtags
index 99f6b8e..a7eff93 100644
--- a/services/java/com/android/server/EventLogTags.logtags
+++ b/services/java/com/android/server/EventLogTags.logtags
@@ -142,5 +142,5 @@
# ---------------------------
# NetworkStatsService.java
# ---------------------------
-51100 netstats_mobile_sample (iface_rx_bytes|2|2),(iface_tx_bytes|2|2),(iface_rx_pkts|2|1),(iface_tx_pkts|2|1),(uid_rx_bytes|2|2),(uid_tx_bytes|2|2),(uid_rx_pkts|2|1),(uid_tx_pkts|2|1)
-51101 netstats_wifi_sample (iface_rx_bytes|2|2),(iface_tx_bytes|2|2),(iface_rx_pkts|2|1),(iface_tx_pkts|2|1),(uid_rx_bytes|2|2),(uid_tx_bytes|2|2),(uid_rx_pkts|2|1),(uid_tx_pkts|2|1)
+51100 netstats_mobile_sample (dev_rx_bytes|2|2),(dev_tx_bytes|2|2),(dev_rx_pkts|2|1),(dev_tx_pkts|2|1),(xt_rx_bytes|2|2),(xt_tx_bytes|2|2),(xt_rx_pkts|2|1),(xt_tx_pkts|2|1),(uid_rx_bytes|2|2),(uid_tx_bytes|2|2),(uid_rx_pkts|2|1),(uid_tx_pkts|2|1),(trusted_time|2|3)
+51101 netstats_wifi_sample (dev_rx_bytes|2|2),(dev_tx_bytes|2|2),(dev_rx_pkts|2|1),(dev_tx_pkts|2|1),(xt_rx_bytes|2|2),(xt_tx_bytes|2|2),(xt_rx_pkts|2|1),(xt_tx_pkts|2|1),(uid_rx_bytes|2|2),(uid_tx_bytes|2|2),(uid_rx_pkts|2|1),(uid_tx_pkts|2|1),(trusted_time|2|3)
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 146bc94..6ddbf5a 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -574,7 +574,7 @@
}
}
if (defIm == null && mMethodList.size() > 0) {
- defIm = mMethodList.get(0);
+ defIm = getMostApplicableDefaultIMELocked();
Slog.i(TAG, "No default found, using " + defIm.getId());
}
if (defIm != null) {
@@ -1362,13 +1362,14 @@
mInputShown = true;
res = true;
} else if (mHaveConnection && SystemClock.uptimeMillis()
- < (mLastBindTime+TIME_TO_RECONNECT)) {
+ >= (mLastBindTime+TIME_TO_RECONNECT)) {
// The client has asked to have the input method shown, but
// we have been sitting here too long with a connection to the
// service and no interface received, so let's disconnect/connect
// to try to prod things along.
EventLog.writeEvent(EventLogTags.IMF_FORCE_RECONNECT_IME, mCurMethodId,
SystemClock.uptimeMillis()-mLastBindTime,1);
+ Slog.w(TAG, "Force disconnect/connect to the IME in showCurrentInputLocked()");
mContext.unbindService(this);
mContext.bindService(mCurIntent, this, Context.BIND_AUTO_CREATE);
}
@@ -1924,19 +1925,26 @@
return subtypes;
}
- private boolean chooseNewDefaultIMELocked() {
+ private InputMethodInfo getMostApplicableDefaultIMELocked() {
List<InputMethodInfo> enabled = mSettings.getEnabledInputMethodListLocked();
if (enabled != null && enabled.size() > 0) {
// We'd prefer to fall back on a system IME, since that is safer.
int i=enabled.size();
while (i > 0) {
i--;
- if ((enabled.get(i).getServiceInfo().applicationInfo.flags
- & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ final InputMethodInfo imi = enabled.get(i);
+ if (isSystemIme(imi) && !imi.isAuxiliaryIme()) {
break;
}
}
- InputMethodInfo imi = enabled.get(i);
+ return enabled.get(i);
+ }
+ return null;
+ }
+
+ private boolean chooseNewDefaultIMELocked() {
+ final InputMethodInfo imi = getMostApplicableDefaultIMELocked();
+ if (imi != null) {
if (DEBUG) {
Slog.d(TAG, "New default IME was selected: " + imi.getId());
}
@@ -2425,7 +2433,7 @@
final List<InputMethodSubtype> subtypes = getSubtypes(imi);
final String systemLocale = res.getConfiguration().locale.toString();
if (TextUtils.isEmpty(systemLocale)) return new ArrayList<InputMethodSubtype>();
- HashMap<String, InputMethodSubtype> applicableModeAndSubtypesMap =
+ final HashMap<String, InputMethodSubtype> applicableModeAndSubtypesMap =
new HashMap<String, InputMethodSubtype>();
final int N = subtypes.size();
boolean containsKeyboardSubtype = false;
@@ -2443,7 +2451,7 @@
return new ArrayList<InputMethodSubtype>(applicableModeAndSubtypesMap.values());
}
for (int i = 0; i < N; ++i) {
- InputMethodSubtype subtype = subtypes.get(i);
+ final InputMethodSubtype subtype = subtypes.get(i);
final String locale = subtype.getLocale();
final String mode = subtype.getMode();
// When system locale starts with subtype's locale, that subtype will be applicable
@@ -2455,10 +2463,12 @@
// need to find applicable subtypes aggressively unlike
// findLastResortApplicableSubtypeLocked.
if (systemLocale.startsWith(locale)) {
- InputMethodSubtype applicableSubtype = applicableModeAndSubtypesMap.get(mode);
+ final InputMethodSubtype applicableSubtype = applicableModeAndSubtypesMap.get(mode);
// If more applicable subtypes are contained, skip.
- if (applicableSubtype != null
- && systemLocale.equals(applicableSubtype.getLocale())) continue;
+ if (applicableSubtype != null) {
+ if (systemLocale.equals(applicableSubtype.getLocale())) continue;
+ if (!systemLocale.equals(locale)) continue;
+ }
applicableModeAndSubtypesMap.put(mode, subtype);
if (!containsKeyboardSubtype
&& SUBTYPE_MODE_KEYBOARD.equalsIgnoreCase(subtype.getMode())) {
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 6fcf399..bcb1aa2 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -18,13 +18,12 @@
import static android.Manifest.permission.DUMP;
import static android.Manifest.permission.MANAGE_NETWORK_POLICY;
-import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
+import static android.net.TrafficStats.UID_TETHERING;
import static android.provider.Settings.Secure.NETSTATS_ENABLED;
import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENABLED;
-import static com.android.server.NetworkManagementSocketTagger.kernelToTag;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -45,8 +44,7 @@
import android.util.Slog;
import android.util.SparseBooleanArray;
-import com.google.android.collect.Lists;
-import com.google.android.collect.Maps;
+import com.android.internal.net.NetworkStatsFactory;
import com.google.android.collect.Sets;
import java.io.BufferedReader;
@@ -54,21 +52,17 @@
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
-import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import java.util.concurrent.CountDownLatch;
-import libcore.io.IoUtils;
-
/**
* @hide
*/
@@ -81,33 +75,12 @@
private static final int ADD = 1;
private static final int REMOVE = 2;
- /** Path to {@code /proc/uid_stat}. */
- @Deprecated
- private final File mStatsUid;
- /** Path to {@code /proc/net/dev}. */
- private final File mStatsIface;
- /** Path to {@code /proc/net/xt_qtaguid/stats}. */
- private final File mStatsXtUid;
- /** Path to {@code /proc/net/xt_qtaguid/iface_stat}. */
- private final File mStatsXtIface;
-
/**
* Name representing {@link #setGlobalAlert(long)} limit when delivered to
* {@link INetworkManagementEventObserver#limitReached(String, String)}.
*/
public static final String LIMIT_GLOBAL_ALERT = "globalAlert";
- /** {@link #mStatsXtUid} headers. */
- private static final String KEY_IDX = "idx";
- private static final String KEY_IFACE = "iface";
- private static final String KEY_UID = "uid_tag_int";
- private static final String KEY_COUNTER_SET = "cnt_set";
- private static final String KEY_TAG_HEX = "acct_tag_hex";
- private static final String KEY_RX_BYTES = "rx_bytes";
- private static final String KEY_RX_PACKETS = "rx_packets";
- private static final String KEY_TX_BYTES = "tx_bytes";
- private static final String KEY_TX_PACKETS = "tx_packets";
-
class NetdResponseCode {
/* Keep in sync with system/netd/ResponseCode.h */
public static final int InterfaceListResult = 110;
@@ -146,6 +119,8 @@
// TODO: replace with RemoteCallbackList
private ArrayList<INetworkManagementEventObserver> mObservers;
+ private final NetworkStatsFactory mStatsFactory = new NetworkStatsFactory();
+
private Object mQuotaLock = new Object();
/** Set of interfaces with active quotas. */
private HashSet<String> mActiveQuotaIfaces = Sets.newHashSet();
@@ -161,15 +136,10 @@
*
* @param context Binder context for this service
*/
- private NetworkManagementService(Context context, File procRoot) {
+ private NetworkManagementService(Context context) {
mContext = context;
mObservers = new ArrayList<INetworkManagementEventObserver>();
- mStatsUid = new File(procRoot, "uid_stat");
- mStatsIface = new File(procRoot, "net/dev");
- mStatsXtUid = new File(procRoot, "net/xt_qtaguid/stats");
- mStatsXtIface = new File(procRoot, "net/xt_qtaguid/iface_stat");
-
if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
return;
}
@@ -183,8 +153,7 @@
}
public static NetworkManagementService create(Context context) throws InterruptedException {
- NetworkManagementService service = new NetworkManagementService(
- context, new File("/proc/"));
+ NetworkManagementService service = new NetworkManagementService(context);
if (DBG) Slog.d(TAG, "Creating NetworkManagementService");
service.mThread.start();
if (DBG) Slog.d(TAG, "Awaiting socket connection");
@@ -193,15 +162,6 @@
return service;
}
- // @VisibleForTesting
- public static NetworkManagementService createForTest(
- Context context, File procRoot, boolean bandwidthControlEnabled) {
- // TODO: eventually connect with mock netd
- final NetworkManagementService service = new NetworkManagementService(context, procRoot);
- service.mBandwidthControlEnabled = bandwidthControlEnabled;
- return service;
- }
-
public void systemReady() {
// only enable bandwidth control when support exists, and requested by
// system setting.
@@ -215,7 +175,7 @@
mConnector.doCommand("bandwidth enable");
mBandwidthControlEnabled = true;
} catch (NativeDaemonConnectorException e) {
- Slog.e(TAG, "problem enabling bandwidth controls", e);
+ Log.wtf(TAG, "problem enabling bandwidth controls", e);
}
} else {
Slog.d(TAG, "not enabling bandwidth control");
@@ -278,6 +238,11 @@
* Notify our observers of an interface removal.
*/
private void notifyInterfaceRemoved(String iface) {
+ // netd already clears out quota and alerts for removed ifaces; update
+ // our sanity-checking state.
+ mActiveAlertIfaces.remove(iface);
+ mActiveQuotaIfaces.remove(iface);
+
for (INetworkManagementEventObserver obs : mObservers) {
try {
obs.interfaceRemoved(iface);
@@ -508,6 +473,28 @@
}
}
+ public void enableIpv6(String iface) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
+ try {
+ mConnector.doCommand(String.format("interface ipv6 %s enable", iface));
+ } catch (NativeDaemonConnectorException e) {
+ throw new IllegalStateException(
+ "Unable to communicate to native daemon for enabling ipv6");
+ }
+ }
+
+ public void disableIpv6(String iface) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
+ try {
+ mConnector.doCommand(String.format("interface ipv6 %s disable", iface));
+ } catch (NativeDaemonConnectorException e) {
+ throw new IllegalStateException(
+ "Unable to communicate to native daemon for disabling ipv6");
+ }
+ }
+
public void addRoute(String interfaceName, RouteInfo route) {
modifyRoute(interfaceName, ADD, route);
}
@@ -1048,101 +1035,14 @@
public NetworkStats getNetworkStatsSummary() {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NETWORK_STATE, "NetworkManagementService");
-
- final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
- final NetworkStats.Entry entry = new NetworkStats.Entry();
-
- final HashSet<String> knownIfaces = Sets.newHashSet();
- final HashSet<String> activeIfaces = Sets.newHashSet();
-
- // collect any historical stats and active state
- // TODO: migrate to reading from single file
- if (mBandwidthControlEnabled) {
- for (String iface : fileListWithoutNull(mStatsXtIface)) {
- final File ifacePath = new File(mStatsXtIface, iface);
-
- final long active = readSingleLongFromFile(new File(ifacePath, "active"));
- if (active == 1) {
- knownIfaces.add(iface);
- activeIfaces.add(iface);
- } else if (active == 0) {
- knownIfaces.add(iface);
- } else {
- continue;
- }
-
- entry.iface = iface;
- entry.uid = UID_ALL;
- entry.set = SET_DEFAULT;
- entry.tag = TAG_NONE;
- entry.rxBytes = readSingleLongFromFile(new File(ifacePath, "rx_bytes"));
- entry.rxPackets = readSingleLongFromFile(new File(ifacePath, "rx_packets"));
- entry.txBytes = readSingleLongFromFile(new File(ifacePath, "tx_bytes"));
- entry.txPackets = readSingleLongFromFile(new File(ifacePath, "tx_packets"));
-
- stats.addValues(entry);
- }
- }
-
- final ArrayList<String> values = Lists.newArrayList();
-
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(mStatsIface));
-
- // skip first two header lines
- reader.readLine();
- reader.readLine();
-
- // parse remaining lines
- String line;
- while ((line = reader.readLine()) != null) {
- splitLine(line, values);
-
- try {
- entry.iface = values.get(0);
- entry.uid = UID_ALL;
- entry.set = SET_DEFAULT;
- entry.tag = TAG_NONE;
- entry.rxBytes = Long.parseLong(values.get(1));
- entry.rxPackets = Long.parseLong(values.get(2));
- entry.txBytes = Long.parseLong(values.get(9));
- entry.txPackets = Long.parseLong(values.get(10));
-
- if (activeIfaces.contains(entry.iface)) {
- // combine stats when iface is active
- stats.combineValues(entry);
- } else if (!knownIfaces.contains(entry.iface)) {
- // add stats when iface is unknown
- stats.addValues(entry);
- }
- } catch (NumberFormatException e) {
- Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
- }
- }
- } catch (NullPointerException e) {
- throw new IllegalStateException("problem parsing stats: " + e);
- } catch (NumberFormatException e) {
- throw new IllegalStateException("problem parsing stats: " + e);
- } catch (IOException e) {
- throw new IllegalStateException("problem parsing stats: " + e);
- } finally {
- IoUtils.closeQuietly(reader);
- }
-
- return stats;
+ return mStatsFactory.readNetworkStatsSummary();
}
@Override
public NetworkStats getNetworkStatsDetail() {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NETWORK_STATE, "NetworkManagementService");
-
- if (mBandwidthControlEnabled) {
- return getNetworkStatsDetailNetfilter(UID_ALL);
- } else {
- return getNetworkStatsDetailUidstat(UID_ALL);
- }
+ return mStatsFactory.readNetworkStatsDetail(UID_ALL);
}
@Override
@@ -1325,126 +1225,7 @@
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NETWORK_STATE, "NetworkManagementService");
}
-
- if (mBandwidthControlEnabled) {
- return getNetworkStatsDetailNetfilter(uid);
- } else {
- return getNetworkStatsDetailUidstat(uid);
- }
- }
-
- /**
- * Build {@link NetworkStats} with detailed UID statistics.
- */
- private NetworkStats getNetworkStatsDetailNetfilter(int limitUid) {
- final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 24);
- final NetworkStats.Entry entry = new NetworkStats.Entry();
-
- // TODO: remove knownLines check once 5087722 verified
- final HashSet<String> knownLines = Sets.newHashSet();
- // TODO: remove lastIdx check once 5270106 verified
- int lastIdx;
-
- final ArrayList<String> keys = Lists.newArrayList();
- final ArrayList<String> values = Lists.newArrayList();
- final HashMap<String, String> parsed = Maps.newHashMap();
-
- BufferedReader reader = null;
- String line = null;
- try {
- reader = new BufferedReader(new FileReader(mStatsXtUid));
-
- // parse first line as header
- line = reader.readLine();
- splitLine(line, keys);
- lastIdx = 1;
-
- // parse remaining lines
- while ((line = reader.readLine()) != null) {
- splitLine(line, values);
- parseLine(keys, values, parsed);
-
- if (!knownLines.add(line)) {
- throw new IllegalStateException("duplicate proc entry: " + line);
- }
-
- final int idx = getParsedInt(parsed, KEY_IDX);
- if (idx != lastIdx + 1) {
- throw new IllegalStateException(
- "inconsistent idx=" + idx + " after lastIdx=" + lastIdx);
- }
- lastIdx = idx;
-
- entry.iface = parsed.get(KEY_IFACE);
- entry.uid = getParsedInt(parsed, KEY_UID);
- entry.set = getParsedInt(parsed, KEY_COUNTER_SET);
- entry.tag = kernelToTag(parsed.get(KEY_TAG_HEX));
- entry.rxBytes = getParsedLong(parsed, KEY_RX_BYTES);
- entry.rxPackets = getParsedLong(parsed, KEY_RX_PACKETS);
- entry.txBytes = getParsedLong(parsed, KEY_TX_BYTES);
- entry.txPackets = getParsedLong(parsed, KEY_TX_PACKETS);
-
- if (limitUid == UID_ALL || limitUid == entry.uid) {
- stats.addValues(entry);
- }
- }
- } catch (NullPointerException e) {
- throw new IllegalStateException("problem parsing line: " + line, e);
- } catch (NumberFormatException e) {
- throw new IllegalStateException("problem parsing line: " + line, e);
- } catch (IOException e) {
- throw new IllegalStateException("problem parsing line: " + line, e);
- } finally {
- IoUtils.closeQuietly(reader);
- }
-
- return stats;
- }
-
- private static int getParsedInt(HashMap<String, String> parsed, String key) {
- final String value = parsed.get(key);
- return value != null ? Integer.parseInt(value) : 0;
- }
-
- private static long getParsedLong(HashMap<String, String> parsed, String key) {
- final String value = parsed.get(key);
- return value != null ? Long.parseLong(value) : 0;
- }
-
- /**
- * Build {@link NetworkStats} with detailed UID statistics.
- *
- * @deprecated since this uses older "uid_stat" data, and doesn't provide
- * tag-level granularity or additional variables.
- */
- @Deprecated
- private NetworkStats getNetworkStatsDetailUidstat(int limitUid) {
- final String[] knownUids;
- if (limitUid == UID_ALL) {
- knownUids = fileListWithoutNull(mStatsUid);
- } else {
- knownUids = new String[] { String.valueOf(limitUid) };
- }
-
- final NetworkStats stats = new NetworkStats(
- SystemClock.elapsedRealtime(), knownUids.length);
- final NetworkStats.Entry entry = new NetworkStats.Entry();
- for (String uid : knownUids) {
- final int uidInt = Integer.parseInt(uid);
- final File uidPath = new File(mStatsUid, uid);
-
- entry.iface = IFACE_ALL;
- entry.uid = uidInt;
- entry.tag = TAG_NONE;
- entry.rxBytes = readSingleLongFromFile(new File(uidPath, "tcp_rcv"));
- entry.rxPackets = readSingleLongFromFile(new File(uidPath, "tcp_rcv_pkt"));
- entry.txBytes = readSingleLongFromFile(new File(uidPath, "tcp_snd"));
- entry.txPackets = readSingleLongFromFile(new File(uidPath, "tcp_snd_pkt"));
-
- stats.addValues(entry);
- }
-
- return stats;
+ return mStatsFactory.readNetworkStatsDetail(uid);
}
@Override
@@ -1500,7 +1281,7 @@
try {
final NetworkStats.Entry entry = new NetworkStats.Entry();
entry.iface = ifaceIn;
- entry.uid = UID_ALL;
+ entry.uid = UID_TETHERING;
entry.set = SET_DEFAULT;
entry.tag = TAG_NONE;
entry.rxBytes = Long.parseLong(tok[3]);
@@ -1573,56 +1354,6 @@
return getInterfaceThrottle(iface, false);
}
- /**
- * Split given line into {@link ArrayList}.
- */
- private static void splitLine(String line, ArrayList<String> outSplit) {
- outSplit.clear();
-
- final StringTokenizer t = new StringTokenizer(line, " \t\n\r\f:");
- while (t.hasMoreTokens()) {
- outSplit.add(t.nextToken());
- }
- }
-
- /**
- * Zip the two given {@link ArrayList} as key and value pairs into
- * {@link HashMap}.
- */
- private static void parseLine(
- ArrayList<String> keys, ArrayList<String> values, HashMap<String, String> outParsed) {
- outParsed.clear();
-
- final int size = Math.min(keys.size(), values.size());
- for (int i = 0; i < size; i++) {
- outParsed.put(keys.get(i), values.get(i));
- }
- }
-
- /**
- * Utility method to read a single plain-text {@link Long} from the given
- * {@link File}, usually from a {@code /proc/} filesystem.
- */
- private static long readSingleLongFromFile(File file) {
- try {
- final byte[] buffer = IoUtils.readFileAsByteArray(file.toString());
- return Long.parseLong(new String(buffer).trim());
- } catch (NumberFormatException e) {
- return -1;
- } catch (IOException e) {
- return -1;
- }
- }
-
- /**
- * Wrapper for {@link File#list()} that returns empty array instead of
- * {@code null}.
- */
- private static String[] fileListWithoutNull(File file) {
- final String[] list = file.list();
- return list != null ? list : new String[0];
- }
-
public void setDefaultInterfaceForDns(String iface) throws IllegalStateException {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 78dbbd6..1941c6a 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -1677,6 +1677,18 @@
e.fillInStackTrace();
Slog.i(TAG, "Set screen state: " + on, e);
}
+ if (on) {
+ if ((mPowerState & SCREEN_ON_BIT) == 0 || mSkippedScreenOn) {
+ // If we are turning the screen state on, but the screen
+ // light is currently off, then make sure that we set the
+ // light at this point to 0. This is the case where we are
+ // turning on the screen and waiting for the UI to be drawn
+ // before showing it to the user. We want the light off
+ // until it is ready to be shown to the user, not it using
+ // whatever the last value it had.
+ mScreenBrightness.forceValueLocked(Power.BRIGHTNESS_OFF);
+ }
+ }
int err = Power.setScreenState(on);
if (err == 0) {
mLastScreenOnTime = (on ? SystemClock.elapsedRealtime() : 0);
@@ -2029,8 +2041,6 @@
RuntimeException e = new RuntimeException("here");
e.fillInStackTrace();
Slog.i(TAG, "Setting screen brightness: " + brightness, e);
- mScreenBrightness.setTargetLocked(brightness, steps,
- INITIAL_SCREEN_BRIGHTNESS, nominalCurrentValue);
}
}
@@ -2103,6 +2113,15 @@
+ " delta=" + delta);
}
+ void forceValueLocked(int value) {
+ targetValue = -1;
+ curValue = value;
+ setLightBrightness(mask, value);
+ if (animating) {
+ finishAnimationLocked(false, value);
+ }
+ }
+
void setTargetLocked(int target, int stepsToTarget, int initialValue,
int nominalCurrentValue) {
if (!initialized) {
diff --git a/services/java/com/android/server/StatusBarManagerService.java b/services/java/com/android/server/StatusBarManagerService.java
index bab9f8a..a9ff6c5 100644
--- a/services/java/com/android/server/StatusBarManagerService.java
+++ b/services/java/com/android/server/StatusBarManagerService.java
@@ -117,11 +117,6 @@
// ================================================================================
// From IStatusBarService
// ================================================================================
- public void userActivity() {
- if (mBar != null) try {
- mBar.userActivity();
- } catch (RemoteException ex) {}
- }
public void expand() {
enforceExpandStatusBar();
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 5006de7..3ae62ad 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -163,6 +163,11 @@
pm = PackageManagerService.main(context,
factoryTest != SystemServer.FACTORY_TEST_OFF,
onlyCore);
+ boolean firstBoot = false;
+ try {
+ firstBoot = pm.isFirstBoot();
+ } catch (RemoteException e) {
+ }
ActivityManagerService.setSystemProcess();
@@ -208,7 +213,8 @@
Slog.i(TAG, "Window Manager");
wm = WindowManagerService.main(context, power,
- factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL);
+ factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,
+ !firstBoot);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
ActivityManagerService.self().setWindowManager(wm);
diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java
index c792b33..ef48b9e 100644
--- a/services/java/com/android/server/TextServicesManagerService.java
+++ b/services/java/com/android/server/TextServicesManagerService.java
@@ -238,7 +238,8 @@
}
} else if (scs.hashCode() == hashCode) {
if (DBG) {
- Slog.w(TAG, "Return subtype " + scs.hashCode());
+ Slog.w(TAG, "Return subtype " + scs.hashCode() + ", input= " + locale
+ + ", " + scs.getLocale());
}
return scs;
}
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index 253e741..a0e28ed 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -834,7 +834,7 @@
}
if (DEBUG) Slog.v(TAG, "settingsRestored: success=" + success);
if (success) {
- bindWallpaperComponentLocked(null, false, false);
+ bindWallpaperComponentLocked(mNextWallpaperComponent, false, false);
}
}
}
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 883fc71..660681b 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -149,6 +149,8 @@
private static final int WIFI_ENABLED = 1;
/* Wifi enabled while in airplane mode */
private static final int WIFI_ENABLED_AIRPLANE_OVERRIDE = 2;
+ /* Wifi disabled due to airplane mode on */
+ private static final int WIFI_DISABLED_AIRPLANE_ON = 3;
private AtomicInteger mWifiState = new AtomicInteger(WIFI_DISABLED);
private AtomicBoolean mAirplaneModeOn = new AtomicBoolean(false);
@@ -478,14 +480,19 @@
private void persistWifiEnabled(boolean enabled) {
final ContentResolver cr = mContext.getContentResolver();
+ boolean airplane = mAirplaneModeOn.get() && isAirplaneToggleable();
if (enabled) {
- if (isAirplaneModeOn() && isAirplaneToggleable()) {
+ if (airplane) {
mWifiState.set(WIFI_ENABLED_AIRPLANE_OVERRIDE);
} else {
mWifiState.set(WIFI_ENABLED);
}
} else {
- mWifiState.set(WIFI_DISABLED);
+ if (airplane) {
+ mWifiState.set(WIFI_DISABLED_AIRPLANE_ON);
+ } else {
+ mWifiState.set(WIFI_DISABLED);
+ }
}
Settings.Secure.putInt(cr, Settings.Secure.WIFI_ON, mWifiState.get());
}
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index ed8fa40..fd528cc 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -298,16 +298,7 @@
super.onChange(selfChange);
synchronized (mLock) {
- mIsAccessibilityEnabled = Settings.Secure.getInt(
- mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
- if (mIsAccessibilityEnabled) {
- manageServicesLocked();
- } else {
- unbindAllServicesLocked();
- }
- updateInputFilterLocked();
- sendStateToClientsLocked();
+ handleAccessibilityEnabledSettingChangedLocked();
}
}
});
@@ -354,6 +345,7 @@
client.asBinder().linkToDeath(new DeathRecipient() {
public void binderDied() {
synchronized (mLock) {
+ addedClient.asBinder().unlinkToDeath(this, 0);
mClients.remove(addedClient);
}
}
@@ -445,10 +437,12 @@
IAccessibilityInteractionConnection connection) throws RemoteException {
synchronized (mLock) {
final IWindow addedWindowToken = windowToken;
+ final IAccessibilityInteractionConnection addedConnection = connection;
final int windowId = sNextWindowId++;
- connection.asBinder().linkToDeath(new DeathRecipient() {
+ addedConnection.asBinder().linkToDeath(new DeathRecipient() {
public void binderDied() {
synchronized (mLock) {
+ addedConnection.asBinder().unlinkToDeath(this, 0);
removeAccessibilityInteractionConnection(addedWindowToken);
}
}
@@ -485,21 +479,23 @@
ComponentName componentName = new ComponentName("foo.bar",
"AutomationAccessibilityService");
synchronized (mLock) {
- Service oldService = mComponentNameToServiceMap.get(componentName);
- if (oldService != null) {
- tryRemoveServiceLocked(oldService);
+ // If an automation services is connected to the system all services are stopped
+ // so the automation one is the only one running. Settings are not changed so when
+ // the automation service goes away the state is restored from the settings.
+
+ // Disable all services.
+ final int runningServiceCount = mServices.size();
+ for (int i = 0; i < runningServiceCount; i++) {
+ Service runningService = mServices.get(i);
+ runningService.unbind();
}
- // Now this service is enabled.
- mEnabledServices.add(componentName);
- // Also make sure this service is the only one.
- Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
- componentName.flattenToString());
- // This API is intended for testing so enable accessibility to make
- // sure clients can start poking with the window content.
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED, 1);
+ // If necessary enable accessibility and announce that.
+ if (!mIsAccessibilityEnabled) {
+ mIsAccessibilityEnabled = true;
+ sendStateToClientsLocked();
+ }
}
+ // Hook the automation service up.
AccessibilityServiceInfo accessibilityServiceInfo = new AccessibilityServiceInfo();
accessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
accessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
@@ -717,11 +713,12 @@
* Manages services by starting enabled ones and stopping disabled ones.
*/
private void manageServicesLocked() {
+ unbindAutomationService();
populateEnabledServicesLocked(mEnabledServices);
final int enabledInstalledServicesCount = updateServicesStateLocked(mInstalledServices,
mEnabledServices);
// No enabled installed services => disable accessibility to avoid
- // sending accessibility events with no recipient across processes.
+ // sending accessibility events with no recipient across processes.
if (mIsAccessibilityEnabled && enabledInstalledServicesCount == 0) {
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_ENABLED, 0);
@@ -744,6 +741,21 @@
}
/**
+ * Unbinds the automation service if such is running.
+ */
+ private void unbindAutomationService() {
+ List<Service> runningServices = mServices;
+ int runningServiceCount = mServices.size();
+ for (int i = 0; i < runningServiceCount; i++) {
+ Service service = runningServices.get(i);
+ if (service.mIsAutomation) {
+ service.unbind();
+ return;
+ }
+ }
+ }
+
+ /**
* Populates a list with the {@link ComponentName}s of all enabled
* {@link AccessibilityService}s.
*
@@ -868,6 +880,22 @@
}
/**
+ * Updated the state based on the accessibility enabled setting.
+ */
+ private void handleAccessibilityEnabledSettingChangedLocked() {
+ mIsAccessibilityEnabled = Settings.Secure.getInt(
+ mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
+ if (mIsAccessibilityEnabled) {
+ manageServicesLocked();
+ } else {
+ unbindAllServicesLocked();
+ }
+ updateInputFilterLocked();
+ sendStateToClientsLocked();
+ }
+
+ /**
* This class represents an accessibility service. It stores all per service
* data required for the service management, provides API for starting/stopping the
* service and is responsible for adding/removing the service in the data structures
@@ -1171,7 +1199,13 @@
public void binderDied() {
synchronized (mLock) {
+ mService.unlinkToDeath(this, 0);
tryRemoveServiceLocked(this);
+ // We no longer have an automation service, so restore
+ // the state based on values in the settings database.
+ if (mIsAutomation) {
+ handleAccessibilityEnabledSettingChangedLocked();
+ }
}
}
diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java
index 5875ee3..3c6b416 100644
--- a/services/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/java/com/android/server/accessibility/TouchExplorer.java
@@ -457,6 +457,9 @@
case MotionEvent.ACTION_MOVE: {
final int activePointerCount = mPointerTracker.getActivePointerCount();
switch (activePointerCount) {
+ case 1: {
+ // do nothing
+ } break;
case 2: {
if (isDraggingGesture(event)) {
// If still dragging send a drag event.
@@ -484,10 +487,12 @@
}
} break;
case MotionEvent.ACTION_POINTER_UP: {
- mCurrentState = STATE_TOUCH_EXPLORING;
// Send an event to the end of the drag gesture.
sendMotionEvent(event, MotionEvent.ACTION_UP, pointerIdBits, policyFlags);
} break;
+ case MotionEvent.ACTION_UP: {
+ mCurrentState = STATE_TOUCH_EXPLORING;
+ } break;
case MotionEvent.ACTION_CANCEL: {
clear();
} break;
@@ -500,7 +505,7 @@
* @param event The event to be handled.
* @param policyFlags The policy flags associated with the event.
*/
- public void handleMotionEventStateDelegating(MotionEvent event, int policyFlags) {
+ private void handleMotionEventStateDelegating(MotionEvent event, int policyFlags) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN: {
throw new IllegalStateException("Delegating state can only be reached if "
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 2942c28..d038d76 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -1318,6 +1318,14 @@
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (mActivityManagerService.checkCallingPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump meminfo from from pid="
+ + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
+ + " without permission " + android.Manifest.permission.DUMP);
+ return;
+ }
+
mActivityManagerService.dumpApplicationMemoryUsage(fd, pw, " ", args);
}
}
@@ -1330,6 +1338,14 @@
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (mActivityManagerService.checkCallingPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump gfxinfo from from pid="
+ + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
+ + " without permission " + android.Manifest.permission.DUMP);
+ return;
+ }
+
mActivityManagerService.dumpGraphicsHardwareUsage(fd, pw, args);
}
}
@@ -1342,6 +1358,14 @@
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (mActivityManagerService.checkCallingPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump cpuinfo from from pid="
+ + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
+ + " without permission " + android.Manifest.permission.DUMP);
+ return;
+ }
+
synchronized (mActivityManagerService.mProcessStatsThread) {
pw.print(mActivityManagerService.mProcessStats.printCurrentLoad());
pw.print(mActivityManagerService.mProcessStats.printCurrentState(
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 7bc19ab4..b9d3d76 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -589,8 +589,8 @@
}
}
app.thread.scheduleLaunchActivity(new Intent(r.intent), r,
- System.identityHashCode(r),
- r.info, r.compat, r.icicle, results, newIntents, !andResume,
+ System.identityHashCode(r), r.info, mService.mConfiguration,
+ r.compat, r.icicle, results, newIntents, !andResume,
mService.isNextTransitionForward(), profileFile, profileFd,
profileAutoStop);
@@ -4035,7 +4035,18 @@
// But then we need to figure out how it needs to deal with that.
Configuration oldConfig = r.configuration;
r.configuration = newConfig;
-
+
+ // Determine what has changed. May be nothing, if this is a config
+ // that has come back from the app after going idle. In that case
+ // we just want to leave the official config object now in the
+ // activity and do nothing else.
+ final int changes = oldConfig.diff(newConfig);
+ if (changes == 0 && !r.forceNewConfig) {
+ if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+ "Configuration no differences in " + r);
+ return true;
+ }
+
// If the activity isn't currently running, just leave the new
// configuration and it will pick that up next time it starts.
if (r.app == null || r.app.thread == null) {
@@ -4046,8 +4057,7 @@
return true;
}
- // Figure out what has changed between the two configurations.
- int changes = oldConfig.diff(newConfig);
+ // Figure out how to handle the changes between the configurations.
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) {
Slog.v(TAG, "Checking to restart " + r.info.name + ": changed=0x"
+ Integer.toHexString(changes) + ", handles=0x"
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index 226723f..8f797ec 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -21,6 +21,7 @@
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
@@ -416,6 +417,13 @@
}
}
+ public void noteNetworkInterfaceType(String iface, int type) {
+ enforceCallingPermission();
+ synchronized (mStats) {
+ mStats.noteNetworkInterfaceTypeLocked(iface, type);
+ }
+ }
+
public boolean isOnBattery() {
return mStats.isOnBattery();
}
@@ -457,6 +465,14 @@
@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 BatteryStats from from pid="
+ + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
+ + " without permission " + android.Manifest.permission.DUMP);
+ return;
+ }
+
boolean isCheckin = false;
boolean noOutput = false;
if (args != null) {
diff --git a/services/java/com/android/server/am/UsageStatsService.java b/services/java/com/android/server/am/UsageStatsService.java
index 0d36d69..e810e3c 100644
--- a/services/java/com/android/server/am/UsageStatsService.java
+++ b/services/java/com/android/server/am/UsageStatsService.java
@@ -19,6 +19,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.IBinder;
import android.os.FileUtils;
@@ -1034,6 +1035,14 @@
* The data persisted to file is parsed and the stats are computed.
*/
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (mContext.checkCallingPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump UsageStats from from pid="
+ + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
+ + " without permission " + android.Manifest.permission.DUMP);
+ return;
+ }
+
final boolean isCheckinRequest = scanArgs(args, "--checkin");
final boolean isCompactOutput = isCheckinRequest || scanArgs(args, "-c");
final boolean deleteAfterPrint = isCheckinRequest || scanArgs(args, "-d");
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index 0da5cc6..e610782 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -85,7 +85,6 @@
import android.net.NetworkPolicy;
import android.net.NetworkQuotaInfo;
import android.net.NetworkState;
-import android.net.NetworkStats;
import android.net.NetworkTemplate;
import android.os.Binder;
import android.os.Environment;
@@ -489,7 +488,7 @@
final long end = currentTime;
final long totalBytes = getTotalBytes(policy.template, start, end);
- if (policy.limitBytes != LIMIT_DISABLED && totalBytes >= policy.limitBytes) {
+ if (policy.isOverLimit(totalBytes)) {
if (policy.lastSnooze >= start) {
enqueueNotification(policy, TYPE_LIMIT_SNOOZED, totalBytes);
} else {
@@ -574,7 +573,7 @@
final CharSequence title = res.getText(R.string.data_usage_warning_title);
final CharSequence body = res.getString(R.string.data_usage_warning_body);
- builder.setSmallIcon(R.drawable.ic_menu_info_details);
+ builder.setSmallIcon(R.drawable.stat_notify_error);
builder.setTicker(title);
builder.setContentTitle(title);
builder.setContentText(body);
@@ -606,7 +605,7 @@
break;
}
- builder.setSmallIcon(com.android.internal.R.drawable.ic_menu_block);
+ builder.setSmallIcon(R.drawable.stat_notify_disabled);
builder.setTicker(title);
builder.setContentTitle(title);
builder.setContentText(body);
@@ -640,7 +639,7 @@
break;
}
- builder.setSmallIcon(R.drawable.ic_menu_info_details);
+ builder.setSmallIcon(R.drawable.stat_notify_error);
builder.setTicker(title);
builder.setContentTitle(title);
builder.setContentText(body);
@@ -677,7 +676,7 @@
builder.setOnlyAlertOnce(true);
builder.setOngoing(true);
- builder.setSmallIcon(R.drawable.ic_menu_info_details);
+ builder.setSmallIcon(R.drawable.stat_notify_error);
builder.setTicker(title);
builder.setContentTitle(title);
builder.setContentText(body);
@@ -750,8 +749,7 @@
final long totalBytes = getTotalBytes(policy.template, start, end);
// disable data connection when over limit and not snoozed
- final boolean overLimit = policy.limitBytes != LIMIT_DISABLED
- && totalBytes > policy.limitBytes && policy.lastSnooze < start;
+ final boolean overLimit = policy.isOverLimit(totalBytes) && policy.lastSnooze < start;
final boolean enabled = !overLimit;
setNetworkTemplateEnabled(policy.template, enabled);
@@ -1535,10 +1533,7 @@
private long getTotalBytes(NetworkTemplate template, long start, long end) {
try {
- final NetworkStats stats = mNetworkStats.getSummaryForNetwork(
- template, start, end);
- final NetworkStats.Entry entry = stats.getValues(0, null);
- return entry.rxBytes + entry.txBytes;
+ return mNetworkStats.getSummaryForNetwork(template, start, end).getTotalBytes();
} catch (RemoteException e) {
// ignored; service lives in system_server
return 0;
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index aa46795..789681e 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -32,10 +32,10 @@
import static android.net.NetworkStats.SET_FOREGROUND;
import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
+import static android.net.NetworkStatsHistory.randomLong;
import static android.net.NetworkTemplate.buildTemplateMobileAll;
import static android.net.NetworkTemplate.buildTemplateWifi;
import static android.net.TrafficStats.UID_REMOVED;
-import static android.net.TrafficStats.UID_TETHERING;
import static android.provider.Settings.Secure.NETSTATS_NETWORK_BUCKET_DURATION;
import static android.provider.Settings.Secure.NETSTATS_NETWORK_MAX_HISTORY;
import static android.provider.Settings.Secure.NETSTATS_PERSIST_THRESHOLD;
@@ -49,6 +49,7 @@
import static android.text.format.DateUtils.HOUR_IN_MILLIS;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
import static android.text.format.DateUtils.SECOND_IN_MILLIS;
+import static android.text.format.DateUtils.WEEK_IN_MILLIS;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.server.NetworkManagementService.LIMIT_GLOBAL_ALERT;
import static com.android.server.NetworkManagementSocketTagger.resetKernelUidStats;
@@ -63,6 +64,8 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsService;
@@ -72,7 +75,6 @@
import android.net.NetworkStats;
import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
-import android.net.TrafficStats;
import android.os.Binder;
import android.os.Environment;
import android.os.Handler;
@@ -115,7 +117,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
+import java.util.Random;
import libcore.io.IoUtils;
@@ -140,11 +142,14 @@
private static final int MSG_UPDATE_IFACES = 2;
/** Flags to control detail level of poll event. */
- private static final int FLAG_PERSIST_NETWORK = 0x10;
- private static final int FLAG_PERSIST_UID = 0x20;
+ private static final int FLAG_PERSIST_NETWORK = 0x1;
+ private static final int FLAG_PERSIST_UID = 0x2;
private static final int FLAG_PERSIST_ALL = FLAG_PERSIST_NETWORK | FLAG_PERSIST_UID;
private static final int FLAG_PERSIST_FORCE = 0x100;
+ /** Sample recent usage after each poll event. */
+ private static final boolean ENABLE_SAMPLE_AFTER_POLL = true;
+
private final Context mContext;
private final INetworkManagementService mNetworkManager;
private final IAlarmManager mAlarmManager;
@@ -188,20 +193,23 @@
/** Set of currently active ifaces. */
private HashMap<String, NetworkIdentitySet> mActiveIfaces = Maps.newHashMap();
- /** Set of historical network layer stats for known networks. */
- private HashMap<NetworkIdentitySet, NetworkStatsHistory> mNetworkStats = Maps.newHashMap();
- /** Set of historical network layer stats for known UIDs. */
+ /** Set of historical {@code dev} stats for known networks. */
+ private HashMap<NetworkIdentitySet, NetworkStatsHistory> mNetworkDevStats = Maps.newHashMap();
+ /** Set of historical {@code xtables} stats for known networks. */
+ private HashMap<NetworkIdentitySet, NetworkStatsHistory> mNetworkXtStats = Maps.newHashMap();
+ /** Set of historical {@code xtables} stats for known UIDs. */
private HashMap<UidStatsKey, NetworkStatsHistory> mUidStats = Maps.newHashMap();
/** Flag if {@link #mUidStats} have been loaded from disk. */
private boolean mUidStatsLoaded = false;
- private NetworkStats mLastPollNetworkSnapshot;
+ private NetworkStats mLastPollNetworkDevSnapshot;
+ private NetworkStats mLastPollNetworkXtSnapshot;
private NetworkStats mLastPollUidSnapshot;
private NetworkStats mLastPollOperationsSnapshot;
- private NetworkStats mLastPollTetherSnapshot;
- private NetworkStats mLastPersistNetworkSnapshot;
+ private NetworkStats mLastPersistNetworkDevSnapshot;
+ private NetworkStats mLastPersistNetworkXtSnapshot;
private NetworkStats mLastPersistUidSnapshot;
/** Current counter sets for each UID. */
@@ -213,7 +221,8 @@
private final HandlerThread mHandlerThread;
private final Handler mHandler;
- private final AtomicFile mNetworkFile;
+ private final AtomicFile mNetworkDevFile;
+ private final AtomicFile mNetworkXtFile;
private final AtomicFile mUidFile;
public NetworkStatsService(
@@ -244,7 +253,8 @@
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper(), mHandlerCallback);
- mNetworkFile = new AtomicFile(new File(systemDir, "netstats.bin"));
+ mNetworkDevFile = new AtomicFile(new File(systemDir, "netstats.bin"));
+ mNetworkXtFile = new AtomicFile(new File(systemDir, "netstats_xt.bin"));
mUidFile = new AtomicFile(new File(systemDir, "netstats_uid.bin"));
}
@@ -257,7 +267,8 @@
// read historical network stats from disk, since policy service
// might need them right away. we delay loading detailed UID stats
// until actually needed.
- readNetworkStatsLocked();
+ readNetworkDevStatsLocked();
+ readNetworkXtStatsLocked();
}
// watch for network interfaces to be claimed
@@ -306,11 +317,13 @@
mTeleManager.listen(mPhoneListener, LISTEN_NONE);
- writeNetworkStatsLocked();
+ writeNetworkDevStatsLocked();
+ writeNetworkXtStatsLocked();
if (mUidStatsLoaded) {
writeUidStatsLocked();
}
- mNetworkStats.clear();
+ mNetworkDevStats.clear();
+ mNetworkXtStats.clear();
mUidStats.clear();
mUidStatsLoaded = false;
}
@@ -355,14 +368,26 @@
@Override
public NetworkStatsHistory getHistoryForNetwork(NetworkTemplate template, int fields) {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
+ return getHistoryForNetworkDev(template, fields);
+ }
+ private NetworkStatsHistory getHistoryForNetworkDev(NetworkTemplate template, int fields) {
+ return getHistoryForNetwork(template, fields, mNetworkDevStats);
+ }
+
+ private NetworkStatsHistory getHistoryForNetworkXt(NetworkTemplate template, int fields) {
+ return getHistoryForNetwork(template, fields, mNetworkXtStats);
+ }
+
+ private NetworkStatsHistory getHistoryForNetwork(NetworkTemplate template, int fields,
+ HashMap<NetworkIdentitySet, NetworkStatsHistory> source) {
synchronized (mStatsLock) {
// combine all interfaces that match template
final NetworkStatsHistory combined = new NetworkStatsHistory(
mSettings.getNetworkBucketDuration(), estimateNetworkBuckets(), fields);
- for (NetworkIdentitySet ident : mNetworkStats.keySet()) {
+ for (NetworkIdentitySet ident : source.keySet()) {
if (templateMatches(template, ident)) {
- final NetworkStatsHistory history = mNetworkStats.get(ident);
+ final NetworkStatsHistory history = source.get(ident);
if (history != null) {
combined.recordEntireHistory(history);
}
@@ -399,7 +424,19 @@
@Override
public NetworkStats getSummaryForNetwork(NetworkTemplate template, long start, long end) {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
+ return getSummaryForNetworkDev(template, start, end);
+ }
+ private NetworkStats getSummaryForNetworkDev(NetworkTemplate template, long start, long end) {
+ return getSummaryForNetwork(template, start, end, mNetworkDevStats);
+ }
+
+ private NetworkStats getSummaryForNetworkXt(NetworkTemplate template, long start, long end) {
+ return getSummaryForNetwork(template, start, end, mNetworkXtStats);
+ }
+
+ private NetworkStats getSummaryForNetwork(NetworkTemplate template, long start, long end,
+ HashMap<NetworkIdentitySet, NetworkStatsHistory> source) {
synchronized (mStatsLock) {
// use system clock to be externally consistent
final long now = System.currentTimeMillis();
@@ -409,9 +446,9 @@
NetworkStatsHistory.Entry historyEntry = null;
// combine total from all interfaces that match template
- for (NetworkIdentitySet ident : mNetworkStats.keySet()) {
+ for (NetworkIdentitySet ident : source.keySet()) {
if (templateMatches(template, ident)) {
- final NetworkStatsHistory history = mNetworkStats.get(ident);
+ final NetworkStatsHistory history = source.get(ident);
historyEntry = history.getValues(start, end, now, historyEntry);
entry.iface = IFACE_ALL;
@@ -716,8 +753,9 @@
*/
private void bootstrapStats() {
try {
- mLastPollNetworkSnapshot = mNetworkManager.getNetworkStatsSummary();
mLastPollUidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
+ mLastPollNetworkDevSnapshot = mNetworkManager.getNetworkStatsSummary();
+ mLastPollNetworkXtSnapshot = computeNetworkXtSnapshotFromUid(mLastPollUidSnapshot);
mLastPollOperationsSnapshot = new NetworkStats(0L, 0);
} catch (IllegalStateException e) {
Slog.w(TAG, "problem reading network stats: " + e);
@@ -759,42 +797,56 @@
: System.currentTimeMillis();
final long threshold = mSettings.getPersistThreshold();
+ final NetworkStats uidSnapshot;
+ final NetworkStats networkXtSnapshot;
+ final NetworkStats networkDevSnapshot;
try {
- // record tethering stats; persisted during normal UID cycle below
- final String[] ifacePairs = mConnManager.getTetheredIfacePairs();
+ // collect any tethering stats
+ final String[] tetheredIfacePairs = mConnManager.getTetheredIfacePairs();
final NetworkStats tetherSnapshot = mNetworkManager.getNetworkStatsTethering(
- ifacePairs);
- performTetherPollLocked(tetherSnapshot, currentTime);
+ tetheredIfacePairs);
- // record uid stats
- final NetworkStats uidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
+ // record uid stats, folding in tethering stats
+ uidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
+ uidSnapshot.combineAllValues(tetherSnapshot);
performUidPollLocked(uidSnapshot, currentTime);
- // persist when enough network data has occurred
- final NetworkStats persistUidDelta = computeStatsDelta(
- mLastPersistUidSnapshot, uidSnapshot, true);
- final boolean uidPastThreshold = persistUidDelta.getTotalBytes() > threshold;
- if (persistForce || (persistUid && uidPastThreshold)) {
- writeUidStatsLocked();
- mLastPersistUidSnapshot = uidSnapshot;
- }
+ // record dev network stats
+ networkDevSnapshot = mNetworkManager.getNetworkStatsSummary();
+ performNetworkDevPollLocked(networkDevSnapshot, currentTime);
- // record network stats
- final NetworkStats networkSnapshot = mNetworkManager.getNetworkStatsSummary();
- performNetworkPollLocked(networkSnapshot, currentTime);
+ // record xt network stats
+ networkXtSnapshot = computeNetworkXtSnapshotFromUid(uidSnapshot);
+ performNetworkXtPollLocked(networkXtSnapshot, currentTime);
- // persist when enough network data has occurred
- final NetworkStats persistNetworkDelta = computeStatsDelta(
- mLastPersistNetworkSnapshot, networkSnapshot, true);
- final boolean networkPastThreshold = persistNetworkDelta.getTotalBytes() > threshold;
- if (persistForce || (persistNetwork && networkPastThreshold)) {
- writeNetworkStatsLocked();
- mLastPersistNetworkSnapshot = networkSnapshot;
- }
} catch (IllegalStateException e) {
Log.wtf(TAG, "problem reading network stats", e);
+ return;
} catch (RemoteException e) {
// ignored; service lives in system_server
+ return;
+ }
+
+ // persist when enough network data has occurred
+ final long persistNetworkDevDelta = computeStatsDelta(
+ mLastPersistNetworkDevSnapshot, networkDevSnapshot, true).getTotalBytes();
+ final long persistNetworkXtDelta = computeStatsDelta(
+ mLastPersistNetworkXtSnapshot, networkXtSnapshot, true).getTotalBytes();
+ final boolean networkOverThreshold = persistNetworkDevDelta > threshold
+ || persistNetworkXtDelta > threshold;
+ if (persistForce || (persistNetwork && networkOverThreshold)) {
+ writeNetworkDevStatsLocked();
+ writeNetworkXtStatsLocked();
+ mLastPersistNetworkDevSnapshot = networkDevSnapshot;
+ mLastPersistNetworkXtSnapshot = networkXtSnapshot;
+ }
+
+ // persist when enough uid data has occurred
+ final long persistUidDelta = computeStatsDelta(mLastPersistUidSnapshot, uidSnapshot, true)
+ .getTotalBytes();
+ if (persistForce || (persistUid && persistUidDelta > threshold)) {
+ writeUidStatsLocked();
+ mLastPersistUidSnapshot = uidSnapshot;
}
if (LOGV) {
@@ -802,8 +854,10 @@
Slog.v(TAG, "performPollLocked() took " + duration + "ms");
}
- // sample stats after each full poll
- performSample();
+ if (ENABLE_SAMPLE_AFTER_POLL) {
+ // sample stats after each full poll
+ performSample();
+ }
// finally, dispatch updated event to any listeners
final Intent updatedIntent = new Intent(ACTION_NETWORK_STATS_UPDATED);
@@ -812,12 +866,13 @@
}
/**
- * Update {@link #mNetworkStats} historical usage.
+ * Update {@link #mNetworkDevStats} historical usage.
*/
- private void performNetworkPollLocked(NetworkStats networkSnapshot, long currentTime) {
+ private void performNetworkDevPollLocked(NetworkStats networkDevSnapshot, long currentTime) {
final HashSet<String> unknownIface = Sets.newHashSet();
- final NetworkStats delta = computeStatsDelta(mLastPollNetworkSnapshot, networkSnapshot, false);
+ final NetworkStats delta = computeStatsDelta(
+ mLastPollNetworkDevSnapshot, networkDevSnapshot, false);
final long timeStart = currentTime - delta.getElapsedRealtime();
NetworkStats.Entry entry = null;
@@ -829,14 +884,44 @@
continue;
}
- final NetworkStatsHistory history = findOrCreateNetworkStatsLocked(ident);
+ final NetworkStatsHistory history = findOrCreateNetworkDevStatsLocked(ident);
history.recordData(timeStart, currentTime, entry);
}
- mLastPollNetworkSnapshot = networkSnapshot;
+ mLastPollNetworkDevSnapshot = networkDevSnapshot;
if (LOGD && unknownIface.size() > 0) {
- Slog.w(TAG, "unknown interfaces " + unknownIface.toString() + ", ignoring those stats");
+ Slog.w(TAG, "unknown dev interfaces " + unknownIface + ", ignoring those stats");
+ }
+ }
+
+ /**
+ * Update {@link #mNetworkXtStats} historical usage.
+ */
+ private void performNetworkXtPollLocked(NetworkStats networkXtSnapshot, long currentTime) {
+ final HashSet<String> unknownIface = Sets.newHashSet();
+
+ final NetworkStats delta = computeStatsDelta(
+ mLastPollNetworkXtSnapshot, networkXtSnapshot, false);
+ final long timeStart = currentTime - delta.getElapsedRealtime();
+
+ NetworkStats.Entry entry = null;
+ for (int i = 0; i < delta.size(); i++) {
+ entry = delta.getValues(i, entry);
+ final NetworkIdentitySet ident = mActiveIfaces.get(entry.iface);
+ if (ident == null) {
+ unknownIface.add(entry.iface);
+ continue;
+ }
+
+ final NetworkStatsHistory history = findOrCreateNetworkXtStatsLocked(ident);
+ history.recordData(timeStart, currentTime, entry);
+ }
+
+ mLastPollNetworkXtSnapshot = networkXtSnapshot;
+
+ if (LOGD && unknownIface.size() > 0) {
+ Slog.w(TAG, "unknown xt interfaces " + unknownIface + ", ignoring those stats");
}
}
@@ -882,38 +967,6 @@
}
/**
- * Update {@link #mUidStats} historical usage for
- * {@link TrafficStats#UID_TETHERING} based on tethering statistics.
- */
- private void performTetherPollLocked(NetworkStats tetherSnapshot, long currentTime) {
- ensureUidStatsLoadedLocked();
-
- final NetworkStats delta = computeStatsDelta(
- mLastPollTetherSnapshot, tetherSnapshot, false);
- final long timeStart = currentTime - delta.getElapsedRealtime();
-
- NetworkStats.Entry entry = null;
- for (int i = 0; i < delta.size(); i++) {
- entry = delta.getValues(i, entry);
- final NetworkIdentitySet ident = mActiveIfaces.get(entry.iface);
- if (ident == null) {
- if (entry.rxBytes > 0 || entry.rxPackets > 0 || entry.txBytes > 0
- || entry.txPackets > 0) {
- Log.w(TAG, "dropping tether delta from unknown iface: " + entry);
- }
- continue;
- }
-
- final NetworkStatsHistory history = findOrCreateUidStatsLocked(
- ident, UID_TETHERING, SET_DEFAULT, TAG_NONE);
- history.recordData(timeStart, currentTime, entry);
- }
-
- // normal UID poll will trim any history beyond max
- mLastPollTetherSnapshot = tetherSnapshot;
- }
-
- /**
* Sample recent statistics summary into {@link EventLog}.
*/
private void performSample() {
@@ -925,25 +978,34 @@
final long end = now - (now % largestBucketSize) + largestBucketSize;
final long start = end - largestBucketSize;
+ final long trustedTime = mTime.hasCache() ? mTime.currentTimeMillis() : -1;
+
NetworkTemplate template = null;
- NetworkStats.Entry ifaceTotal = null;
+ NetworkStats.Entry devTotal = null;
+ NetworkStats.Entry xtTotal = null;
NetworkStats.Entry uidTotal = null;
// collect mobile sample
template = buildTemplateMobileAll(getActiveSubscriberId(mContext));
- ifaceTotal = getSummaryForNetwork(template, start, end).getTotal(ifaceTotal);
+ devTotal = getSummaryForNetworkDev(template, start, end).getTotal(devTotal);
+ xtTotal = getSummaryForNetworkXt(template, start, end).getTotal(xtTotal);
uidTotal = getSummaryForAllUid(template, start, end, false).getTotal(uidTotal);
- EventLogTags.writeNetstatsMobileSample(ifaceTotal.rxBytes, ifaceTotal.rxPackets,
- ifaceTotal.txBytes, ifaceTotal.txPackets, uidTotal.rxBytes, uidTotal.rxPackets,
- uidTotal.txBytes, uidTotal.txPackets);
+ EventLogTags.writeNetstatsMobileSample(
+ devTotal.rxBytes, devTotal.rxPackets, devTotal.txBytes, devTotal.txPackets,
+ xtTotal.rxBytes, xtTotal.rxPackets, xtTotal.txBytes, xtTotal.txPackets,
+ uidTotal.rxBytes, uidTotal.rxPackets, uidTotal.txBytes, uidTotal.txPackets,
+ trustedTime);
// collect wifi sample
template = buildTemplateWifi();
- ifaceTotal = getSummaryForNetwork(template, start, end).getTotal(ifaceTotal);
+ devTotal = getSummaryForNetworkDev(template, start, end).getTotal(devTotal);
+ xtTotal = getSummaryForNetworkXt(template, start, end).getTotal(xtTotal);
uidTotal = getSummaryForAllUid(template, start, end, false).getTotal(uidTotal);
- EventLogTags.writeNetstatsWifiSample(ifaceTotal.rxBytes, ifaceTotal.rxPackets,
- ifaceTotal.txBytes, ifaceTotal.txPackets, uidTotal.rxBytes, uidTotal.rxPackets,
- uidTotal.txBytes, uidTotal.txPackets);
+ EventLogTags.writeNetstatsWifiSample(
+ devTotal.rxBytes, devTotal.rxPackets, devTotal.txBytes, devTotal.txPackets,
+ xtTotal.rxBytes, xtTotal.rxPackets, xtTotal.txBytes, xtTotal.txPackets,
+ uidTotal.rxBytes, uidTotal.rxPackets, uidTotal.txBytes, uidTotal.txPackets,
+ trustedTime);
}
/**
@@ -976,8 +1038,17 @@
writeUidStatsLocked();
}
- private NetworkStatsHistory findOrCreateNetworkStatsLocked(NetworkIdentitySet ident) {
- final NetworkStatsHistory existing = mNetworkStats.get(ident);
+ private NetworkStatsHistory findOrCreateNetworkXtStatsLocked(NetworkIdentitySet ident) {
+ return findOrCreateNetworkStatsLocked(ident, mNetworkXtStats);
+ }
+
+ private NetworkStatsHistory findOrCreateNetworkDevStatsLocked(NetworkIdentitySet ident) {
+ return findOrCreateNetworkStatsLocked(ident, mNetworkDevStats);
+ }
+
+ private NetworkStatsHistory findOrCreateNetworkStatsLocked(
+ NetworkIdentitySet ident, HashMap<NetworkIdentitySet, NetworkStatsHistory> source) {
+ final NetworkStatsHistory existing = source.get(ident);
// update when no existing, or when bucket duration changed
final long bucketDuration = mSettings.getNetworkBucketDuration();
@@ -991,7 +1062,7 @@
}
if (updated != null) {
- mNetworkStats.put(ident, updated);
+ source.put(ident, updated);
return updated;
} else {
return existing;
@@ -1024,15 +1095,24 @@
}
}
- private void readNetworkStatsLocked() {
- if (LOGV) Slog.v(TAG, "readNetworkStatsLocked()");
+ private void readNetworkDevStatsLocked() {
+ if (LOGV) Slog.v(TAG, "readNetworkDevStatsLocked()");
+ readNetworkStats(mNetworkDevFile, mNetworkDevStats);
+ }
+ private void readNetworkXtStatsLocked() {
+ if (LOGV) Slog.v(TAG, "readNetworkXtStatsLocked()");
+ readNetworkStats(mNetworkXtFile, mNetworkXtStats);
+ }
+
+ private static void readNetworkStats(
+ AtomicFile inputFile, HashMap<NetworkIdentitySet, NetworkStatsHistory> output) {
// clear any existing stats and read from disk
- mNetworkStats.clear();
+ output.clear();
DataInputStream in = null;
try {
- in = new DataInputStream(new BufferedInputStream(mNetworkFile.openRead()));
+ in = new DataInputStream(new BufferedInputStream(inputFile.openRead()));
// verify file magic header intact
final int magic = in.readInt();
@@ -1048,7 +1128,7 @@
for (int i = 0; i < size; i++) {
final NetworkIdentitySet ident = new NetworkIdentitySet(in);
final NetworkStatsHistory history = new NetworkStatsHistory(in);
- mNetworkStats.put(ident, history);
+ output.put(ident, history);
}
break;
}
@@ -1138,41 +1218,50 @@
}
}
- private void writeNetworkStatsLocked() {
- if (LOGV) Slog.v(TAG, "writeNetworkStatsLocked()");
+ private void writeNetworkDevStatsLocked() {
+ if (LOGV) Slog.v(TAG, "writeNetworkDevStatsLocked()");
+ writeNetworkStats(mNetworkDevStats, mNetworkDevFile);
+ }
+ private void writeNetworkXtStatsLocked() {
+ if (LOGV) Slog.v(TAG, "writeNetworkXtStatsLocked()");
+ writeNetworkStats(mNetworkXtStats, mNetworkXtFile);
+ }
+
+ private void writeNetworkStats(
+ HashMap<NetworkIdentitySet, NetworkStatsHistory> input, AtomicFile outputFile) {
// TODO: consider duplicating stats and releasing lock while writing
// trim any history beyond max
if (mTime.hasCache()) {
final long currentTime = mTime.currentTimeMillis();
final long maxHistory = mSettings.getNetworkMaxHistory();
- for (NetworkStatsHistory history : mNetworkStats.values()) {
+ for (NetworkStatsHistory history : input.values()) {
history.removeBucketsBefore(currentTime - maxHistory);
}
}
FileOutputStream fos = null;
try {
- fos = mNetworkFile.startWrite();
+ fos = outputFile.startWrite();
final DataOutputStream out = new DataOutputStream(new BufferedOutputStream(fos));
out.writeInt(FILE_MAGIC);
out.writeInt(VERSION_NETWORK_INIT);
- out.writeInt(mNetworkStats.size());
- for (NetworkIdentitySet ident : mNetworkStats.keySet()) {
- final NetworkStatsHistory history = mNetworkStats.get(ident);
+ out.writeInt(input.size());
+ for (NetworkIdentitySet ident : input.keySet()) {
+ final NetworkStatsHistory history = input.get(ident);
ident.writeToStream(out);
history.writeToStream(out);
}
out.flush();
- mNetworkFile.finishWrite(fos);
+ outputFile.finishWrite(fos);
} catch (IOException e) {
Log.wtf(TAG, "problem writing stats", e);
if (fos != null) {
- mNetworkFile.failWrite(fos);
+ outputFile.failWrite(fos);
}
}
}
@@ -1262,7 +1351,7 @@
synchronized (mStatsLock) {
// TODO: remove this testing code, since it corrupts stats
if (argSet.contains("generate")) {
- generateRandomLocked();
+ generateRandomLocked(args);
pw.println("Generated stub stats");
return;
}
@@ -1280,9 +1369,16 @@
pw.print(" ident="); pw.println(ident.toString());
}
- pw.println("Known historical stats:");
- for (NetworkIdentitySet ident : mNetworkStats.keySet()) {
- final NetworkStatsHistory history = mNetworkStats.get(ident);
+ pw.println("Known historical dev stats:");
+ for (NetworkIdentitySet ident : mNetworkDevStats.keySet()) {
+ final NetworkStatsHistory history = mNetworkDevStats.get(ident);
+ pw.print(" ident="); pw.println(ident.toString());
+ history.dump(" ", pw, fullHistory);
+ }
+
+ pw.println("Known historical xt stats:");
+ for (NetworkIdentitySet ident : mNetworkXtStats.keySet()) {
+ final NetworkStatsHistory history = mNetworkXtStats.get(ident);
pw.print(" ident="); pw.println(ident.toString());
history.dump(" ", pw, fullHistory);
}
@@ -1314,39 +1410,78 @@
* @deprecated only for temporary testing
*/
@Deprecated
- private void generateRandomLocked() {
- final long NET_END = System.currentTimeMillis();
- final long NET_START = NET_END - mSettings.getNetworkMaxHistory();
- final long NET_RX_BYTES = 3 * GB_IN_BYTES;
- final long NET_RX_PACKETS = NET_RX_BYTES / 1024;
- final long NET_TX_BYTES = 2 * GB_IN_BYTES;
- final long NET_TX_PACKETS = NET_TX_BYTES / 1024;
+ private void generateRandomLocked(String[] args) {
+ final long totalBytes = Long.parseLong(args[1]);
+ final long totalTime = Long.parseLong(args[2]);
+
+ final PackageManager pm = mContext.getPackageManager();
+ final ArrayList<Integer> specialUidList = Lists.newArrayList();
+ for (int i = 3; i < args.length; i++) {
+ try {
+ specialUidList.add(pm.getApplicationInfo(args[i], 0).uid);
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
- final long UID_END = System.currentTimeMillis();
- final long UID_START = UID_END - mSettings.getUidMaxHistory();
- final long UID_RX_BYTES = 500 * MB_IN_BYTES;
- final long UID_RX_PACKETS = UID_RX_BYTES / 1024;
- final long UID_TX_BYTES = 100 * MB_IN_BYTES;
- final long UID_TX_PACKETS = UID_TX_BYTES / 1024;
- final long UID_OPERATIONS = UID_RX_BYTES / 2048;
+ final HashSet<Integer> otherUidSet = Sets.newHashSet();
+ for (ApplicationInfo info : pm.getInstalledApplications(0)) {
+ if (pm.checkPermission(android.Manifest.permission.INTERNET, info.packageName)
+ == PackageManager.PERMISSION_GRANTED && !specialUidList.contains(info.uid)) {
+ otherUidSet.add(info.uid);
+ }
+ }
- final List<ApplicationInfo> installedApps = mContext
- .getPackageManager().getInstalledApplications(0);
+ final ArrayList<Integer> otherUidList = new ArrayList<Integer>(otherUidSet);
- mNetworkStats.clear();
+ final long end = System.currentTimeMillis();
+ final long start = end - totalTime;
+
+ mNetworkDevStats.clear();
+ mNetworkXtStats.clear();
mUidStats.clear();
- for (NetworkIdentitySet ident : mActiveIfaces.values()) {
- findOrCreateNetworkStatsLocked(ident).generateRandom(NET_START, NET_END, NET_RX_BYTES,
- NET_RX_PACKETS, NET_TX_BYTES, NET_TX_PACKETS, 0L);
- for (ApplicationInfo info : installedApps) {
- final int uid = info.uid;
- findOrCreateUidStatsLocked(ident, uid, SET_DEFAULT, TAG_NONE).generateRandom(
- UID_START, UID_END, UID_RX_BYTES, UID_RX_PACKETS, UID_TX_BYTES,
- UID_TX_PACKETS, UID_OPERATIONS);
- findOrCreateUidStatsLocked(ident, uid, SET_FOREGROUND, TAG_NONE).generateRandom(
- UID_START, UID_END, UID_RX_BYTES, UID_RX_PACKETS, UID_TX_BYTES,
- UID_TX_PACKETS, UID_OPERATIONS);
+ final Random r = new Random();
+ for (NetworkIdentitySet ident : mActiveIfaces.values()) {
+ final NetworkStatsHistory devHistory = findOrCreateNetworkDevStatsLocked(ident);
+ final NetworkStatsHistory xtHistory = findOrCreateNetworkXtStatsLocked(ident);
+
+ final ArrayList<Integer> uidList = new ArrayList<Integer>();
+ uidList.addAll(specialUidList);
+
+ if (uidList.size() == 0) {
+ Collections.shuffle(otherUidList);
+ uidList.addAll(otherUidList);
+ }
+
+ boolean first = true;
+ long remainingBytes = totalBytes;
+ for (int uid : uidList) {
+ final NetworkStatsHistory defaultHistory = findOrCreateUidStatsLocked(
+ ident, uid, SET_DEFAULT, TAG_NONE);
+ final NetworkStatsHistory foregroundHistory = findOrCreateUidStatsLocked(
+ ident, uid, SET_FOREGROUND, TAG_NONE);
+
+ final long uidBytes = totalBytes / uidList.size();
+
+ final float fractionDefault = r.nextFloat();
+ final long defaultBytes = (long) (uidBytes * fractionDefault);
+ final long foregroundBytes = (long) (uidBytes * (1 - fractionDefault));
+
+ defaultHistory.generateRandom(start, end, defaultBytes);
+ foregroundHistory.generateRandom(start, end, foregroundBytes);
+
+ if (first) {
+ final long bumpTime = (start + end) / 2;
+ defaultHistory.recordData(
+ bumpTime, bumpTime + DAY_IN_MILLIS, 200 * MB_IN_BYTES, 0);
+ first = false;
+ }
+
+ devHistory.recordEntireHistory(defaultHistory);
+ devHistory.recordEntireHistory(foregroundHistory);
+ xtHistory.recordEntireHistory(defaultHistory);
+ xtHistory.recordEntireHistory(foregroundHistory);
}
}
}
@@ -1369,6 +1504,10 @@
}
}
+ private static NetworkStats computeNetworkXtSnapshotFromUid(NetworkStats uidSnapshot) {
+ return uidSnapshot.groupedByIface();
+ }
+
private int estimateNetworkBuckets() {
return (int) (mSettings.getNetworkMaxHistory() / mSettings.getNetworkBucketDuration());
}
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index eb135b7..0e9f64c 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -753,7 +753,7 @@
if (state != null) {
final InstallArgs args = state.getInstallArgs();
- Slog.i(TAG, "Validation timed out for " + args.packageURI.toString());
+ Slog.i(TAG, "Verification timed out for " + args.packageURI.toString());
mPendingVerification.remove(verificationId);
int ret = PackageManager.INSTALL_FAILED_VERIFICATION_TIMEOUT;
@@ -769,7 +769,7 @@
final PackageVerificationState state = mPendingVerification.get(verificationId);
if (state == null) {
- Slog.w(TAG, "Invalid validation token " + verificationId + " received");
+ Slog.w(TAG, "Invalid verification token " + verificationId + " received");
break;
}
@@ -1157,6 +1157,10 @@
} // synchronized (mInstallLock)
}
+ public boolean isFirstBoot() {
+ return !mRestoredSettings;
+ }
+
private String getRequiredVerifierLPr() {
final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
final List<ResolveInfo> receivers = queryIntentReceivers(verification, PACKAGE_MIME_TYPE,
@@ -2983,12 +2987,14 @@
}
if (pkgs != null) {
for (int i=0; i<pkgs.size(); i++) {
- try {
- ActivityManagerNative.getDefault().showBootMessage(
- mContext.getResources().getString(
- com.android.internal.R.string.android_upgrading_apk,
- i+1, pkgs.size()), true);
- } catch (RemoteException e) {
+ if (!isFirstBoot()) {
+ try {
+ ActivityManagerNative.getDefault().showBootMessage(
+ mContext.getResources().getString(
+ com.android.internal.R.string.android_upgrading_apk,
+ i+1, pkgs.size()), true);
+ } catch (RemoteException e) {
+ }
}
PackageParser.Package p = pkgs.get(i);
synchronized (mInstallLock) {
@@ -5464,8 +5470,8 @@
final int requiredUid = mRequiredVerifierPackage == null ? -1
: getPackageUid(mRequiredVerifierPackage);
if (requiredUid != -1 && isVerificationEnabled()) {
- final Intent verification = new Intent(
- Intent.ACTION_PACKAGE_NEEDS_VERIFICATION, packageURI);
+ final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
+ verification.setDataAndType(packageURI, PACKAGE_MIME_TYPE);
verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
final List<ResolveInfo> receivers = queryIntentReceivers(verification, null,
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index 7cdb5b1..bfe6613 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -1238,9 +1238,8 @@
mReadMessages.append("No start tag found in settings file\n");
PackageManagerService.reportSettingsProblem(Log.WARN,
"No start tag found in package manager settings");
- Log
- .wtf(PackageManagerService.TAG,
- "No start tag found in package manager settings");
+ Log.wtf(PackageManagerService.TAG,
+ "No start tag found in package manager settings");
return false;
}
diff --git a/services/java/com/android/server/wm/DragState.java b/services/java/com/android/server/wm/DragState.java
index f2e7485..73cd64e 100644
--- a/services/java/com/android/server/wm/DragState.java
+++ b/services/java/com/android/server/wm/DragState.java
@@ -32,7 +32,6 @@
import android.view.Surface;
import android.view.View;
import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
import java.util.ArrayList;
@@ -275,7 +274,8 @@
final int myPid = Process.myPid();
// Move the surface to the given touch
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, ">>> OPEN TRANSACTION notifyMoveLw");
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ WindowManagerService.TAG, ">>> OPEN TRANSACTION notifyMoveLw");
Surface.openTransaction();
try {
mSurface.setPosition(x - mThumbOffsetX, y - mThumbOffsetY);
@@ -284,7 +284,8 @@
(int)(x - mThumbOffsetX) + "," + (int)(y - mThumbOffsetY) + ")");
} finally {
Surface.closeTransaction();
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, "<<< CLOSE TRANSACTION notifyMoveLw");
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ WindowManagerService.TAG, "<<< CLOSE TRANSACTION notifyMoveLw");
}
// Tell the affected window
diff --git a/services/java/com/android/server/wm/FakeWindowImpl.java b/services/java/com/android/server/wm/FakeWindowImpl.java
new file mode 100644
index 0000000..0e72f7d
--- /dev/null
+++ b/services/java/com/android/server/wm/FakeWindowImpl.java
@@ -0,0 +1,103 @@
+/*
+ * 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.os.Looper;
+import android.os.Process;
+import android.util.Slog;
+import android.view.InputChannel;
+import android.view.InputHandler;
+import android.view.InputQueue;
+import android.view.WindowManagerPolicy;
+
+public final class FakeWindowImpl implements WindowManagerPolicy.FakeWindow {
+ final WindowManagerService mService;
+ final InputChannel mServerChannel, mClientChannel;
+ final InputApplicationHandle mApplicationHandle;
+ final InputWindowHandle mWindowHandle;
+ final int mWindowLayer;
+
+ boolean mTouchFullscreen;
+
+ public FakeWindowImpl(WindowManagerService service, Looper looper, InputHandler inputHandler,
+ String name, int windowType, int layoutParamsFlags, boolean canReceiveKeys,
+ boolean hasFocus, boolean touchFullscreen) {
+ mService = service;
+
+ InputChannel[] channels = InputChannel.openInputChannelPair(name);
+ mServerChannel = channels[0];
+ mClientChannel = channels[1];
+ mService.mInputManager.registerInputChannel(mServerChannel, null);
+ InputQueue.registerInputChannel(mClientChannel, inputHandler, looper.getQueue());
+
+ mApplicationHandle = new InputApplicationHandle(null);
+ mApplicationHandle.name = name;
+ mApplicationHandle.dispatchingTimeoutNanos =
+ WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
+
+ mWindowHandle = new InputWindowHandle(mApplicationHandle, null);
+ mWindowHandle.name = name;
+ mWindowHandle.inputChannel = mServerChannel;
+ mWindowLayer = getLayerLw(windowType);
+ mWindowHandle.layer = mWindowLayer;
+ mWindowHandle.layoutParamsFlags = layoutParamsFlags;
+ mWindowHandle.layoutParamsType = windowType;
+ mWindowHandle.dispatchingTimeoutNanos =
+ WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
+ mWindowHandle.visible = true;
+ mWindowHandle.canReceiveKeys = canReceiveKeys;
+ mWindowHandle.hasFocus = hasFocus;
+ mWindowHandle.hasWallpaper = false;
+ mWindowHandle.paused = false;
+ mWindowHandle.ownerPid = Process.myPid();
+ mWindowHandle.ownerUid = Process.myUid();
+ mWindowHandle.inputFeatures = 0;
+ mWindowHandle.scaleFactor = 1.0f;
+
+ mTouchFullscreen = touchFullscreen;
+ }
+
+ void layout(int dw, int dh) {
+ if (mTouchFullscreen) {
+ mWindowHandle.touchableRegion.set(0, 0, dw, dh);
+ } else {
+ mWindowHandle.touchableRegion.setEmpty();
+ }
+ mWindowHandle.frameLeft = 0;
+ mWindowHandle.frameTop = 0;
+ mWindowHandle.frameRight = dw;
+ mWindowHandle.frameBottom = dh;
+ }
+
+ @Override
+ public void dismiss() {
+ synchronized (mService.mWindowMap) {
+ if (mService.removeFakeWindowLocked(this)) {
+ mService.mInputManager.unregisterInputChannel(mServerChannel);
+ InputQueue.unregisterInputChannel(mClientChannel);
+ mClientChannel.dispose();
+ mServerChannel.dispose();
+ }
+ }
+ }
+
+ private int getLayerLw(int windowType) {
+ return mService.mPolicy.windowTypeToLayerLw(windowType)
+ * WindowManagerService.TYPE_LAYER_MULTIPLIER
+ + WindowManagerService.TYPE_LAYER_OFFSET;
+ }
+}
diff --git a/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java
index 60333a3..df7e0e1 100644
--- a/services/java/com/android/server/wm/InputManager.java
+++ b/services/java/com/android/server/wm/InputManager.java
@@ -575,7 +575,7 @@
}
@SuppressWarnings("unused")
- public boolean interceptKeyBeforeDispatching(InputWindowHandle focus,
+ public long interceptKeyBeforeDispatching(InputWindowHandle focus,
KeyEvent event, int policyFlags) {
return mWindowManagerService.mInputMonitor.interceptKeyBeforeDispatching(
focus, event, policyFlags);
diff --git a/services/java/com/android/server/wm/InputMonitor.java b/services/java/com/android/server/wm/InputMonitor.java
index 573a7d42..fb74d27 100644
--- a/services/java/com/android/server/wm/InputMonitor.java
+++ b/services/java/com/android/server/wm/InputMonitor.java
@@ -169,6 +169,11 @@
}
}
+ final int NFW = mService.mFakeWindows.size();
+ for (int i = 0; i < NFW; i++) {
+ addInputWindowHandleLw(mService.mFakeWindows.get(i).mWindowHandle);
+ }
+
final int N = windows.size();
for (int i = N - 1; i >= 0; i--) {
final WindowState child = windows.get(i);
@@ -283,7 +288,7 @@
/* Provides an opportunity for the window manager policy to process a key before
* ordinary dispatch. */
- public boolean interceptKeyBeforeDispatching(
+ public long interceptKeyBeforeDispatching(
InputWindowHandle focus, KeyEvent event, int policyFlags) {
WindowState windowState = focus != null ? (WindowState) focus.windowState : null;
return mService.mPolicy.interceptKeyBeforeDispatching(windowState, event, policyFlags);
diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java
index e25638f..91576e7 100644
--- a/services/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -81,7 +81,7 @@
mOriginalHeight = originalHeight;
if (!inTransaction) {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
">>> OPEN TRANSACTION ScreenRotationAnimation");
Surface.openTransaction();
}
@@ -117,7 +117,7 @@
mSurface = null;
return;
}
-
+
Paint paint = new Paint(0);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
c.drawBitmap(screenshot, 0, 0, paint);
@@ -127,7 +127,7 @@
} finally {
if (!inTransaction) {
Surface.closeTransaction();
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
"<<< CLOSE TRANSACTION ScreenRotationAnimation");
}
@@ -254,7 +254,7 @@
mEnterAnimation.restrictDuration(maxAnimationDuration);
mEnterAnimation.scaleCurrentDuration(animationScale);
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
">>> OPEN TRANSACTION ScreenRotationAnimation.dismiss");
Surface.openTransaction();
@@ -266,7 +266,7 @@
Slog.w(TAG, "Unable to allocate black surface", e);
} finally {
Surface.closeTransaction();
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
"<<< CLOSE TRANSACTION ScreenRotationAnimation.dismiss");
}
diff --git a/services/java/com/android/server/wm/Session.java b/services/java/com/android/server/wm/Session.java
index 2e0c9ab..03b7546 100644
--- a/services/java/com/android/server/wm/Session.java
+++ b/services/java/com/android/server/wm/Session.java
@@ -134,28 +134,28 @@
}
}
- public int add(IWindow window, WindowManager.LayoutParams attrs,
+ public int add(IWindow window, int seq, WindowManager.LayoutParams attrs,
int viewVisibility, Rect outContentInsets, InputChannel outInputChannel) {
- return mService.addWindow(this, window, attrs, viewVisibility, outContentInsets,
+ return mService.addWindow(this, window, seq, attrs, viewVisibility, outContentInsets,
outInputChannel);
}
- public int addWithoutInputChannel(IWindow window, WindowManager.LayoutParams attrs,
+ public int addWithoutInputChannel(IWindow window, int seq, WindowManager.LayoutParams attrs,
int viewVisibility, Rect outContentInsets) {
- return mService.addWindow(this, window, attrs, viewVisibility, outContentInsets, null);
+ return mService.addWindow(this, window, seq, attrs, viewVisibility, outContentInsets, null);
}
public void remove(IWindow window) {
mService.removeWindow(this, window);
}
- public int relayout(IWindow window, WindowManager.LayoutParams attrs,
+ public int relayout(IWindow window, int seq, WindowManager.LayoutParams attrs,
int requestedWidth, int requestedHeight, int viewFlags,
boolean insetsPending, Rect outFrame, Rect outContentInsets,
Rect outVisibleInsets, Configuration outConfig, Surface outSurface) {
if (false) Slog.d(WindowManagerService.TAG, ">>>>>> ENTERED relayout from "
+ Binder.getCallingPid());
- int res = mService.relayoutWindow(this, window, attrs,
+ int res = mService.relayoutWindow(this, window, seq, attrs,
requestedWidth, requestedHeight, viewFlags, insetsPending,
outFrame, outContentInsets, outVisibleInsets, outConfig, outSurface);
if (false) Slog.d(WindowManagerService.TAG, "<<<<<< EXITING relayout to "
@@ -278,7 +278,8 @@
// Make the surface visible at the proper location
final Surface surface = mService.mDragState.mSurface;
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, ">>> OPEN TRANSACTION performDrag");
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ WindowManagerService.TAG, ">>> OPEN TRANSACTION performDrag");
Surface.openTransaction();
try {
surface.setPosition(touchX - thumbCenterX,
@@ -288,7 +289,8 @@
surface.show();
} finally {
Surface.closeTransaction();
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, "<<< CLOSE TRANSACTION performDrag");
+ if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ WindowManagerService.TAG, "<<< CLOSE TRANSACTION performDrag");
}
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 3ea9e81..0a9ef3d 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -118,6 +118,7 @@
import android.view.WindowManagerImpl;
import android.view.WindowManagerPolicy;
import android.view.WindowManager.LayoutParams;
+import android.view.WindowManagerPolicy.FakeWindow;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;
@@ -142,7 +143,7 @@
/** {@hide} */
public class WindowManagerService extends IWindowManager.Stub
- implements Watchdog.Monitor {
+ implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs {
static final String TAG = "WindowManager";
static final boolean DEBUG = false;
static final boolean DEBUG_ADD_REMOVE = false;
@@ -168,6 +169,7 @@
static final boolean DEBUG_SCREENSHOT = false;
static final boolean SHOW_SURFACE_ALLOC = false;
static final boolean SHOW_TRANSACTIONS = false;
+ static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS;
static final boolean HIDE_STACK_CRAWLS = true;
static final boolean PROFILE_ORIENTATION = false;
@@ -296,6 +298,8 @@
final boolean mHaveInputMethods;
+ final boolean mAllowBootMessages;
+
final boolean mLimitedAlphaCompositing;
final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();
@@ -352,6 +356,12 @@
final ArrayList<WindowState> mWindows = new ArrayList<WindowState>();
/**
+ * Fake windows added to the window manager. Note: ordered from top to
+ * bottom, opposite of mWindows.
+ */
+ final ArrayList<FakeWindowImpl> mFakeWindows = new ArrayList<FakeWindowImpl>();
+
+ /**
* Windows that are being resized. Used so we can tell the client about
* the resize after closing the transaction in which we resized the
* underlying surface.
@@ -442,7 +452,9 @@
int mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
int mLayoutSeq = 0;
-
+
+ int mLastStatusBarVisibility = 0;
+
// State while inside of layoutAndPlaceSurfacesLocked().
boolean mFocusMayChange;
@@ -624,8 +636,8 @@
float mCompatibleScreenScale;
public static WindowManagerService main(Context context,
- PowerManagerService pm, boolean haveInputMethods) {
- WMThread thr = new WMThread(context, pm, haveInputMethods);
+ PowerManagerService pm, boolean haveInputMethods, boolean allowBootMsgs) {
+ WMThread thr = new WMThread(context, pm, haveInputMethods, allowBootMsgs);
thr.start();
synchronized (thr) {
@@ -645,19 +657,21 @@
private final Context mContext;
private final PowerManagerService mPM;
private final boolean mHaveInputMethods;
+ private final boolean mAllowBootMessages;
public WMThread(Context context, PowerManagerService pm,
- boolean haveInputMethods) {
+ boolean haveInputMethods, boolean allowBootMsgs) {
super("WindowManager");
mContext = context;
mPM = pm;
mHaveInputMethods = haveInputMethods;
+ mAllowBootMessages = allowBootMsgs;
}
public void run() {
Looper.prepare();
WindowManagerService s = new WindowManagerService(mContext, mPM,
- mHaveInputMethods);
+ mHaveInputMethods, mAllowBootMessages);
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_DISPLAY);
android.os.Process.setCanSelfBackground(false);
@@ -702,7 +716,7 @@
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_FOREGROUND);
android.os.Process.setCanSelfBackground(false);
- mPolicy.init(mContext, mService, mPM);
+ mPolicy.init(mContext, mService, mService, mPM);
synchronized (this) {
mRunning = true;
@@ -719,9 +733,10 @@
}
private WindowManagerService(Context context, PowerManagerService pm,
- boolean haveInputMethods) {
+ boolean haveInputMethods, boolean showBootMsgs) {
mContext = context;
mHaveInputMethods = haveInputMethods;
+ mAllowBootMessages = showBootMsgs;
mLimitedAlphaCompositing = context.getResources().getBoolean(
com.android.internal.R.bool.config_sf_limitedAlpha);
@@ -1948,7 +1963,7 @@
}
}
- public int addWindow(Session session, IWindow client,
+ public int addWindow(Session session, IWindow client, int seq,
WindowManager.LayoutParams attrs, int viewVisibility,
Rect outContentInsets, InputChannel outInputChannel) {
int res = mPolicy.checkAddPermission(attrs);
@@ -2040,7 +2055,7 @@
}
win = new WindowState(this, session, client, token,
- attachedWindow, attrs, viewVisibility);
+ attachedWindow, seq, attrs, viewVisibility);
if (win.mDeathRecipient == null) {
// Client has apparently died, so there is no reason to
// continue.
@@ -2355,7 +2370,7 @@
synchronized (mWindowMap) {
WindowState w = windowForClientLocked(session, client, false);
if ((w != null) && (w.mSurface != null)) {
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
">>> OPEN TRANSACTION setTransparentRegion");
Surface.openTransaction();
try {
@@ -2364,7 +2379,7 @@
w.mSurface.setTransparentRegionHint(region);
} finally {
Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
"<<< CLOSE TRANSACTION setTransparentRegion");
}
}
@@ -2467,7 +2482,7 @@
return null;
}
- public int relayoutWindow(Session session, IWindow client,
+ public int relayoutWindow(Session session, IWindow client, int seq,
WindowManager.LayoutParams attrs, int requestedWidth,
int requestedHeight, int viewVisibility, boolean insetsPending,
Rect outFrame, Rect outContentInsets, Rect outVisibleInsets,
@@ -2477,13 +2492,13 @@
boolean configChanged;
// if they don't have this permission, mask out the status bar bits
+ int systemUiVisibility = 0;
if (attrs != null) {
- if (((attrs.systemUiVisibility|attrs.subtreeSystemUiVisibility)
- & StatusBarManager.DISABLE_MASK) != 0) {
+ systemUiVisibility = (attrs.systemUiVisibility|attrs.subtreeSystemUiVisibility);
+ if ((systemUiVisibility & StatusBarManager.DISABLE_MASK) != 0) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
!= PackageManager.PERMISSION_GRANTED) {
- attrs.systemUiVisibility &= ~StatusBarManager.DISABLE_MASK;
- attrs.subtreeSystemUiVisibility &= ~StatusBarManager.DISABLE_MASK;
+ systemUiVisibility &= ~StatusBarManager.DISABLE_MASK;
}
}
}
@@ -2496,6 +2511,9 @@
}
win.mRequestedWidth = requestedWidth;
win.mRequestedHeight = requestedHeight;
+ if (attrs != null && seq == win.mSeq) {
+ win.mSystemUiVisibility = systemUiVisibility;
+ }
if (attrs != null) {
mPolicy.adjustWindowParamsLw(attrs);
@@ -4834,6 +4852,9 @@
public void showBootMessage(final CharSequence msg, final boolean always) {
boolean first = false;
synchronized(mWindowMap) {
+ if (!mAllowBootMessages) {
+ return;
+ }
if (!mShowingBootMessages) {
if (!always) {
return;
@@ -4885,7 +4906,8 @@
}
}
- if (SHOW_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION showStrictModeViolation");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ ">>> OPEN TRANSACTION showStrictModeViolation");
Surface.openTransaction();
try {
if (mStrictModeFlash == null) {
@@ -4894,7 +4916,8 @@
mStrictModeFlash.setVisibility(on);
} finally {
Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION showStrictModeViolation");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ "<<< CLOSE TRANSACTION showStrictModeViolation");
}
}
}
@@ -5050,16 +5073,23 @@
/**
* Freeze rotation changes. (Enable "rotation lock".)
* Persists across reboots.
+ * @param rotation The desired rotation to freeze to, or -1 to use the
+ * current rotation.
*/
- public void freezeRotation() {
+ public void freezeRotation(int rotation) {
if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,
"freezeRotation()")) {
throw new SecurityException("Requires SET_ORIENTATION permission");
}
+ if (rotation < -1 || rotation > Surface.ROTATION_270) {
+ throw new IllegalArgumentException("Rotation argument must be -1 or a valid "
+ + "rotation constant.");
+ }
if (DEBUG_ORIENTATION) Slog.v(TAG, "freezeRotation: mRotation=" + mRotation);
- mPolicy.setUserRotationMode(WindowManagerPolicy.USER_ROTATION_LOCKED, mRotation);
+ mPolicy.setUserRotationMode(WindowManagerPolicy.USER_ROTATION_LOCKED,
+ rotation == -1 ? mRotation : rotation);
updateRotationUnchecked(false);
}
@@ -5203,32 +5233,27 @@
startFreezingDisplayLocked(inTransaction);
mInputManager.setDisplayOrientation(0, rotation);
- // NOTE: We disable the rotation in the emulator because
- // it doesn't support hardware OpenGL emulation yet.
- if (CUSTOM_SCREEN_ROTATION && mScreenRotationAnimation != null
- && mScreenRotationAnimation.hasScreenshot()) {
- Surface.freezeDisplay(0);
- if (!inTransaction) {
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
- ">>> OPEN TRANSACTION setRotationUnchecked");
- Surface.openTransaction();
- }
- try {
- if (mScreenRotationAnimation != null) {
- mScreenRotationAnimation.setRotation(rotation);
- }
- } finally {
- if (!inTransaction) {
- Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
- "<<< CLOSE TRANSACTION setRotationUnchecked");
- }
- }
- Surface.setOrientation(0, rotation);
- Surface.unfreezeDisplay(0);
- } else {
- Surface.setOrientation(0, rotation);
+ if (!inTransaction) {
+ if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ ">>> OPEN TRANSACTION setRotationUnchecked");
+ Surface.openTransaction();
}
+ try {
+ // NOTE: We disable the rotation in the emulator because
+ // it doesn't support hardware OpenGL emulation yet.
+ if (CUSTOM_SCREEN_ROTATION && mScreenRotationAnimation != null
+ && mScreenRotationAnimation.hasScreenshot()) {
+ mScreenRotationAnimation.setRotation(rotation);
+ }
+ Surface.setOrientation(0, rotation);
+ } finally {
+ if (!inTransaction) {
+ Surface.closeTransaction();
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ "<<< CLOSE TRANSACTION setRotationUnchecked");
+ }
+ }
+
rebuildBlackFrame(inTransaction);
for (int i=mWindows.size()-1; i>=0; i--) {
@@ -5704,6 +5729,7 @@
Configuration computeNewConfigurationLocked() {
Configuration config = new Configuration();
+ config.fontScale = 0;
if (!computeNewConfigurationLocked(config)) {
return null;
}
@@ -5820,6 +5846,10 @@
final DisplayMetrics dm = mDisplayMetrics;
mAppDisplayWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation);
mAppDisplayHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation);
+ if (false) {
+ Slog.i(TAG, "Set app display size: " + mAppDisplayWidth
+ + " x " + mAppDisplayHeight);
+ }
mDisplay.getMetricsWithSize(dm, mAppDisplayWidth, mAppDisplayHeight);
mCompatibleScreenScale = CompatibilityInfo.computeCompatibleScaling(dm,
@@ -5837,8 +5867,8 @@
// Compute the screen layout size class.
int screenLayout;
- int longSize = dw;
- int shortSize = dh;
+ int longSize = mAppDisplayWidth;
+ int shortSize = mAppDisplayHeight;
if (longSize < shortSize) {
int tmp = longSize;
longSize = shortSize;
@@ -6357,8 +6387,6 @@
// Ignore if process has died.
}
}
-
- mPolicy.focusChanged(lastFocus, newFocus);
}
} break;
@@ -6826,7 +6854,7 @@
private void rebuildBlackFrame(boolean inTransaction) {
if (!inTransaction) {
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
">>> OPEN TRANSACTION rebuildBlackFrame");
Surface.openTransaction();
}
@@ -6861,7 +6889,7 @@
} finally {
if (!inTransaction) {
Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
"<<< CLOSE TRANSACTION rebuildBlackFrame");
}
}
@@ -7173,6 +7201,11 @@
final int dw = mCurDisplayWidth;
final int dh = mCurDisplayHeight;
+ final int NFW = mFakeWindows.size();
+ for (int i=0; i<NFW; i++) {
+ mFakeWindows.get(i).layout(dw, dh);
+ }
+
final int N = mWindows.size();
int i;
@@ -7328,7 +7361,8 @@
createWatermark = true;
}
- if (SHOW_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION performLayoutAndPlaceSurfaces");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ ">>> OPEN TRANSACTION performLayoutAndPlaceSurfaces");
Surface.openTransaction();
@@ -8437,7 +8471,8 @@
Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
if (mWatermark != null) {
mWatermark.drawIfNeeded();
@@ -8824,6 +8859,7 @@
final WindowState oldFocus = mCurrentFocus;
mCurrentFocus = newFocus;
mLosingFocus.remove(newFocus);
+ int focusChanged = mPolicy.focusChangedLw(oldFocus, newFocus);
final WindowState imWindow = mInputMethodWindow;
if (newFocus != imWindow && oldFocus != imWindow) {
@@ -8834,13 +8870,22 @@
}
if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
performLayoutLockedInner(true /*initial*/, updateInputWindows);
+ focusChanged &= ~WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
} else if (mode == UPDATE_FOCUS_WILL_PLACE_SURFACES) {
// Client will do the layout, but we need to assign layers
// for handleNewWindowLocked() below.
assignLayersLocked();
}
}
-
+
+ if ((focusChanged&WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT) != 0) {
+ // The change in focus caused us to need to do a layout. Okay.
+ mLayoutNeeded = true;
+ if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
+ performLayoutLockedInner(true /*initial*/, updateInputWindows);
+ }
+ }
+
if (mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS) {
// If we defer assigning layers, then the caller is responsible for
// doing this part.
@@ -9002,8 +9047,8 @@
mScreenRotationAnimation = null;
}
updateRotation = true;
- Surface.unfreezeDisplay(0);
}
+ Surface.unfreezeDisplay(0);
mInputMonitor.thawInputDispatchingLw();
@@ -9086,19 +9131,82 @@
@Override
public void statusBarVisibilityChanged(int visibility) {
- mInputManager.setSystemUiVisibility(visibility);
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Caller does not hold permission "
+ + android.Manifest.permission.STATUS_BAR);
+ }
+
synchronized (mWindowMap) {
- final int N = mWindows.size();
- for (int i = 0; i < N; i++) {
- WindowState ws = mWindows.get(i);
- try {
- if (ws.getAttrs().hasSystemUiListeners) {
- ws.mClient.dispatchSystemUiVisibilityChanged(visibility);
- }
- } catch (RemoteException e) {
- // so sorry
+ mLastStatusBarVisibility = visibility;
+ visibility = mPolicy.adjustSystemUiVisibilityLw(visibility);
+ updateStatusBarVisibilityLocked(visibility);
+ }
+ }
+
+ void updateStatusBarVisibilityLocked(int visibility) {
+ mInputManager.setSystemUiVisibility(visibility);
+ final int N = mWindows.size();
+ for (int i = 0; i < N; i++) {
+ WindowState ws = mWindows.get(i);
+ try {
+ int curValue = ws.mSystemUiVisibility;
+ int diff = curValue ^ visibility;
+ // We are only interested in differences of one of the
+ // clearable flags...
+ diff &= View.SYSTEM_UI_CLEARABLE_FLAGS;
+ // ...if it has actually been cleared.
+ diff &= ~visibility;
+ int newValue = (curValue&~diff) | (visibility&diff);
+ if (newValue != curValue) {
+ ws.mSeq++;
+ ws.mSystemUiVisibility = newValue;
+ }
+ if (newValue != curValue || ws.mAttrs.hasSystemUiListeners) {
+ ws.mClient.dispatchSystemUiVisibilityChanged(ws.mSeq,
+ visibility, newValue, diff);
+ }
+ } catch (RemoteException e) {
+ // so sorry
+ }
+ }
+ }
+
+ @Override
+ public void reevaluateStatusBarVisibility() {
+ synchronized (mWindowMap) {
+ int visibility = mPolicy.adjustSystemUiVisibilityLw(mLastStatusBarVisibility);
+ updateStatusBarVisibilityLocked(visibility);
+ performLayoutAndPlaceSurfacesLocked();
+ }
+ }
+
+ @Override
+ public FakeWindow addFakeWindow(Looper looper, InputHandler inputHandler,
+ String name, int windowType, int layoutParamsFlags, boolean canReceiveKeys,
+ boolean hasFocus, boolean touchFullscreen) {
+ synchronized (mWindowMap) {
+ FakeWindowImpl fw = new FakeWindowImpl(this, looper, inputHandler, name, windowType,
+ layoutParamsFlags, canReceiveKeys, hasFocus, touchFullscreen);
+ int i=0;
+ while (i<mFakeWindows.size()) {
+ if (mFakeWindows.get(i).mWindowLayer <= fw.mWindowLayer) {
+ break;
}
}
+ mFakeWindows.add(i, fw);
+ mInputMonitor.updateInputWindowsLw(true);
+ return fw;
+ }
+ }
+
+ boolean removeFakeWindowLocked(FakeWindow window) {
+ synchronized (mWindowMap) {
+ if (mFakeWindows.remove(window)) {
+ mInputMonitor.updateInputWindowsLw(true);
+ return true;
+ }
+ return false;
}
}
@@ -9362,6 +9470,10 @@
pw.print(" mInTouchMode="); pw.print(mInTouchMode);
pw.print(" mLayoutSeq="); pw.println(mLayoutSeq);
if (dumpAll) {
+ if (mLastStatusBarVisibility != 0) {
+ pw.print(" mLastStatusBarVisibility=0x");
+ pw.println(Integer.toHexString(mLastStatusBarVisibility));
+ }
if (mInputMethodWindow != null) {
pw.print(" mInputMethodWindow="); pw.println(mInputMethodWindow);
}
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 3640a15..e921818 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -57,6 +57,7 @@
final class WindowState implements WindowManagerPolicy.WindowState {
static final boolean DEBUG_VISIBILITY = WindowManagerService.DEBUG_VISIBILITY;
static final boolean SHOW_TRANSACTIONS = WindowManagerService.SHOW_TRANSACTIONS;
+ static final boolean SHOW_LIGHT_TRANSACTIONS = WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
static final boolean SHOW_SURFACE_ALLOC = WindowManagerService.SHOW_SURFACE_ALLOC;
final WindowManagerService mService;
@@ -76,8 +77,10 @@
final boolean mIsImWindow;
final boolean mIsWallpaper;
final boolean mIsFloatingLayer;
+ int mSeq;
boolean mEnforceSizeCompat;
int mViewVisibility;
+ int mSystemUiVisibility;
boolean mPolicyVisibility = true;
boolean mPolicyVisibilityAfterAnim = true;
boolean mAppFreezing;
@@ -282,7 +285,7 @@
boolean mWasPaused;
WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token,
- WindowState attachedWindow, WindowManager.LayoutParams a,
+ WindowState attachedWindow, int seq, WindowManager.LayoutParams a,
int viewVisibility) {
mService = service;
mSession = s;
@@ -292,6 +295,7 @@
mViewVisibility = viewVisibility;
DeathRecipient deathRecipient = new DeathRecipient();
mAlpha = a.alpha;
+ mSeq = seq;
mEnforceSizeCompat = (mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0;
if (WindowManagerService.localLOGV) Slog.v(
WindowManagerService.TAG, "Window " + this + " client=" + c.asBinder()
@@ -551,6 +555,10 @@
return mAttrs;
}
+ public int getSystemUiVisibility() {
+ return mSystemUiVisibility;
+ }
+
public int getSurfaceLayer() {
return mLayer;
}
@@ -664,7 +672,7 @@
WindowManagerService.TAG, "Got surface: " + mSurface
+ ", set left=" + mFrame.left + " top=" + mFrame.top
+ ", animLayer=" + mAnimLayer);
- if (SHOW_TRANSACTIONS) {
+ if (SHOW_LIGHT_TRANSACTIONS) {
Slog.i(WindowManagerService.TAG, ">>> OPEN TRANSACTION createSurfaceLocked");
WindowManagerService.logSurface(this, "CREATE pos=(" + mFrame.left
+ "," + mFrame.top + ") (" +
@@ -693,7 +701,8 @@
mLastHidden = true;
} finally {
Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, "<<< CLOSE TRANSACTION createSurfaceLocked");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ "<<< CLOSE TRANSACTION createSurfaceLocked");
}
if (WindowManagerService.localLOGV) Slog.v(
WindowManagerService.TAG, "Created surface " + this);
@@ -1597,6 +1606,9 @@
pw.print(" mLastHidden="); pw.print(mLastHidden);
pw.print(" mHaveFrame="); pw.print(mHaveFrame);
pw.print(" mObscured="); pw.println(mObscured);
+ pw.print(prefix); pw.print("mSeq="); pw.print(mSeq);
+ pw.print(" mSystemUiVisibility=0x");
+ pw.println(Integer.toHexString(mSystemUiVisibility));
}
if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || mAttachedHidden) {
pw.print(prefix); pw.print("mPolicyVisibility=");
diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp
index f976301..7e9fba8 100644
--- a/services/jni/com_android_server_InputManager.cpp
+++ b/services/jni/com_android_server_InputManager.cpp
@@ -149,6 +149,12 @@
}
}
+enum {
+ WM_ACTION_PASS_TO_USER = 1,
+ WM_ACTION_POKE_USER_ACTIVITY = 2,
+ WM_ACTION_GO_TO_SLEEP = 4,
+};
+
// --- NativeInputManager ---
@@ -199,7 +205,8 @@
virtual bool isKeyRepeatEnabled();
virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags);
virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags);
- virtual bool interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
+ virtual nsecs_t interceptKeyBeforeDispatching(
+ const sp<InputWindowHandle>& inputWindowHandle,
const KeyEvent* keyEvent, uint32_t policyFlags);
virtual bool dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent);
@@ -819,12 +826,6 @@
void NativeInputManager::handleInterceptActions(jint wmActions, nsecs_t when,
uint32_t& policyFlags) {
- enum {
- WM_ACTION_PASS_TO_USER = 1,
- WM_ACTION_POKE_USER_ACTIVITY = 2,
- WM_ACTION_GO_TO_SLEEP = 4,
- };
-
if (wmActions & WM_ACTION_GO_TO_SLEEP) {
#if DEBUG_INPUT_DISPATCHER_POLICY
LOGD("handleInterceptActions: Going to sleep.");
@@ -848,14 +849,14 @@
}
}
-bool NativeInputManager::interceptKeyBeforeDispatching(
+nsecs_t NativeInputManager::interceptKeyBeforeDispatching(
const sp<InputWindowHandle>& inputWindowHandle,
const KeyEvent* keyEvent, uint32_t policyFlags) {
// Policy:
// - Ignore untrusted events and pass them along.
// - Filter normal events and trusted injected events through the window manager policy to
// handle the HOME key and the like.
- bool result = false;
+ nsecs_t result = 0;
if (policyFlags & POLICY_FLAG_TRUSTED) {
JNIEnv* env = jniEnv();
@@ -863,13 +864,19 @@
jobject inputWindowHandleObj = getInputWindowHandleObjLocalRef(env, inputWindowHandle);
jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
if (keyEventObj) {
- jboolean consumed = env->CallBooleanMethod(mCallbacksObj,
+ jlong delayMillis = env->CallLongMethod(mCallbacksObj,
gCallbacksClassInfo.interceptKeyBeforeDispatching,
inputWindowHandleObj, keyEventObj, policyFlags);
bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching");
android_view_KeyEvent_recycle(env, keyEventObj);
env->DeleteLocalRef(keyEventObj);
- result = consumed && !error;
+ if (!error) {
+ if (delayMillis < 0) {
+ result = -1;
+ } else if (delayMillis > 0) {
+ result = milliseconds_to_nanoseconds(delayMillis);
+ }
+ }
} else {
LOGE("Failed to obtain key event object for interceptKeyBeforeDispatching.");
}
@@ -1433,7 +1440,7 @@
GET_METHOD_ID(gCallbacksClassInfo.interceptKeyBeforeDispatching, clazz,
"interceptKeyBeforeDispatching",
- "(Lcom/android/server/wm/InputWindowHandle;Landroid/view/KeyEvent;I)Z");
+ "(Lcom/android/server/wm/InputWindowHandle;Landroid/view/KeyEvent;I)J");
GET_METHOD_ID(gCallbacksClassInfo.dispatchUnhandledKey, clazz,
"dispatchUnhandledKey",
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index 51eb0a3..dab0705 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -22,6 +22,9 @@
ifeq ($(TARGET_BOARD_PLATFORM), omap3)
LOCAL_CFLAGS += -DNO_RGBX_8888
endif
+ifeq ($(TARGET_BOARD_PLATFORM), omap4)
+ LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY
+endif
ifeq ($(TARGET_BOARD_PLATFORM), s5pc110)
LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY -DNEVER_DEFAULT_TO_ASYNC_MODE
endif
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp
index 59b7e5a..3b7c09e 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp
@@ -122,7 +122,7 @@
DisplayHardwareBase::DisplayHardwareBase(const sp<SurfaceFlinger>& flinger,
uint32_t displayIndex)
- : mCanDraw(true), mScreenAcquired(true)
+ : mScreenAcquired(true)
{
mDisplayEventThread = new DisplayEventThread(flinger);
}
@@ -133,14 +133,9 @@
mDisplayEventThread->requestExitAndWait();
}
-void DisplayHardwareBase::setCanDraw(bool canDraw)
-{
- mCanDraw = canDraw;
-}
-
bool DisplayHardwareBase::canDraw() const
{
- return mCanDraw && mScreenAcquired;
+ return mScreenAcquired;
}
void DisplayHardwareBase::releaseScreen() const
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h
index 3ebc7b6..ef2df43 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h
@@ -43,7 +43,6 @@
bool isScreenAcquired() const;
bool canDraw() const;
- void setCanDraw(bool canDraw);
private:
@@ -74,7 +73,6 @@
};
sp<DisplayEventThreadBase> mDisplayEventThread;
- mutable int mCanDraw;
mutable int mScreenAcquired;
};
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index d2bba0b..be9b226 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -75,7 +75,7 @@
}
void HWComposer::invalidate() {
- mFlinger->signalEvent();
+ mFlinger->repaintEverything();
}
void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
@@ -176,9 +176,9 @@
mList->numHwLayers, mList->flags);
result.append(buffer);
result.append(
- " type | hints | flags | tr | blend | format | source crop | frame name \n"
- "-----------+----------+----------+----+-------+----------+---------------------------+--------------------------------\n");
- // " ________ | ________ | ________ | __ | _____ | ________ | [_____,_____,_____,_____] | [_____,_____,_____,_____]
+ " type | handle | hints | flags | tr | blend | format | source crop | frame name \n"
+ "----------+----------+----------+----------+----+-------+----------+---------------------------+--------------------------------\n");
+ // " ________ | ________ | ________ | ________ | __ | _____ | ________ | [_____,_____,_____,_____] | [_____,_____,_____,_____]
for (size_t i=0 ; i<mList->numHwLayers ; i++) {
const hwc_layer_t& l(mList->hwLayers[i]);
const sp<LayerBase> layer(visibleLayersSortedByZ[i]);
@@ -190,9 +190,9 @@
}
}
snprintf(buffer, SIZE,
- " %8s | %08x | %08x | %02x | %05x | %08x | [%5d,%5d,%5d,%5d] | [%5d,%5d,%5d,%5d] %s\n",
+ " %8s | %08x | %08x | %08x | %02x | %05x | %08x | [%5d,%5d,%5d,%5d] | [%5d,%5d,%5d,%5d] %s\n",
l.compositionType ? "OVERLAY" : "FB",
- l.hints, l.flags, l.transform, l.blending, format,
+ intptr_t(l.handle), l.hints, l.flags, l.transform, l.blending, format,
l.sourceCrop.left, l.sourceCrop.top, l.sourceCrop.right, l.sourceCrop.bottom,
l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
layer->getName().string());
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 41d7a90..feb2c52 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -280,20 +280,29 @@
return;
}
- const GLenum target = GL_TEXTURE_EXTERNAL_OES;
- glBindTexture(target, mTextureName);
- if (getFiltering() || needsFiltering() || isFixedSize() || isCropped()) {
- // TODO: we could be more subtle with isFixedSize()
- glTexParameterx(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameterx(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ GLenum target = GL_TEXTURE_EXTERNAL_OES;
+ if (!isProtected()) {
+ glBindTexture(target, mTextureName);
+ if (getFiltering() || needsFiltering() || isFixedSize() || isCropped()) {
+ // TODO: we could be more subtle with isFixedSize()
+ glTexParameterx(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterx(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ } else {
+ glTexParameterx(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterx(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ }
+ glEnable(target);
+ glMatrixMode(GL_TEXTURE);
+ glLoadMatrixf(mTextureMatrix);
+ glMatrixMode(GL_MODELVIEW);
} else {
- glTexParameterx(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameterx(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ target = GL_TEXTURE_2D;
+ glBindTexture(target, mFlinger->getProtectedTexName());
+ glEnable(target);
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
}
- glEnable(target);
- glMatrixMode(GL_TEXTURE);
- glLoadMatrixf(mTextureMatrix);
- glMatrixMode(GL_MODELVIEW);
drawWithOpenGL(clip);
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 3f154ce..1441a54 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -84,7 +84,6 @@
mBootTime(systemTime()),
mVisibleRegionsDirty(false),
mHwWorkListDirty(false),
- mDeferReleaseConsole(false),
mFreezeDisplay(false),
mElectronBeamAnimationMode(0),
mFreezeCount(0),
@@ -275,7 +274,7 @@
const uint16_t g0 = pack565(0x0F,0x1F,0x0F);
const uint16_t g1 = pack565(0x17,0x2f,0x17);
- const uint16_t textureData[4] = { g0, g1, g1, g0 };
+ const uint16_t wormholeTexData[4] = { g0, g1, g1, g0 };
glGenTextures(1, &mWormholeTexName);
glBindTexture(GL_TEXTURE_2D, mWormholeTexName);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -283,7 +282,17 @@
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0,
- GL_RGB, GL_UNSIGNED_SHORT_5_6_5, textureData);
+ GL_RGB, GL_UNSIGNED_SHORT_5_6_5, wormholeTexData);
+
+ const uint16_t protTexData[] = { pack565(0x03, 0x03, 0x03) };
+ glGenTextures(1, &mProtectedTexName);
+ glBindTexture(GL_TEXTURE_2D, mProtectedTexName);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0,
+ GL_RGB, GL_UNSIGNED_SHORT_5_6_5, protTexData);
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
@@ -493,17 +502,9 @@
SurfaceFlinger::turnElectronBeamOn(mElectronBeamAnimationMode);
}
- if (mDeferReleaseConsole && hw.isScreenAcquired()) {
- // We got the release signal before the acquire signal
- mDeferReleaseConsole = false;
- hw.releaseScreen();
- }
-
if (what & eConsoleReleased) {
if (hw.isScreenAcquired()) {
hw.releaseScreen();
- } else {
- mDeferReleaseConsole = true;
}
}
@@ -1233,10 +1234,22 @@
}
-void SurfaceFlinger::setTransactionState(const Vector<ComposerState>& state) {
+void SurfaceFlinger::setTransactionState(const Vector<ComposerState>& state,
+ int orientation) {
Mutex::Autolock _l(mStateLock);
uint32_t flags = 0;
+ if (mCurrentState.orientation != orientation) {
+ if (uint32_t(orientation)<=eOrientation270 || orientation==42) {
+ mCurrentState.orientation = orientation;
+ flags |= eTransactionNeeded;
+ mResizeTransationPending = true;
+ } else if (orientation != eOrientationUnchanged) {
+ LOGW("setTransactionState: ignoring unrecognized orientation: %d",
+ orientation);
+ }
+ }
+
const size_t count = state.size();
for (size_t i=0 ; i<count ; i++) {
const ComposerState& s(state[i]);
@@ -1804,6 +1817,8 @@
// redraw the screen entirely...
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
const Vector< sp<LayerBase> >& layers(mVisibleLayersSortedByZ);
const size_t count = layers.size();
for (size_t i=0 ; i<count ; ++i) {
@@ -1835,7 +1850,7 @@
const DisplayHardware& hw(graphicPlane(0).displayHardware());
const uint32_t hw_w = hw.getWidth();
const uint32_t hw_h = hw.getHeight();
- const Region screenBounds(hw.bounds());
+ const Region screenBounds(hw.getBounds());
GLfloat u, v;
GLuint tname;
@@ -1845,7 +1860,7 @@
}
GLfloat vtx[8];
- const GLfloat texCoords[4][2] = { {0,1}, {0,1-v}, {u,1-v}, {u,1} };
+ const GLfloat texCoords[4][2] = { {0,0}, {0,v}, {u,v}, {u,0} };
glBindTexture(GL_TEXTURE_2D, tname);
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -1931,6 +1946,12 @@
s_curve_interpolator itb(nbFrames, 8.5f);
v_stretch vverts(hw_w, hw_h);
+
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
for (int i=0 ; i<nbFrames ; i++) {
@@ -2159,7 +2180,6 @@
glEnable(GL_SCISSOR_TEST);
hw.flip( Region(hw.bounds()) );
- hw.setCanDraw(false);
return NO_ERROR;
}
@@ -2208,7 +2228,6 @@
if (mode & ISurfaceComposer::eElectronBeamAnimationOn) {
electronBeamOnAnimationImplLocked();
}
- hw.setCanDraw(true);
// make sure to redraw the whole screen when the animation is done
mDirtyRegion.set(hw.bounds());
@@ -2255,22 +2274,6 @@
if (UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT))
return BAD_VALUE;
- // make sure none of the layers are protected
- const LayerVector& layers(mDrawingState.layersSortedByZ);
- const size_t count = layers.size();
- for (size_t i=0 ; i<count ; ++i) {
- const sp<LayerBase>& layer(layers[i]);
- const uint32_t flags = layer->drawingState().flags;
- if (!(flags & ISurfaceComposer::eLayerHidden)) {
- const uint32_t z = layer->drawingState().z;
- if (z >= minLayerZ && z <= maxLayerZ) {
- if (layer->isProtected()) {
- return INVALID_OPERATION;
- }
- }
- }
- }
-
if (!GLExtensions::getInstance().haveFramebufferObject())
return INVALID_OPERATION;
@@ -2320,6 +2323,8 @@
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
+ const LayerVector& layers(mDrawingState.layersSortedByZ);
+ const size_t count = layers.size();
for (size_t i=0 ; i<count ; ++i) {
const sp<LayerBase>& layer(layers[i]);
const uint32_t flags = layer->drawingState().flags;
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 43191b7..0e642c1 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -167,7 +167,8 @@
virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc();
virtual sp<IMemoryHeap> getCblk() const;
virtual void bootFinished();
- virtual void setTransactionState(const Vector<ComposerState>& state);
+ virtual void setTransactionState(const Vector<ComposerState>& state,
+ int orientation);
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags);
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags);
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
@@ -192,6 +193,8 @@
sp<Layer> getLayer(const sp<ISurface>& sur) const;
+ GLuint getProtectedTexName() const { return mProtectedTexName; }
+
private:
// DeathRecipient interface
virtual void binderDied(const wp<IBinder>& who);
@@ -256,12 +259,11 @@
public: // hack to work around gcc 4.0.3 bug
const GraphicPlane& graphicPlane(int dpy) const;
GraphicPlane& graphicPlane(int dpy);
-private:
+ void signalEvent();
+ void repaintEverything();
- void waitForEvent();
-public: // hack to work around gcc 4.0.3 bug
- void signalEvent();
private:
+ void waitForEvent();
void handleConsoleEvents();
void handleTransaction(uint32_t transactionFlags);
void handleTransactionLocked(uint32_t transactionFlags);
@@ -279,7 +281,6 @@
void postFramebuffer();
void setupHardwareComposer(Region& dirtyInOut);
void composeSurfaces(const Region& dirty);
- void repaintEverything();
ssize_t addClientLayer(const sp<Client>& client,
@@ -351,6 +352,7 @@
sp<IMemoryHeap> mServerHeap;
surface_flinger_cblk_t* mServerCblk;
GLuint mWormholeTexName;
+ GLuint mProtectedTexName;
nsecs_t mBootTime;
// Can only accessed from the main thread, these members
@@ -362,7 +364,6 @@
Region mWormholeRegion;
bool mVisibleRegionsDirty;
bool mHwWorkListDirty;
- bool mDeferReleaseConsole;
bool mFreezeDisplay;
int32_t mElectronBeamAnimationMode;
int32_t mFreezeCount;
diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
index 2ead254..f7dff23 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
@@ -32,6 +32,7 @@
import static android.net.NetworkTemplate.buildTemplateMobileAll;
import static android.net.NetworkTemplate.buildTemplateWifi;
import static android.net.TrafficStats.UID_REMOVED;
+import static android.net.TrafficStats.UID_TETHERING;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.HOUR_IN_MILLIS;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
@@ -179,6 +180,7 @@
expectNetworkState(buildWifiState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -232,6 +234,7 @@
expectNetworkState(buildWifiState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -327,6 +330,7 @@
expectNetworkState(buildWifiState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -378,6 +382,7 @@
expectNetworkState(buildMobile3gState(IMSI_1));
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -459,6 +464,7 @@
expectNetworkState(buildWifiState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -518,6 +524,7 @@
expectNetworkState(buildMobile3gState(IMSI_1));
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -585,6 +592,7 @@
expectNetworkState(buildWifiState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -648,6 +656,7 @@
expectNetworkState(buildWifiState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
@@ -705,6 +714,42 @@
verifyAndReset();
}
+ public void testTethering() throws Exception {
+ // pretend first mobile network comes online
+ expectCurrentTime();
+ expectDefaultSettings();
+ expectNetworkState(buildMobile3gState(IMSI_1));
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
+
+ replay();
+ mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE));
+ verifyAndReset();
+
+ // create some tethering traffic
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
+ expectDefaultSettings();
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L));
+ expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
+ .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L));
+ final String[] tetherIfacePairs = new String[] { TEST_IFACE, "wlan0" };
+ expectNetworkStatsPoll(tetherIfacePairs, new NetworkStats(getElapsedRealtime(), 1)
+ .addValues(TEST_IFACE, UID_TETHERING, SET_DEFAULT, TAG_NONE, 1920L, 14L, 384L, 2L, 0L));
+
+ replay();
+ mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
+
+ // verify service recorded history
+ assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0);
+ assertUidTotal(sTemplateImsi1, UID_RED, 128L, 2L, 128L, 2L, 0);
+ assertUidTotal(sTemplateImsi1, UID_TETHERING, 1920L, 14L, 384L, 2L, 0);
+ verifyAndReset();
+
+ }
+
private void assertNetworkTotal(NetworkTemplate template, long rxBytes, long rxPackets,
long txBytes, long txPackets, int operations) {
final NetworkStatsHistory history = mService.getHistoryForNetwork(template, FIELD_ALL);
@@ -774,9 +819,16 @@
}
private void expectNetworkStatsPoll() throws Exception {
+ expectNetworkStatsPoll(new String[0], new NetworkStats(getElapsedRealtime(), 0));
+ }
+
+ private void expectNetworkStatsPoll(String[] tetherIfacePairs, NetworkStats tetherStats)
+ throws Exception {
mNetManager.setGlobalAlert(anyLong());
expectLastCall().anyTimes();
- expect(mConnManager.getTetheredIfacePairs()).andReturn(null).anyTimes();
+ expect(mConnManager.getTetheredIfacePairs()).andReturn(tetherIfacePairs).anyTimes();
+ expect(mNetManager.getNetworkStatsTethering(eq(tetherIfacePairs)))
+ .andReturn(tetherStats).anyTimes();
}
private void assertStatsFilesExist(boolean exist) {
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index 5bdc146..44bdaeb 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -325,7 +325,7 @@
*
* {@hide}
*/
- public ArrayList<SmsMessage> getAllMessagesFromIcc() {
+ public static ArrayList<SmsMessage> getAllMessagesFromIcc() {
List<SmsRawData> records = null;
try {
@@ -470,7 +470,7 @@
* <code>getAllMessagesFromIcc</code>
* @return <code>ArrayList</code> of <code>SmsMessage</code> objects.
*/
- private ArrayList<SmsMessage> createMessageListFromRawRecords(List<SmsRawData> records) {
+ private static ArrayList<SmsMessage> createMessageListFromRawRecords(List<SmsRawData> records) {
ArrayList<SmsMessage> messages = new ArrayList<SmsMessage>();
if (records != null) {
int count = records.size();
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java
index e75d96d..fc8a145 100644
--- a/telephony/java/android/telephony/SmsMessage.java
+++ b/telephony/java/android/telephony/SmsMessage.java
@@ -36,7 +36,6 @@
* A Short Message Service message.
*/
public class SmsMessage {
- private static final boolean LOCAL_DEBUG = true;
private static final String LOG_TAG = "SMS";
/**
@@ -78,6 +77,18 @@
*/
public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153;
+ /**
+ * Indicates a 3GPP format SMS message.
+ * @hide pending API council approval
+ */
+ public static final String FORMAT_3GPP = "3gpp";
+
+ /**
+ * Indicates a 3GPP2 format SMS message.
+ * @hide pending API council approval
+ */
+ public static final String FORMAT_3GPP2 = "3gpp2";
+
/** Contains actual SmsMessage. Only public for debugging and for framework layer.
*
* @hide
@@ -106,30 +117,47 @@
}
- /**
- * Constructor
- *
- * @hide
- */
- public SmsMessage() {
- this(getSmsFacility());
- }
-
private SmsMessage(SmsMessageBase smb) {
mWrappedSmsMessage = smb;
}
/**
* Create an SmsMessage from a raw PDU.
+ *
+ * <p><b>This method will soon be deprecated</b> and all applications which handle
+ * incoming SMS messages by processing the {@code SMS_RECEIVED_ACTION} broadcast
+ * intent <b>must</b> now pass the new {@code format} String extra from the intent
+ * into the new method {@code createFromPdu(byte[], String)} which takes an
+ * extra format parameter. This is required in order to correctly decode the PDU on
+ * devices that require support for both 3GPP and 3GPP2 formats at the same time,
+ * such as dual-mode GSM/CDMA and CDMA/LTE phones.
*/
public static SmsMessage createFromPdu(byte[] pdu) {
- SmsMessageBase wrappedMessage;
int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
+ String format = (PHONE_TYPE_CDMA == activePhone) ? FORMAT_3GPP2 : FORMAT_3GPP;
+ return createFromPdu(pdu, format);
+ }
- if (PHONE_TYPE_CDMA == activePhone) {
+ /**
+ * Create an SmsMessage from a raw PDU with the specified message format. The
+ * message format is passed in the {@code SMS_RECEIVED_ACTION} as the {@code format}
+ * String extra, and will be either "3gpp" for GSM/UMTS/LTE messages in 3GPP format
+ * or "3gpp2" for CDMA/LTE messages in 3GPP2 format.
+ *
+ * @param pdu the message PDU from the SMS_RECEIVED_ACTION intent
+ * @param format the format extra from the SMS_RECEIVED_ACTION intent
+ * @hide pending API council approval
+ */
+ public static SmsMessage createFromPdu(byte[] pdu, String format) {
+ SmsMessageBase wrappedMessage;
+
+ if (FORMAT_3GPP2.equals(format)) {
wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromPdu(pdu);
- } else {
+ } else if (FORMAT_3GPP.equals(format)) {
wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.createFromPdu(pdu);
+ } else {
+ Log.e(LOG_TAG, "createFromPdu(): unsupported message format " + format);
+ return null;
}
return new SmsMessage(wrappedMessage);
@@ -144,57 +172,19 @@
*
* {@hide}
*/
- public static SmsMessage newFromCMT(String[] lines){
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMT(lines);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMT(lines);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /** @hide */
- protected static SmsMessage newFromCMTI(String line) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMTI(line);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMTI(line);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /** @hide */
- public static SmsMessage newFromCDS(String line) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCDS(line);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCDS(line);
- }
+ public static SmsMessage newFromCMT(String[] lines) {
+ // received SMS in 3GPP format
+ SmsMessageBase wrappedMessage =
+ com.android.internal.telephony.gsm.SmsMessage.newFromCMT(lines);
return new SmsMessage(wrappedMessage);
}
/** @hide */
public static SmsMessage newFromParcel(Parcel p) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromParcel(p);
- }
+ // received SMS in 3GPP2 format
+ SmsMessageBase wrappedMessage =
+ com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p);
return new SmsMessage(wrappedMessage);
}
@@ -227,6 +217,9 @@
/**
* Get the TP-Layer-Length for the given SMS-SUBMIT PDU Basically, the
* length in bytes (not hex chars) less the SMSC header
+ *
+ * FIXME: This method is only used by a CTS test case that isn't run on CDMA devices.
+ * We should probably deprecate it and remove the obsolete test case.
*/
public static int getTPLayerLengthForPDU(String pdu) {
int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
@@ -381,34 +374,6 @@
* @return a <code>SubmitPdu</code> containing the encoded SC
* address, if applicable, and the encoded message.
* Returns null on encode error.
- * @hide
- */
- public static SubmitPdu getSubmitPdu(String scAddress,
- String destinationAddress, String message,
- boolean statusReportRequested, byte[] header) {
- SubmitPduBase spb;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- spb = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu(scAddress,
- destinationAddress, message, statusReportRequested,
- SmsHeader.fromByteArray(header));
- } else {
- spb = com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(scAddress,
- destinationAddress, message, statusReportRequested, header);
- }
-
- return new SubmitPdu(spb);
- }
-
- /**
- * Get an SMS-SUBMIT PDU for a destination address and a message.
- * This method will not attempt to use any GSM national language 7 bit encodings.
- *
- * @param scAddress Service Centre address. Null means use default.
- * @return a <code>SubmitPdu</code> containing the encoded SC
- * address, if applicable, and the encoded message.
- * Returns null on encode error.
*/
public static SubmitPdu getSubmitPdu(String scAddress,
String destinationAddress, String message, boolean statusReportRequested) {
@@ -603,15 +568,6 @@
}
/**
- * Return the user data header (UDH).
- *
- * @hide
- */
- public SmsHeader getUserDataHeader() {
- return mWrappedSmsMessage.getUserDataHeader();
- }
-
- /**
* Returns the raw PDU for the message.
*
* @return the raw PDU for the message.
@@ -646,7 +602,6 @@
* SmsManager.STATUS_ON_ICC_UNSENT
*/
public int getStatusOnIcc() {
-
return mWrappedSmsMessage.getStatusOnIcc();
}
@@ -666,7 +621,6 @@
* SmsMessage was not created from a ICC SMS EF record.
*/
public int getIndexOnIcc() {
-
return mWrappedSmsMessage.getIndexOnIcc();
}
@@ -704,19 +658,4 @@
public boolean isReplyPathPresent() {
return mWrappedSmsMessage.isReplyPathPresent();
}
-
- /** This method returns the reference to a specific
- * SmsMessage object, which is used for accessing its static methods.
- * @return Specific SmsMessage.
- *
- * @hide
- */
- private static final SmsMessageBase getSmsFacility(){
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
- if (PHONE_TYPE_CDMA == activePhone) {
- return new com.android.internal.telephony.cdma.SmsMessage();
- } else {
- return new com.android.internal.telephony.gsm.SmsMessage();
- }
- }
}
diff --git a/telephony/java/android/telephony/gsm/SmsMessage.java b/telephony/java/android/telephony/gsm/SmsMessage.java
index 4af99a6..8d86ec2 100644
--- a/telephony/java/android/telephony/gsm/SmsMessage.java
+++ b/telephony/java/android/telephony/gsm/SmsMessage.java
@@ -166,104 +166,6 @@
}
/**
- * TS 27.005 3.4.1 lines[0] and lines[1] are the two lines read from the
- * +CMT unsolicited response (PDU mode, of course)
- * +CMT: [<alpha>],<length><CR><LF><pdu>
- *
- * Only public for debugging and for RIL
- * @deprecated Use android.telephony.SmsMessage.
- * {@hide}
- */
- @Deprecated
- public static SmsMessage newFromCMT(String[] lines){
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMT(lines);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMT(lines);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /** @deprecated Use android.telephony.SmsMessage.
- * @hide */
- @Deprecated
- protected static SmsMessage newFromCMTI(String line) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMTI(line);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMTI(line);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /** @deprecated Use android.telephony.SmsMessage.
- * @hide */
- @Deprecated
- public static SmsMessage newFromCDS(String line) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCDS(line);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCDS(line);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /** @deprecated Use android.telephony.SmsMessage.
- * @hide */
- @Deprecated
- public static SmsMessage newFromParcel(Parcel p) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromParcel(p);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /**
- * Create an SmsMessage from an SMS EF record.
- *
- * @param index Index of SMS record. This should be index in ArrayList
- * returned by SmsManager.getAllMessagesFromSim + 1.
- * @param data Record data.
- * @return An SmsMessage representing the record.
- *
- * @deprecated Use android.telephony.SmsMessage.
- * @hide
- */
- @Deprecated
- public static SmsMessage createFromEfRecord(int index, byte[] data) {
- SmsMessageBase wrappedMessage;
- int activePhone = TelephonyManager.getDefault().getCurrentPhoneType();
-
- if (PHONE_TYPE_CDMA == activePhone) {
- wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromEfRecord(
- index, data);
- } else {
- wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.createFromEfRecord(
- index, data);
- }
-
- return new SmsMessage(wrappedMessage);
- }
-
- /**
* Get the TP-Layer-Length for the given SMS-SUBMIT PDU Basically, the
* length in bytes (not hex chars) less the SMSC header
* @deprecated Use android.telephony.SmsMessage.
diff --git a/telephony/java/com/android/internal/telephony/BaseCommands.java b/telephony/java/com/android/internal/telephony/BaseCommands.java
index f0d2fba..f111dd6 100644
--- a/telephony/java/com/android/internal/telephony/BaseCommands.java
+++ b/telephony/java/com/android/internal/telephony/BaseCommands.java
@@ -79,7 +79,8 @@
protected RegistrantList mRilConnectedRegistrants = new RegistrantList();
protected RegistrantList mIccRefreshRegistrants = new RegistrantList();
- protected Registrant mSMSRegistrant;
+ protected Registrant mGsmSmsRegistrant;
+ protected Registrant mCdmaSmsRegistrant;
protected Registrant mNITZTimeRegistrant;
protected Registrant mSignalStrengthRegistrant;
protected Registrant mUSSDRegistrant;
@@ -358,12 +359,20 @@
mIccStatusChangedRegistrants.remove(h);
}
- public void setOnNewSMS(Handler h, int what, Object obj) {
- mSMSRegistrant = new Registrant (h, what, obj);
+ public void setOnNewGsmSms(Handler h, int what, Object obj) {
+ mGsmSmsRegistrant = new Registrant (h, what, obj);
}
- public void unSetOnNewSMS(Handler h) {
- mSMSRegistrant.clear();
+ public void unSetOnNewGsmSms(Handler h) {
+ mGsmSmsRegistrant.clear();
+ }
+
+ public void setOnNewCdmaSms(Handler h, int what, Object obj) {
+ mCdmaSmsRegistrant = new Registrant (h, what, obj);
+ }
+
+ public void unSetOnNewCdmaSms(Handler h) {
+ mCdmaSmsRegistrant.clear();
}
public void setOnNewGsmBroadcastSms(Handler h, int what, Object obj) {
diff --git a/telephony/java/com/android/internal/telephony/CommandsInterface.java b/telephony/java/com/android/internal/telephony/CommandsInterface.java
index 1caea70..33eed38 100644
--- a/telephony/java/com/android/internal/telephony/CommandsInterface.java
+++ b/telephony/java/com/android/internal/telephony/CommandsInterface.java
@@ -20,8 +20,6 @@
import android.os.Message;
import android.os.Handler;
-import android.os.SystemProperties;
-
/**
* {@hide}
@@ -267,14 +265,32 @@
void unregisterForRUIMReady(Handler h);
/**
- * unlike the register* methods, there's only one new SMS handler
+ * unlike the register* methods, there's only one new 3GPP format SMS handler.
* if you need to unregister, you should also tell the radio to stop
* sending SMS's to you (via AT+CNMI)
*
* AsyncResult.result is a String containing the SMS PDU
*/
- void setOnNewSMS(Handler h, int what, Object obj);
- void unSetOnNewSMS(Handler h);
+ void setOnNewGsmSms(Handler h, int what, Object obj);
+ void unSetOnNewGsmSms(Handler h);
+
+ /**
+ * unlike the register* methods, there's only one new 3GPP2 format SMS handler.
+ * if you need to unregister, you should also tell the radio to stop
+ * sending SMS's to you (via AT+CNMI)
+ *
+ * AsyncResult.result is a String containing the SMS PDU
+ */
+ void setOnNewCdmaSms(Handler h, int what, Object obj);
+ void unSetOnNewCdmaSms(Handler h);
+
+ /**
+ * Set the handler for SMS Cell Broadcast messages.
+ *
+ * AsyncResult.result is a byte array containing the SMS-CB PDU
+ */
+ void setOnNewGsmBroadcastSms(Handler h, int what, Object obj);
+ void unSetOnNewGsmBroadcastSms(Handler h);
/**
* Register for NEW_SMS_ON_SIM unsolicited message
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 444f0d2..ca04eb2 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -1394,7 +1394,7 @@
String getDeviceSvn();
/**
- * Retrieves the unique sbuscriber ID, e.g., IMSI for GSM phones.
+ * Retrieves the unique subscriber ID, e.g., IMSI for GSM phones.
*/
String getSubscriberId();
@@ -1756,4 +1756,13 @@
* @param response a callback message with the String response in the obj field
*/
void requestIsimAuthentication(String nonce, Message response);
+
+ /**
+ * Sets the SIM voice message waiting indicator records.
+ * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported
+ * @param countWaiting The number of messages waiting, if known. Use
+ * -1 to indicate that an unknown number of
+ * messages are waiting
+ */
+ void setVoiceMessageWaiting(int line, int countWaiting);
}
diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java
index 82f3955..a7a4908 100644
--- a/telephony/java/com/android/internal/telephony/PhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/PhoneBase.java
@@ -112,15 +112,17 @@
/* Instance Variables */
public CommandsInterface mCM;
protected IccFileHandler mIccFileHandler;
- boolean mDnsCheckDisabled = false;
+ boolean mDnsCheckDisabled;
public DataConnectionTracker mDataConnectionTracker;
boolean mDoesRilSendMultipleCallRing;
- int mCallRingContinueToken = 0;
+ int mCallRingContinueToken;
int mCallRingDelay;
public boolean mIsTheCurrentActivePhone = true;
boolean mIsVoiceCapable = true;
public IccRecords mIccRecords;
public IccCard mIccCard;
+ public SmsStorageMonitor mSmsStorageMonitor;
+ public SmsUsageMonitor mSmsUsageMonitor;
public SMSDispatcher mSMS;
/**
@@ -164,7 +166,7 @@
protected Looper mLooper; /* to insure registrants are in correct thread*/
- protected Context mContext;
+ protected final Context mContext;
/**
* PhoneNotifier is an abstraction for all system-wide
@@ -238,6 +240,10 @@
mCallRingDelay = SystemProperties.getInt(
TelephonyProperties.PROPERTY_CALL_RING_DELAY, 3000);
Log.d(LOG_TAG, "mCallRingDelay=" + mCallRingDelay);
+
+ // Initialize device storage and outgoing SMS usage monitors for SMSDispatchers.
+ mSmsStorageMonitor = new SmsStorageMonitor(this);
+ mSmsUsageMonitor = new SmsUsageMonitor(context.getContentResolver());
}
public void dispose() {
@@ -246,9 +252,17 @@
// Must cleanup all connectionS and needs to use sendMessage!
mDataConnectionTracker.cleanUpAllConnections(null);
mIsTheCurrentActivePhone = false;
+ // Dispose the SMS usage and storage monitors
+ mSmsStorageMonitor.dispose();
+ mSmsUsageMonitor.dispose();
}
}
+ public void removeReferences() {
+ mSmsStorageMonitor = null;
+ mSmsUsageMonitor = null;
+ }
+
/**
* When overridden the derived class needs to call
* super.handleMessage(msg) so this method has a
@@ -1037,37 +1051,6 @@
}
/**
- * simulateDataConnection
- *
- * simulates various data connection states. This messes with
- * DataConnectionTracker's internal states, but doesn't actually change
- * the underlying radio connection states.
- *
- * @param state Phone.DataState enum.
- */
- public void simulateDataConnection(Phone.DataState state) {
- DataConnectionTracker.State dcState;
-
- switch (state) {
- case CONNECTED:
- dcState = DataConnectionTracker.State.CONNECTED;
- break;
- case SUSPENDED:
- dcState = DataConnectionTracker.State.CONNECTED;
- break;
- case DISCONNECTED:
- dcState = DataConnectionTracker.State.FAILED;
- break;
- default:
- dcState = DataConnectionTracker.State.CONNECTING;
- break;
- }
-
- mDataConnectionTracker.setState(dcState);
- notifyDataConnection(null, Phone.APN_TYPE_DEFAULT);
- }
-
- /**
* Notify registrants of a new ringing Connection.
* Subclasses of Phone probably want to replace this with a
* version scoped to their packages
@@ -1132,7 +1115,7 @@
/**
* Common error logger method for unexpected calls to CDMA-only methods.
*/
- private void logUnexpectedCdmaMethodCall(String name)
+ private static void logUnexpectedCdmaMethodCall(String name)
{
Log.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " +
"called, CDMAPhone inactive.");
@@ -1145,7 +1128,7 @@
/**
* Common error logger method for unexpected calls to GSM/WCDMA-only methods.
*/
- private void logUnexpectedGsmMethodCall(String name) {
+ private static void logUnexpectedGsmMethodCall(String name) {
Log.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " +
"called, GSMPhone inactive.");
}
@@ -1167,4 +1150,16 @@
public int getLteOnCdmaMode() {
return mCM.getLteOnCdmaMode();
}
+
+ /**
+ * Sets the SIM voice message waiting indicator records.
+ * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported
+ * @param countWaiting The number of messages waiting, if known. Use
+ * -1 to indicate that an unknown number of
+ * messages are waiting
+ */
+ @Override
+ public void setVoiceMessageWaiting(int line, int countWaiting) {
+ mIccRecords.setVoiceMessageWaiting(line, countWaiting);
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/PhoneProxy.java b/telephony/java/com/android/internal/telephony/PhoneProxy.java
index e0e8d49..b497ec8 100644
--- a/telephony/java/com/android/internal/telephony/PhoneProxy.java
+++ b/telephony/java/com/android/internal/telephony/PhoneProxy.java
@@ -72,7 +72,7 @@
switch(msg.what) {
case EVENT_RADIO_TECHNOLOGY_CHANGED:
//switch Phone from CDMA to GSM or vice versa
- mOutgoingPhone = ((PhoneBase)mActivePhone).getPhoneName();
+ mOutgoingPhone = mActivePhone.getPhoneName();
logd("Switching phone from " + mOutgoingPhone + "Phone to " +
(mOutgoingPhone.equals("GSM") ? "CDMAPhone" : "GSMPhone") );
boolean oldPowerState = false; // old power state to off
@@ -144,23 +144,10 @@
super.handleMessage(msg);
}
- private void logv(String msg) {
- Log.v(LOG_TAG, "[PhoneProxy] " + msg);
- }
-
- private void logd(String msg) {
+ private static void logd(String msg) {
Log.d(LOG_TAG, "[PhoneProxy] " + msg);
}
- private void logw(String msg) {
- Log.w(LOG_TAG, "[PhoneProxy] " + msg);
- }
-
- private void loge(String msg) {
- Log.e(LOG_TAG, "[PhoneProxy] " + msg);
- }
-
-
public ServiceState getServiceState() {
return mActivePhone.getServiceState();
}
@@ -739,19 +726,19 @@
}
public int getCdmaEriIconIndex() {
- return mActivePhone.getCdmaEriIconIndex();
+ return mActivePhone.getCdmaEriIconIndex();
}
- public String getCdmaEriText() {
- return mActivePhone.getCdmaEriText();
- }
+ public String getCdmaEriText() {
+ return mActivePhone.getCdmaEriText();
+ }
public int getCdmaEriIconMode() {
- return mActivePhone.getCdmaEriIconMode();
+ return mActivePhone.getCdmaEriIconMode();
}
public Phone getActivePhone() {
- return mActivePhone;
+ return mActivePhone;
}
public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete){
@@ -861,4 +848,9 @@
public int getLteOnCdmaMode() {
return mActivePhone.getLteOnCdmaMode();
}
+
+ @Override
+ public void setVoiceMessageWaiting(int line, int countWaiting) {
+ mActivePhone.setVoiceMessageWaiting(line, countWaiting);
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index bd35058..8aae0d4 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -2434,8 +2434,8 @@
SmsMessage sms;
sms = SmsMessage.newFromCMT(a);
- if (mSMSRegistrant != null) {
- mSMSRegistrant
+ if (mGsmSmsRegistrant != null) {
+ mGsmSmsRegistrant
.notifyRegistrant(new AsyncResult(null, sms, null));
}
break;
@@ -2607,8 +2607,8 @@
SmsMessage sms = (SmsMessage) ret;
- if (mSMSRegistrant != null) {
- mSMSRegistrant
+ if (mCdmaSmsRegistrant != null) {
+ mCdmaSmsRegistrant
.notifyRegistrant(new AsyncResult(null, sms, null));
}
break;
diff --git a/telephony/java/com/android/internal/telephony/SMSDispatcher.java b/telephony/java/com/android/internal/telephony/SMSDispatcher.java
index 76e719c..a42a267 100644
--- a/telephony/java/com/android/internal/telephony/SMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/SMSDispatcher.java
@@ -44,10 +44,12 @@
import android.util.Log;
import android.view.WindowManager;
+import com.android.internal.telephony.SmsMessageBase.TextEncodingDetails;
import com.android.internal.util.HexDump;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Random;
@@ -60,68 +62,66 @@
import static android.telephony.SmsManager.RESULT_ERROR_LIMIT_EXCEEDED;
import static android.telephony.SmsManager.RESULT_ERROR_FDN_CHECK_FAILURE;
-
public abstract class SMSDispatcher extends Handler {
- private static final String TAG = "SMS";
+ static final String TAG = "SMS"; // accessed from inner class
private static final String SEND_NEXT_MSG_EXTRA = "SendNextMsg";
- /** Default checking period for SMS sent without user permit */
- private static final int DEFAULT_SMS_CHECK_PERIOD = 3600000;
-
- /** Default number of SMS sent in checking period without user permit */
- private static final int DEFAULT_SMS_MAX_COUNT = 100;
-
/** Default timeout for SMS sent query */
private static final int DEFAULT_SMS_TIMEOUT = 6000;
- protected static final String[] RAW_PROJECTION = new String[] {
- "pdu",
- "sequence",
- "destination_port",
+ /** Permission required to receive SMS and SMS-CB messages. */
+ public static final String RECEIVE_SMS_PERMISSION = "android.permission.RECEIVE_SMS";
+
+ /** Permission required to receive ETWS and CMAS emergency broadcasts. */
+ public static final String RECEIVE_EMERGENCY_BROADCAST_PERMISSION =
+ "android.permission.RECEIVE_EMERGENCY_BROADCAST";
+
+ /** Query projection for checking for duplicate message segments. */
+ private static final String[] PDU_PROJECTION = new String[] {
+ "pdu"
};
- static final protected int EVENT_NEW_SMS = 1;
+ /** Query projection for combining concatenated message segments. */
+ private static final String[] PDU_SEQUENCE_PORT_PROJECTION = new String[] {
+ "pdu",
+ "sequence",
+ "destination_port"
+ };
- static final protected int EVENT_SEND_SMS_COMPLETE = 2;
+ private static final int PDU_COLUMN = 0;
+ private static final int SEQUENCE_COLUMN = 1;
+ private static final int DESTINATION_PORT_COLUMN = 2;
+
+ /** New SMS received. */
+ protected static final int EVENT_NEW_SMS = 1;
+
+ /** SMS send complete. */
+ protected static final int EVENT_SEND_SMS_COMPLETE = 2;
/** Retry sending a previously failed SMS message */
- static final protected int EVENT_SEND_RETRY = 3;
-
- /** Status report received */
- static final protected int EVENT_NEW_SMS_STATUS_REPORT = 5;
-
- /** SIM/RUIM storage is full */
- static final protected int EVENT_ICC_FULL = 6;
+ private static final int EVENT_SEND_RETRY = 3;
/** SMS confirm required */
- static final protected int EVENT_POST_ALERT = 7;
+ private static final int EVENT_POST_ALERT = 4;
/** Send the user confirmed SMS */
- static final protected int EVENT_SEND_CONFIRMED_SMS = 8;
+ static final int EVENT_SEND_CONFIRMED_SMS = 5; // accessed from inner class
/** Alert is timeout */
- static final protected int EVENT_ALERT_TIMEOUT = 9;
+ private static final int EVENT_ALERT_TIMEOUT = 6;
/** Stop the sending */
- static final protected int EVENT_STOP_SENDING = 10;
+ static final int EVENT_STOP_SENDING = 7; // accessed from inner class
- /** Memory status reporting is acknowledged by RIL */
- static final protected int EVENT_REPORT_MEMORY_STATUS_DONE = 11;
-
- /** Radio is ON */
- static final protected int EVENT_RADIO_ON = 12;
-
- /** New broadcast SMS */
- static final protected int EVENT_NEW_BROADCAST_SMS = 13;
-
- protected Phone mPhone;
- protected Context mContext;
- protected ContentResolver mResolver;
- protected CommandsInterface mCm;
+ protected final Phone mPhone;
+ protected final Context mContext;
+ protected final ContentResolver mResolver;
+ protected final CommandsInterface mCm;
+ protected final SmsStorageMonitor mStorageMonitor;
protected final WapPushOverSms mWapPush;
- protected final Uri mRawUri = Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw");
+ protected static final Uri mRawUri = Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw");
/** Maximum number of times to retry sending a failed SMS. */
private static final int MAX_SEND_RETRIES = 3;
@@ -136,12 +136,14 @@
* Message reference for a CONCATENATED_8_BIT_REFERENCE or
* CONCATENATED_16_BIT_REFERENCE message set. Should be
* incremented for each set of concatenated messages.
+ * Static field shared by all dispatcher objects.
*/
- private static int sConcatenatedRef;
+ private static int sConcatenatedRef = new Random().nextInt(256);
- private SmsCounter mCounter;
+ /** Outgoing message counter. Shared by all dispatchers. */
+ private final SmsUsageMonitor mUsageMonitor;
- private ArrayList<SmsTracker> mSTrackers = new ArrayList<SmsTracker>(MO_MSG_QUEUE_LIMIT);
+ private final ArrayList<SmsTracker> mSTrackers = new ArrayList<SmsTracker>(MO_MSG_QUEUE_LIMIT);
/** Wake lock to ensure device stays awake while dispatching the SMS intent. */
private PowerManager.WakeLock mWakeLock;
@@ -150,17 +152,14 @@
* Hold the wake lock for 5 seconds, which should be enough time for
* any receiver(s) to grab its own wake lock.
*/
- private final int WAKE_LOCK_TIMEOUT = 5000;
-
- protected boolean mStorageAvailable = true;
- protected boolean mReportMemoryStatusPending = false;
+ private static final int WAKE_LOCK_TIMEOUT = 5000;
/* Flags indicating whether the current device allows sms service */
protected boolean mSmsCapable = true;
protected boolean mSmsReceiveDisabled;
protected boolean mSmsSendDisabled;
- protected static int mRemainingMessages = -1;
+ protected int mRemainingMessages = -1;
protected static int getNextConcatenatedRef() {
sConcatenatedRef += 1;
@@ -168,111 +167,52 @@
}
/**
- * Implement the per-application based SMS control, which only allows
- * a limit on the number of SMS/MMS messages an app can send in checking
- * period.
+ * Create a new SMS dispatcher.
+ * @param phone the Phone to use
+ * @param storageMonitor the SmsStorageMonitor to use
+ * @param usageMonitor the SmsUsageMonitor to use
*/
- private class SmsCounter {
- private int mCheckPeriod;
- private int mMaxAllowed;
- private HashMap<String, ArrayList<Long>> mSmsStamp;
-
- /**
- * Create SmsCounter
- * @param mMax is the number of SMS allowed without user permit
- * @param mPeriod is the checking period
- */
- SmsCounter(int mMax, int mPeriod) {
- mMaxAllowed = mMax;
- mCheckPeriod = mPeriod;
- mSmsStamp = new HashMap<String, ArrayList<Long>> ();
- }
-
- /**
- * Check to see if an application allow to send new SMS messages
- *
- * @param appName is the application sending sms
- * @param smsWaiting is the number of new sms wants to be sent
- * @return true if application is allowed to send the requested number
- * of new sms messages
- */
- boolean check(String appName, int smsWaiting) {
- if (!mSmsStamp.containsKey(appName)) {
- mSmsStamp.put(appName, new ArrayList<Long>());
- }
-
- return isUnderLimit(mSmsStamp.get(appName), smsWaiting);
- }
-
- private boolean isUnderLimit(ArrayList<Long> sent, int smsWaiting) {
- Long ct = System.currentTimeMillis();
-
- Log.d(TAG, "SMS send size=" + sent.size() + "time=" + ct);
-
- while (sent.size() > 0 && (ct - sent.get(0)) > mCheckPeriod ) {
- sent.remove(0);
- }
-
-
- if ( (sent.size() + smsWaiting) <= mMaxAllowed) {
- for (int i = 0; i < smsWaiting; i++ ) {
- sent.add(ct);
- }
- return true;
- }
- return false;
- }
- }
-
- protected SMSDispatcher(PhoneBase phone) {
+ protected SMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor,
+ SmsUsageMonitor usageMonitor) {
mPhone = phone;
mWapPush = new WapPushOverSms(phone, this);
mContext = phone.getContext();
mResolver = mContext.getContentResolver();
mCm = phone.mCM;
+ mStorageMonitor = storageMonitor;
+ mUsageMonitor = usageMonitor;
createWakelock();
- int check_period = Settings.Secure.getInt(mResolver,
- Settings.Secure.SMS_OUTGOING_CHECK_INTERVAL_MS,
- DEFAULT_SMS_CHECK_PERIOD);
- int max_count = Settings.Secure.getInt(mResolver,
- Settings.Secure.SMS_OUTGOING_CHECK_MAX_COUNT,
- DEFAULT_SMS_MAX_COUNT);
- mCounter = new SmsCounter(max_count, check_period);
-
- mCm.setOnNewSMS(this, EVENT_NEW_SMS, null);
- mCm.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null);
- mCm.setOnIccSmsFull(this, EVENT_ICC_FULL, null);
- mCm.registerForOn(this, EVENT_RADIO_ON, null);
-
- // Don't always start message ref at 0.
- sConcatenatedRef = new Random().nextInt(256);
-
- // Register for device storage intents. Use these to notify the RIL
- // that storage for SMS is or is not available.
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_DEVICE_STORAGE_FULL);
- filter.addAction(Intent.ACTION_DEVICE_STORAGE_NOT_FULL);
- mContext.registerReceiver(mResultReceiver, filter);
-
mSmsCapable = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_sms_capable);
mSmsReceiveDisabled = !SystemProperties.getBoolean(
TelephonyProperties.PROPERTY_SMS_RECEIVE, mSmsCapable);
mSmsSendDisabled = !SystemProperties.getBoolean(
TelephonyProperties.PROPERTY_SMS_SEND, mSmsCapable);
- Log.d(TAG, "SMSDispatcher: ctor mSmsCapable=" + mSmsCapable
+ Log.d(TAG, "SMSDispatcher: ctor mSmsCapable=" + mSmsCapable + " format=" + getFormat()
+ " mSmsReceiveDisabled=" + mSmsReceiveDisabled
+ " mSmsSendDisabled=" + mSmsSendDisabled);
}
- public void dispose() {
- mCm.unSetOnNewSMS(this);
- mCm.unSetOnSmsStatus(this);
- mCm.unSetOnIccSmsFull(this);
- mCm.unregisterForOn(this);
- }
+ /** Unregister for incoming SMS events. */
+ public abstract void dispose();
+
+ /**
+ * The format of the message PDU in the associated broadcast intent.
+ * This will be either "3gpp" for GSM/UMTS/LTE messages in 3GPP format
+ * or "3gpp2" for CDMA/LTE messages in 3GPP2 format.
+ *
+ * Note: All applications which handle incoming SMS messages by processing the
+ * SMS_RECEIVED_ACTION broadcast intent MUST pass the "format" extra from the intent
+ * into the new methods in {@link android.telephony.SmsMessage} which take an
+ * extra format parameter. This is required in order to correctly decode the PDU on
+ * devices which require support for both 3GPP and 3GPP2 formats at the same time,
+ * such as CDMA/LTE devices and GSM/CDMA world phones.
+ *
+ * @return the format of the message PDU
+ */
+ protected abstract String getFormat();
@Override
protected void finalize() {
@@ -338,14 +278,6 @@
sendSms((SmsTracker) msg.obj);
break;
- case EVENT_NEW_SMS_STATUS_REPORT:
- handleStatusReport((AsyncResult)msg.obj);
- break;
-
- case EVENT_ICC_FULL:
- handleIccFull();
- break;
-
case EVENT_POST_ALERT:
handleReachSentLimit((SmsTracker)(msg.obj));
break;
@@ -369,7 +301,7 @@
case EVENT_SEND_CONFIRMED_SMS:
if (mSTrackers.isEmpty() == false) {
SmsTracker sTracker = mSTrackers.remove(mSTrackers.size() - 1);
- if (isMultipartTracker(sTracker)) {
+ if (sTracker.isMultipart()) {
sendMultipartSms(sTracker);
} else {
sendSms(sTracker);
@@ -390,30 +322,6 @@
removeMessages(EVENT_ALERT_TIMEOUT, msg.obj);
}
break;
-
- case EVENT_REPORT_MEMORY_STATUS_DONE:
- ar = (AsyncResult)msg.obj;
- if (ar.exception != null) {
- mReportMemoryStatusPending = true;
- Log.v(TAG, "Memory status report to modem pending : mStorageAvailable = "
- + mStorageAvailable);
- } else {
- mReportMemoryStatusPending = false;
- }
- break;
-
- case EVENT_RADIO_ON:
- if (mReportMemoryStatusPending) {
- Log.v(TAG, "Sending pending memory status report : mStorageAvailable = "
- + mStorageAvailable);
- mCm.reportSmsMemoryStatus(mStorageAvailable,
- obtainMessage(EVENT_REPORT_MEMORY_STATUS_DONE));
- }
- break;
-
- case EVENT_NEW_BROADCAST_SMS:
- handleBroadcastSms((AsyncResult)msg.obj);
- break;
}
}
@@ -440,26 +348,6 @@
}
/**
- * Called when SIM_FULL message is received from the RIL. Notifies interested
- * parties that SIM storage for SMS messages is full.
- */
- private void handleIccFull(){
- // broadcast SIM_FULL intent
- Intent intent = new Intent(Intents.SIM_FULL_ACTION);
- mWakeLock.acquire(WAKE_LOCK_TIMEOUT);
- mContext.sendBroadcast(intent, "android.permission.RECEIVE_SMS");
- }
-
- /**
- * Called when a status report is received. This should correspond to
- * a previously successful SEND.
- *
- * @param ar AsyncResult passed into the message handler. ar.result should
- * be a String representing the status report PDU, as ASCII hex.
- */
- protected abstract void handleStatusReport(AsyncResult ar);
-
- /**
* Called when SMS send completes. Broadcasts a sentIntent on success.
* On failure, either sets up retries or broadcasts a sentIntent with
* the failure in the result code.
@@ -559,7 +447,7 @@
* POWER_OFF
* @param tracker An SmsTracker for the current message.
*/
- protected void handleNotInService(int ss, SmsTracker tracker) {
+ protected static void handleNotInService(int ss, SmsTracker tracker) {
if (tracker.mSentIntent != null) {
try {
if (ss == ServiceState.STATE_POWER_OFF) {
@@ -581,86 +469,181 @@
*/
public abstract int dispatchMessage(SmsMessageBase sms);
+ /**
+ * Dispatch a normal incoming SMS. This is called from the format-specific
+ * {@link #dispatchMessage(SmsMessageBase)} if no format-specific handling is required.
+ *
+ * @param sms
+ * @return
+ */
+ protected int dispatchNormalMessage(SmsMessageBase sms) {
+ SmsHeader smsHeader = sms.getUserDataHeader();
+
+ // See if message is partial or port addressed.
+ if ((smsHeader == null) || (smsHeader.concatRef == null)) {
+ // Message is not partial (not part of concatenated sequence).
+ byte[][] pdus = new byte[1][];
+ pdus[0] = sms.getPdu();
+
+ if (smsHeader != null && smsHeader.portAddrs != null) {
+ if (smsHeader.portAddrs.destPort == SmsHeader.PORT_WAP_PUSH) {
+ // GSM-style WAP indication
+ return mWapPush.dispatchWapPdu(sms.getUserData());
+ } else {
+ // The message was sent to a port, so concoct a URI for it.
+ dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
+ }
+ } else {
+ // Normal short and non-port-addressed message, dispatch it.
+ dispatchPdus(pdus);
+ }
+ return Activity.RESULT_OK;
+ } else {
+ // Process the message part.
+ SmsHeader.ConcatRef concatRef = smsHeader.concatRef;
+ SmsHeader.PortAddrs portAddrs = smsHeader.portAddrs;
+ return processMessagePart(sms.getPdu(), sms.getOriginatingAddress(),
+ concatRef.refNumber, concatRef.seqNumber, concatRef.msgCount,
+ sms.getTimestampMillis(), (portAddrs != null ? portAddrs.destPort : -1), false);
+ }
+ }
/**
* If this is the last part send the parts out to the application, otherwise
- * the part is stored for later processing.
+ * the part is stored for later processing. Handles both 3GPP concatenated messages
+ * as well as 3GPP2 format WAP push messages processed by
+ * {@link com.android.internal.telephony.cdma.CdmaSMSDispatcher#processCdmaWapPdu}.
*
- * NOTE: concatRef (naturally) needs to be non-null, but portAddrs can be null.
+ * @param pdu the message PDU, or the datagram portion of a CDMA WDP datagram segment
+ * @param address the originating address
+ * @param referenceNumber distinguishes concatenated messages from the same sender
+ * @param sequenceNumber the order of this segment in the message
+ * (starting at 0 for CDMA WDP datagrams and 1 for concatenated messages).
+ * @param messageCount the number of segments in the message
+ * @param timestamp the service center timestamp in millis
+ * @param destPort the destination port for the message, or -1 for no destination port
+ * @param isCdmaWapPush true if pdu is a CDMA WDP datagram segment and not an SM PDU
+ *
* @return a result code from {@link Telephony.Sms.Intents}, or
* {@link Activity#RESULT_OK} if the message has been broadcast
* to applications
*/
- protected int processMessagePart(SmsMessageBase sms,
- SmsHeader.ConcatRef concatRef, SmsHeader.PortAddrs portAddrs) {
-
- // Lookup all other related parts
- StringBuilder where = new StringBuilder("reference_number =");
- where.append(concatRef.refNumber);
- where.append(" AND address = ?");
- String[] whereArgs = new String[] {sms.getOriginatingAddress()};
-
+ protected int processMessagePart(byte[] pdu, String address, int referenceNumber,
+ int sequenceNumber, int messageCount, long timestamp, int destPort,
+ boolean isCdmaWapPush) {
byte[][] pdus = null;
Cursor cursor = null;
try {
- cursor = mResolver.query(mRawUri, RAW_PROJECTION, where.toString(), whereArgs, null);
+ // used by several query selection arguments
+ String refNumber = Integer.toString(referenceNumber);
+ String seqNumber = Integer.toString(sequenceNumber);
+
+ // Check for duplicate message segment
+ cursor = mResolver.query(mRawUri, PDU_PROJECTION,
+ "address=? AND reference_number=? AND sequence=?",
+ new String[] {address, refNumber, seqNumber}, null);
+
+ // moveToNext() returns false if no duplicates were found
+ if (cursor.moveToNext()) {
+ Log.w(TAG, "Discarding duplicate message segment from address=" + address
+ + " refNumber=" + refNumber + " seqNumber=" + seqNumber);
+ String oldPduString = cursor.getString(PDU_COLUMN);
+ byte[] oldPdu = HexDump.hexStringToByteArray(oldPduString);
+ if (!Arrays.equals(oldPdu, pdu)) {
+ Log.e(TAG, "Warning: dup message segment PDU of length " + pdu.length
+ + " is different from existing PDU of length " + oldPdu.length);
+ }
+ return Intents.RESULT_SMS_HANDLED;
+ }
+ cursor.close();
+
+ // not a dup, query for all other segments of this concatenated message
+ String where = "address=? AND reference_number=?";
+ String[] whereArgs = new String[] {address, refNumber};
+ cursor = mResolver.query(mRawUri, PDU_SEQUENCE_PORT_PROJECTION, where, whereArgs, null);
+
int cursorCount = cursor.getCount();
- if (cursorCount != concatRef.msgCount - 1) {
+ if (cursorCount != messageCount - 1) {
// We don't have all the parts yet, store this one away
ContentValues values = new ContentValues();
- values.put("date", new Long(sms.getTimestampMillis()));
- values.put("pdu", HexDump.toHexString(sms.getPdu()));
- values.put("address", sms.getOriginatingAddress());
- values.put("reference_number", concatRef.refNumber);
- values.put("count", concatRef.msgCount);
- values.put("sequence", concatRef.seqNumber);
- if (portAddrs != null) {
- values.put("destination_port", portAddrs.destPort);
+ values.put("date", timestamp);
+ values.put("pdu", HexDump.toHexString(pdu));
+ values.put("address", address);
+ values.put("reference_number", referenceNumber);
+ values.put("count", messageCount);
+ values.put("sequence", sequenceNumber);
+ if (destPort != -1) {
+ values.put("destination_port", destPort);
}
mResolver.insert(mRawUri, values);
return Intents.RESULT_SMS_HANDLED;
}
// All the parts are in place, deal with them
- int pduColumn = cursor.getColumnIndex("pdu");
- int sequenceColumn = cursor.getColumnIndex("sequence");
-
- pdus = new byte[concatRef.msgCount][];
+ pdus = new byte[messageCount][];
for (int i = 0; i < cursorCount; i++) {
cursor.moveToNext();
- int cursorSequence = (int)cursor.getLong(sequenceColumn);
- pdus[cursorSequence - 1] = HexDump.hexStringToByteArray(
- cursor.getString(pduColumn));
+ int cursorSequence = cursor.getInt(SEQUENCE_COLUMN);
+ // GSM sequence numbers start at 1; CDMA WDP datagram sequence numbers start at 0
+ if (!isCdmaWapPush) {
+ cursorSequence--;
+ }
+ pdus[cursorSequence] = HexDump.hexStringToByteArray(
+ cursor.getString(PDU_COLUMN));
+
+ // Read the destination port from the first segment (needed for CDMA WAP PDU).
+ // It's not a bad idea to prefer the port from the first segment for 3GPP as well.
+ if (cursorSequence == 0 && !cursor.isNull(DESTINATION_PORT_COLUMN)) {
+ destPort = cursor.getInt(DESTINATION_PORT_COLUMN);
+ }
}
// This one isn't in the DB, so add it
- pdus[concatRef.seqNumber - 1] = sms.getPdu();
+ // GSM sequence numbers start at 1; CDMA WDP datagram sequence numbers start at 0
+ if (isCdmaWapPush) {
+ pdus[sequenceNumber] = pdu;
+ } else {
+ pdus[sequenceNumber - 1] = pdu;
+ }
// Remove the parts from the database
- mResolver.delete(mRawUri, where.toString(), whereArgs);
+ mResolver.delete(mRawUri, where, whereArgs);
} catch (SQLException e) {
Log.e(TAG, "Can't access multipart SMS database", e);
- // TODO: Would OUT_OF_MEMORY be more appropriate?
return Intents.RESULT_SMS_GENERIC_ERROR;
} finally {
if (cursor != null) cursor.close();
}
- /**
- * TODO(cleanup): The following code has duplicated logic with
- * the radio-specific dispatchMessage code, which is fragile,
- * in addition to being redundant. Instead, if this method
- * maybe returned the reassembled message (or just contents),
- * the following code (which is not really related to
- * reconstruction) could be better consolidated.
- */
+ // Special handling for CDMA WDP datagrams
+ if (isCdmaWapPush) {
+ // Build up the data stream
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ for (int i = 0; i < messageCount; i++) {
+ // reassemble the (WSP-)pdu
+ output.write(pdus[i], 0, pdus[i].length);
+ }
+ byte[] datagram = output.toByteArray();
+
+ // Dispatch the PDU to applications
+ if (destPort == SmsHeader.PORT_WAP_PUSH) {
+ // Handle the PUSH
+ return mWapPush.dispatchWapPdu(datagram);
+ } else {
+ pdus = new byte[1][];
+ pdus[0] = datagram;
+ // The messages were sent to any other WAP port
+ dispatchPortAddressedPdus(pdus, destPort);
+ return Activity.RESULT_OK;
+ }
+ }
// Dispatch the PDUs to applications
- if (portAddrs != null) {
- if (portAddrs.destPort == SmsHeader.PORT_WAP_PUSH) {
+ if (destPort != -1) {
+ if (destPort == SmsHeader.PORT_WAP_PUSH) {
// Build up the data stream
ByteArrayOutputStream output = new ByteArrayOutputStream();
- for (int i = 0; i < concatRef.msgCount; i++) {
- SmsMessage msg = SmsMessage.createFromPdu(pdus[i]);
+ for (int i = 0; i < messageCount; i++) {
+ SmsMessage msg = SmsMessage.createFromPdu(pdus[i], getFormat());
byte[] data = msg.getUserData();
output.write(data, 0, data.length);
}
@@ -668,7 +651,7 @@
return mWapPush.dispatchWapPdu(output.toByteArray());
} else {
// The messages were sent to a port, so concoct a URI for it
- dispatchPortAddressedPdus(pdus, portAddrs.destPort);
+ dispatchPortAddressedPdus(pdus, destPort);
}
} else {
// The messages were not sent to a port
@@ -685,7 +668,8 @@
protected void dispatchPdus(byte[][] pdus) {
Intent intent = new Intent(Intents.SMS_RECEIVED_ACTION);
intent.putExtra("pdus", pdus);
- dispatch(intent, "android.permission.RECEIVE_SMS");
+ intent.putExtra("format", getFormat());
+ dispatch(intent, RECEIVE_SMS_PERMISSION);
}
/**
@@ -698,7 +682,8 @@
Uri uri = Uri.parse("sms://localhost:" + port);
Intent intent = new Intent(Intents.DATA_SMS_RECEIVED_ACTION, uri);
intent.putExtra("pdus", pdus);
- dispatch(intent, "android.permission.RECEIVE_SMS");
+ intent.putExtra("format", getFormat());
+ dispatch(intent, RECEIVE_SMS_PERMISSION);
}
/**
@@ -759,6 +744,16 @@
String text, PendingIntent sentIntent, PendingIntent deliveryIntent);
/**
+ * Calculate the number of septets needed to encode the message.
+ *
+ * @param messageBody the message to encode
+ * @param use7bitOnly ignore (but still count) illegal characters if true
+ * @return TextEncodingDetails
+ */
+ protected abstract TextEncodingDetails calculateLength(CharSequence messageBody,
+ boolean use7bitOnly);
+
+ /**
* Send a multi-part text based SMS.
*
* @param destAddr the address to send the message to
@@ -784,9 +779,70 @@
* to the recipient. The raw pdu of the status report is in the
* extended data ("pdu").
*/
- protected abstract void sendMultipartText(String destAddr, String scAddr,
+ protected void sendMultipartText(String destAddr, String scAddr,
ArrayList<String> parts, ArrayList<PendingIntent> sentIntents,
- ArrayList<PendingIntent> deliveryIntents);
+ ArrayList<PendingIntent> deliveryIntents) {
+
+ int refNumber = getNextConcatenatedRef() & 0x00FF;
+ int msgCount = parts.size();
+ int encoding = android.telephony.SmsMessage.ENCODING_UNKNOWN;
+
+ mRemainingMessages = msgCount;
+
+ TextEncodingDetails[] encodingForParts = new TextEncodingDetails[msgCount];
+ for (int i = 0; i < msgCount; i++) {
+ TextEncodingDetails details = calculateLength(parts.get(i), false);
+ if (encoding != details.codeUnitSize
+ && (encoding == android.telephony.SmsMessage.ENCODING_UNKNOWN
+ || encoding == android.telephony.SmsMessage.ENCODING_7BIT)) {
+ encoding = details.codeUnitSize;
+ }
+ encodingForParts[i] = details;
+ }
+
+ for (int i = 0; i < msgCount; i++) {
+ SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
+ concatRef.refNumber = refNumber;
+ concatRef.seqNumber = i + 1; // 1-based sequence
+ concatRef.msgCount = msgCount;
+ // TODO: We currently set this to true since our messaging app will never
+ // send more than 255 parts (it converts the message to MMS well before that).
+ // However, we should support 3rd party messaging apps that might need 16-bit
+ // references
+ // Note: It's not sufficient to just flip this bit to true; it will have
+ // ripple effects (several calculations assume 8-bit ref).
+ concatRef.isEightBits = true;
+ SmsHeader smsHeader = new SmsHeader();
+ smsHeader.concatRef = concatRef;
+
+ // Set the national language tables for 3GPP 7-bit encoding, if enabled.
+ if (encoding == android.telephony.SmsMessage.ENCODING_7BIT) {
+ smsHeader.languageTable = encodingForParts[i].languageTable;
+ smsHeader.languageShiftTable = encodingForParts[i].languageShiftTable;
+ }
+
+ PendingIntent sentIntent = null;
+ if (sentIntents != null && sentIntents.size() > i) {
+ sentIntent = sentIntents.get(i);
+ }
+
+ PendingIntent deliveryIntent = null;
+ if (deliveryIntents != null && deliveryIntents.size() > i) {
+ deliveryIntent = deliveryIntents.get(i);
+ }
+
+ sendNewSubmitPdu(destAddr, scAddr, parts.get(i), smsHeader, encoding,
+ sentIntent, deliveryIntent, (i == (msgCount - 1)));
+ }
+
+ }
+
+ /**
+ * Create a new SubmitPdu and send it.
+ */
+ protected abstract void sendNewSubmitPdu(String destinationAddress, String scAddress,
+ String message, SmsHeader smsHeader, int encoding,
+ PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart);
/**
* Send a SMS
@@ -842,7 +898,7 @@
handleNotInService(ss, tracker);
} else {
String appName = getAppNameByIntent(sentIntent);
- if (mCounter.check(appName, SINGLE_PART_SMS)) {
+ if (mUsageMonitor.check(appName, SINGLE_PART_SMS)) {
sendSms(tracker);
} else {
sendMessage(obtainMessage(EVENT_POST_ALERT, tracker));
@@ -885,7 +941,7 @@
DEFAULT_SMS_TIMEOUT);
}
- protected String getAppNameByIntent(PendingIntent intent) {
+ protected static String getAppNameByIntent(PendingIntent intent) {
Resources r = Resources.getSystem();
return (intent != null) ? intent.getTargetPackage()
: r.getString(R.string.sms_control_default_app_name);
@@ -903,7 +959,35 @@
*
* @param tracker holds the multipart Sms tracker ready to be sent
*/
- protected abstract void sendMultipartSms (SmsTracker tracker);
+ private void sendMultipartSms(SmsTracker tracker) {
+ ArrayList<String> parts;
+ ArrayList<PendingIntent> sentIntents;
+ ArrayList<PendingIntent> deliveryIntents;
+
+ HashMap<String, Object> map = tracker.mData;
+
+ String destinationAddress = (String) map.get("destination");
+ String scAddress = (String) map.get("scaddress");
+
+ parts = (ArrayList<String>) map.get("parts");
+ sentIntents = (ArrayList<PendingIntent>) map.get("sentIntents");
+ deliveryIntents = (ArrayList<PendingIntent>) map.get("deliveryIntents");
+
+ // check if in service
+ int ss = mPhone.getServiceState().getState();
+ if (ss != ServiceState.STATE_IN_SERVICE) {
+ for (int i = 0, count = parts.size(); i < count; i++) {
+ PendingIntent sentIntent = null;
+ if (sentIntents != null && sentIntents.size() > i) {
+ sentIntent = sentIntents.get(i);
+ }
+ handleNotInService(ss, new SmsTracker(null, sentIntent, null));
+ }
+ return;
+ }
+
+ sendMultipartText(destinationAddress, scAddress, parts, sentIntents, deliveryIntents);
+ }
/**
* Send an acknowledge message.
@@ -934,66 +1018,38 @@
}
/**
- * Check if a SmsTracker holds multi-part Sms
- *
- * @param tracker a SmsTracker could hold a multi-part Sms
- * @return true for tracker holds Multi-parts Sms
- */
- private boolean isMultipartTracker (SmsTracker tracker) {
- HashMap map = tracker.mData;
- return ( map.get("parts") != null);
- }
-
- /**
* Keeps track of an SMS that has been sent to the RIL, until it has
* successfully been sent, or we're done trying.
*
*/
- static protected class SmsTracker {
+ protected static final class SmsTracker {
// fields need to be public for derived SmsDispatchers
- public HashMap<String, Object> mData;
+ public final HashMap<String, Object> mData;
public int mRetryCount;
public int mMessageRef;
- public PendingIntent mSentIntent;
- public PendingIntent mDeliveryIntent;
+ public final PendingIntent mSentIntent;
+ public final PendingIntent mDeliveryIntent;
- SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
+ public SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
PendingIntent deliveryIntent) {
mData = data;
mSentIntent = sentIntent;
mDeliveryIntent = deliveryIntent;
mRetryCount = 0;
}
+
+ /**
+ * Returns whether this tracker holds a multi-part SMS.
+ * @return true if the tracker holds a multi-part SMS; false otherwise
+ */
+ protected boolean isMultipart() {
+ HashMap map = mData;
+ return map.containsKey("parts");
+ }
}
- protected SmsTracker SmsTrackerFactory(HashMap<String, Object> data, PendingIntent sentIntent,
- PendingIntent deliveryIntent) {
- return new SmsTracker(data, sentIntent, deliveryIntent);
- }
-
- public void initSipStack(boolean isObg) {
- // This function should be overridden by the classes that support
- // switching modes such as the CdmaSMSDispatcher.
- // Not implemented in GsmSMSDispatcher.
- Log.e(TAG, "Error! This function should never be executed.");
- }
-
- public void switchToCdma() {
- // This function should be overridden by the classes that support
- // switching modes such as the CdmaSMSDispatcher.
- // Not implemented in GsmSMSDispatcher.
- Log.e(TAG, "Error! This function should never be executed.");
- }
-
- public void switchToGsm() {
- // This function should be overridden by the classes that support
- // switching modes such as the CdmaSMSDispatcher.
- // Not implemented in GsmSMSDispatcher.
- Log.e(TAG, "Error! This function should never be executed.");
- }
-
- private DialogInterface.OnClickListener mListener =
+ private final DialogInterface.OnClickListener mListener =
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
@@ -1007,42 +1063,32 @@
}
};
- private BroadcastReceiver mResultReceiver = new BroadcastReceiver() {
+ private final BroadcastReceiver mResultReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(Intent.ACTION_DEVICE_STORAGE_FULL)) {
- mStorageAvailable = false;
- mCm.reportSmsMemoryStatus(false, obtainMessage(EVENT_REPORT_MEMORY_STATUS_DONE));
- } else if (intent.getAction().equals(Intent.ACTION_DEVICE_STORAGE_NOT_FULL)) {
- mStorageAvailable = true;
- mCm.reportSmsMemoryStatus(true, obtainMessage(EVENT_REPORT_MEMORY_STATUS_DONE));
- } else {
- // Assume the intent is one of the SMS receive intents that
- // was sent as an ordered broadcast. Check result and ACK.
- int rc = getResultCode();
- boolean success = (rc == Activity.RESULT_OK)
- || (rc == Intents.RESULT_SMS_HANDLED);
+ // Assume the intent is one of the SMS receive intents that
+ // was sent as an ordered broadcast. Check result and ACK.
+ int rc = getResultCode();
+ boolean success = (rc == Activity.RESULT_OK)
+ || (rc == Intents.RESULT_SMS_HANDLED);
- // For a multi-part message, this only ACKs the last part.
- // Previous parts were ACK'd as they were received.
- acknowledgeLastIncomingSms(success, rc, null);
- }
+ // For a multi-part message, this only ACKs the last part.
+ // Previous parts were ACK'd as they were received.
+ acknowledgeLastIncomingSms(success, rc, null);
}
};
- protected abstract void handleBroadcastSms(AsyncResult ar);
-
protected void dispatchBroadcastPdus(byte[][] pdus, boolean isEmergencyMessage) {
if (isEmergencyMessage) {
Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
intent.putExtra("pdus", pdus);
Log.d(TAG, "Dispatching " + pdus.length + " emergency SMS CB pdus");
- dispatch(intent, "android.permission.RECEIVE_EMERGENCY_BROADCAST");
+ dispatch(intent, RECEIVE_EMERGENCY_BROADCAST_PERMISSION);
} else {
Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
intent.putExtra("pdus", pdus);
Log.d(TAG, "Dispatching " + pdus.length + " SMS CB pdus");
- dispatch(intent, "android.permission.RECEIVE_SMS");
+ dispatch(intent, RECEIVE_SMS_PERMISSION);
}
}
}
diff --git a/telephony/java/com/android/internal/telephony/SmsStorageMonitor.java b/telephony/java/com/android/internal/telephony/SmsStorageMonitor.java
new file mode 100644
index 0000000..0c06ffc
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/SmsStorageMonitor.java
@@ -0,0 +1,162 @@
+/*
+ * 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.telephony;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.os.Message;
+import android.os.PowerManager;
+import android.provider.Telephony.Sms.Intents;
+import android.util.Log;
+
+/**
+ * Monitors the device and ICC storage, and sends the appropriate events.
+ *
+ * This code was formerly part of {@link SMSDispatcher}, and has been moved
+ * into a separate class to support instantiation of multiple SMSDispatchers on
+ * dual-mode devices that require support for both 3GPP and 3GPP2 format messages.
+ */
+public final class SmsStorageMonitor extends Handler {
+ private static final String TAG = "SmsStorageMonitor";
+
+ /** SIM/RUIM storage is full */
+ private static final int EVENT_ICC_FULL = 1;
+
+ /** Memory status reporting is acknowledged by RIL */
+ private static final int EVENT_REPORT_MEMORY_STATUS_DONE = 2;
+
+ /** Radio is ON */
+ private static final int EVENT_RADIO_ON = 3;
+
+ /** Context from phone object passed to constructor. */
+ private final Context mContext;
+
+ /** Wake lock to ensure device stays awake while dispatching the SMS intent. */
+ private PowerManager.WakeLock mWakeLock;
+
+ private boolean mReportMemoryStatusPending;
+
+ final CommandsInterface mCm; // accessed from inner class
+ boolean mStorageAvailable = true; // accessed from inner class
+
+ /**
+ * Hold the wake lock for 5 seconds, which should be enough time for
+ * any receiver(s) to grab its own wake lock.
+ */
+ private static final int WAKE_LOCK_TIMEOUT = 5000;
+
+ /**
+ * Creates an SmsStorageMonitor and registers for events.
+ * @param phone the Phone to use
+ */
+ public SmsStorageMonitor(PhoneBase phone) {
+ mContext = phone.getContext();
+ mCm = phone.mCM;
+
+ createWakelock();
+
+ mCm.setOnIccSmsFull(this, EVENT_ICC_FULL, null);
+ mCm.registerForOn(this, EVENT_RADIO_ON, null);
+
+ // Register for device storage intents. Use these to notify the RIL
+ // that storage for SMS is or is not available.
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_DEVICE_STORAGE_FULL);
+ filter.addAction(Intent.ACTION_DEVICE_STORAGE_NOT_FULL);
+ mContext.registerReceiver(mResultReceiver, filter);
+ }
+
+ public void dispose() {
+ mCm.unSetOnIccSmsFull(this);
+ mCm.unregisterForOn(this);
+ mContext.unregisterReceiver(mResultReceiver);
+ }
+
+ /**
+ * Handles events coming from the phone stack. Overridden from handler.
+ * @param msg the message to handle
+ */
+ @Override
+ public void handleMessage(Message msg) {
+ AsyncResult ar;
+
+ switch (msg.what) {
+ case EVENT_ICC_FULL:
+ handleIccFull();
+ break;
+
+ case EVENT_REPORT_MEMORY_STATUS_DONE:
+ ar = (AsyncResult) msg.obj;
+ if (ar.exception != null) {
+ mReportMemoryStatusPending = true;
+ Log.v(TAG, "Memory status report to modem pending : mStorageAvailable = "
+ + mStorageAvailable);
+ } else {
+ mReportMemoryStatusPending = false;
+ }
+ break;
+
+ case EVENT_RADIO_ON:
+ if (mReportMemoryStatusPending) {
+ Log.v(TAG, "Sending pending memory status report : mStorageAvailable = "
+ + mStorageAvailable);
+ mCm.reportSmsMemoryStatus(mStorageAvailable,
+ obtainMessage(EVENT_REPORT_MEMORY_STATUS_DONE));
+ }
+ break;
+ }
+ }
+
+ private void createWakelock() {
+ PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
+ mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SmsStorageMonitor");
+ mWakeLock.setReferenceCounted(true);
+ }
+
+ /**
+ * Called when SIM_FULL message is received from the RIL. Notifies interested
+ * parties that SIM storage for SMS messages is full.
+ */
+ private void handleIccFull() {
+ // broadcast SIM_FULL intent
+ Intent intent = new Intent(Intents.SIM_FULL_ACTION);
+ mWakeLock.acquire(WAKE_LOCK_TIMEOUT);
+ mContext.sendBroadcast(intent, SMSDispatcher.RECEIVE_SMS_PERMISSION);
+ }
+
+ /** Returns whether or not there is storage available for an incoming SMS. */
+ public boolean isStorageAvailable() {
+ return mStorageAvailable;
+ }
+
+ private final BroadcastReceiver mResultReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(Intent.ACTION_DEVICE_STORAGE_FULL)) {
+ mStorageAvailable = false;
+ mCm.reportSmsMemoryStatus(false, obtainMessage(EVENT_REPORT_MEMORY_STATUS_DONE));
+ } else if (intent.getAction().equals(Intent.ACTION_DEVICE_STORAGE_NOT_FULL)) {
+ mStorageAvailable = true;
+ mCm.reportSmsMemoryStatus(true, obtainMessage(EVENT_REPORT_MEMORY_STATUS_DONE));
+ }
+ }
+ };
+}
diff --git a/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java b/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java
new file mode 100644
index 0000000..bd2ae8b
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java
@@ -0,0 +1,128 @@
+/*
+ * 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.telephony;
+
+import android.content.ContentResolver;
+import android.provider.Settings;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Implement the per-application based SMS control, which limits the number of
+ * SMS/MMS messages an app can send in the checking period.
+ *
+ * This code was formerly part of {@link SMSDispatcher}, and has been moved
+ * into a separate class to support instantiation of multiple SMSDispatchers on
+ * dual-mode devices that require support for both 3GPP and 3GPP2 format messages.
+ */
+public class SmsUsageMonitor {
+ private static final String TAG = "SmsStorageMonitor";
+
+ /** Default checking period for SMS sent without user permission. */
+ private static final int DEFAULT_SMS_CHECK_PERIOD = 3600000;
+
+ /** Default number of SMS sent in checking period without user permission. */
+ private static final int DEFAULT_SMS_MAX_COUNT = 100;
+
+ private final int mCheckPeriod;
+ private final int mMaxAllowed;
+ private final HashMap<String, ArrayList<Long>> mSmsStamp =
+ new HashMap<String, ArrayList<Long>>();
+
+ /**
+ * Create SMS usage monitor.
+ * @param resolver the ContentResolver to use to load from secure settings
+ */
+ public SmsUsageMonitor(ContentResolver resolver) {
+ mMaxAllowed = Settings.Secure.getInt(resolver,
+ Settings.Secure.SMS_OUTGOING_CHECK_MAX_COUNT,
+ DEFAULT_SMS_MAX_COUNT);
+
+ mCheckPeriod = Settings.Secure.getInt(resolver,
+ Settings.Secure.SMS_OUTGOING_CHECK_INTERVAL_MS,
+ DEFAULT_SMS_CHECK_PERIOD);
+ }
+
+ /** Clear the SMS application list for disposal. */
+ void dispose() {
+ mSmsStamp.clear();
+ }
+
+ /**
+ * Check to see if an application is allowed to send new SMS messages.
+ *
+ * @param appName the application sending sms
+ * @param smsWaiting the number of new messages desired to send
+ * @return true if application is allowed to send the requested number
+ * of new sms messages
+ */
+ public boolean check(String appName, int smsWaiting) {
+ synchronized (mSmsStamp) {
+ removeExpiredTimestamps();
+
+ ArrayList<Long> sentList = mSmsStamp.get(appName);
+ if (sentList == null) {
+ sentList = new ArrayList<Long>();
+ mSmsStamp.put(appName, sentList);
+ }
+
+ return isUnderLimit(sentList, smsWaiting);
+ }
+ }
+
+ /**
+ * Remove keys containing only old timestamps. This can happen if an SMS app is used
+ * to send messages and then uninstalled.
+ */
+ private void removeExpiredTimestamps() {
+ long beginCheckPeriod = System.currentTimeMillis() - mCheckPeriod;
+
+ synchronized (mSmsStamp) {
+ Iterator<Map.Entry<String, ArrayList<Long>>> iter = mSmsStamp.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry<String, ArrayList<Long>> entry = iter.next();
+ ArrayList<Long> oldList = entry.getValue();
+ if (oldList.isEmpty() || oldList.get(oldList.size() - 1) < beginCheckPeriod) {
+ iter.remove();
+ }
+ }
+ }
+ }
+
+ private boolean isUnderLimit(ArrayList<Long> sent, int smsWaiting) {
+ Long ct = System.currentTimeMillis();
+ long beginCheckPeriod = ct - mCheckPeriod;
+
+ Log.d(TAG, "SMS send size=" + sent.size() + " time=" + ct);
+
+ while (!sent.isEmpty() && sent.get(0) < beginCheckPeriod) {
+ sent.remove(0);
+ }
+
+ if ((sent.size() + smsWaiting) <= mMaxAllowed) {
+ for (int i = 0; i < smsWaiting; i++ ) {
+ sent.add(ct);
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
index 6903025..4f50d24 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
@@ -18,15 +18,22 @@
import android.content.ContentValues;
import android.content.Context;
+import android.content.SharedPreferences;
import android.database.SQLException;
import android.net.Uri;
+import android.os.AsyncResult;
import android.os.Message;
+import android.preference.PreferenceManager;
import android.provider.Telephony;
import android.util.Log;
import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.OperatorInfo;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneNotifier;
+import com.android.internal.telephony.PhoneProxy;
+import com.android.internal.telephony.SMSDispatcher;
+import com.android.internal.telephony.gsm.GsmSMSDispatcher;
import com.android.internal.telephony.gsm.SimCard;
import com.android.internal.telephony.ims.IsimRecords;
@@ -35,14 +42,39 @@
private static final boolean DBG = true;
- // Constructors
- public CDMALTEPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
- this(context, ci, notifier, false);
+ /** Secondary SMSDispatcher for 3GPP format messages. */
+ SMSDispatcher m3gppSMS;
+
+ /**
+ * Small container class used to hold information relevant to
+ * the carrier selection process. operatorNumeric can be ""
+ * if we are looking for automatic selection. operatorAlphaLong is the
+ * corresponding operator name.
+ */
+ private static class NetworkSelectMessage {
+ public Message message;
+ public String operatorNumeric;
+ public String operatorAlphaLong;
}
- public CDMALTEPhone(Context context, CommandsInterface ci, PhoneNotifier notifier,
- boolean unitTestMode) {
+ // Constructors
+ public CDMALTEPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
super(context, ci, notifier, false);
+ m3gppSMS = new GsmSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor);
+ }
+
+ @Override
+ public void handleMessage (Message msg) {
+ AsyncResult ar;
+ Message onComplete;
+ switch (msg.what) {
+ // handle the select network completion callbacks.
+ case EVENT_SET_NETWORK_MANUAL_COMPLETE:
+ handleSetSelectNetwork((AsyncResult) msg.obj);
+ break;
+ default:
+ super.handleMessage(msg);
+ }
}
@Override
@@ -54,6 +86,20 @@
}
@Override
+ public void dispose() {
+ synchronized(PhoneProxy.lockForRadioTechnologyChange) {
+ super.dispose();
+ m3gppSMS.dispose();
+ }
+ }
+
+ @Override
+ public void removeReferences() {
+ super.removeReferences();
+ m3gppSMS = null;
+ }
+
+ @Override
public DataState getDataConnectionState(String apnType) {
DataState ret = DataState.DISCONNECTED;
@@ -92,13 +138,67 @@
return ret;
}
+ @Override
+ public void
+ selectNetworkManually(OperatorInfo network,
+ Message response) {
+ // wrap the response message in our own message along with
+ // the operator's id.
+ NetworkSelectMessage nsm = new NetworkSelectMessage();
+ nsm.message = response;
+ nsm.operatorNumeric = network.getOperatorNumeric();
+ nsm.operatorAlphaLong = network.getOperatorAlphaLong();
+
+ // get the message
+ Message msg = obtainMessage(EVENT_SET_NETWORK_MANUAL_COMPLETE, nsm);
+
+ mCM.setNetworkSelectionModeManual(network.getOperatorNumeric(), msg);
+ }
+
+ /**
+ * Used to track the settings upon completion of the network change.
+ */
+ private void handleSetSelectNetwork(AsyncResult ar) {
+ // look for our wrapper within the asyncresult, skip the rest if it
+ // is null.
+ if (!(ar.userObj instanceof NetworkSelectMessage)) {
+ if (DBG) Log.d(LOG_TAG, "unexpected result from user object.");
+ return;
+ }
+
+ NetworkSelectMessage nsm = (NetworkSelectMessage) ar.userObj;
+
+ // found the object, now we send off the message we had originally
+ // attached to the request.
+ if (nsm.message != null) {
+ if (DBG) Log.d(LOG_TAG, "sending original message to recipient");
+ AsyncResult.forMessage(nsm.message, ar.result, ar.exception);
+ nsm.message.sendToTarget();
+ }
+
+ // open the shared preferences editor, and write the value.
+ // nsm.operatorNumeric is "" if we're in automatic.selection.
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putString(NETWORK_SELECTION_KEY, nsm.operatorNumeric);
+ editor.putString(NETWORK_SELECTION_NAME_KEY, nsm.operatorAlphaLong);
+
+ // commit and log the result.
+ if (! editor.commit()) {
+ Log.e(LOG_TAG, "failed to commit network selection preference");
+ }
+
+ }
+
+ @Override
public boolean updateCurrentCarrierInProvider() {
if (mIccRecords != null) {
try {
Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
ContentValues map = new ContentValues();
- map.put(Telephony.Carriers.NUMERIC, mIccRecords.getOperatorNumeric());
- log("updateCurrentCarrierInProvider insert uri=" + uri);
+ String operatorNumeric = mIccRecords.getOperatorNumeric();
+ map.put(Telephony.Carriers.NUMERIC, operatorNumeric);
+ log("updateCurrentCarrierInProvider from UICC: numeric=" + operatorNumeric);
mContext.getContentResolver().insert(uri, map);
return true;
} catch (SQLException e) {
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
index 286515e..09ee28c 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -17,10 +17,9 @@
package com.android.internal.telephony.cdma;
import android.app.ActivityManagerNative;
-import android.content.Context;
import android.content.ContentValues;
+import android.content.Context;
import android.content.Intent;
-import android.content.res.Configuration;
import android.content.SharedPreferences;
import android.database.SQLException;
import android.net.Uri;
@@ -31,7 +30,6 @@
import android.os.PowerManager.WakeLock;
import android.os.Registrant;
import android.os.RegistrantList;
-import android.os.RemoteException;
import android.os.SystemProperties;
import android.preference.PreferenceManager;
import android.provider.Telephony;
@@ -42,20 +40,17 @@
import android.text.TextUtils;
import android.util.Log;
-import com.android.internal.telephony.cat.CatService;
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallStateException;
+import com.android.internal.telephony.CallTracker;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.Connection;
-import com.android.internal.telephony.DataConnection;
-import com.android.internal.telephony.IccRecords;
-import com.android.internal.telephony.MccTable;
-import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.IccException;
import com.android.internal.telephony.IccFileHandler;
import com.android.internal.telephony.IccPhoneBookInterfaceManager;
import com.android.internal.telephony.IccSmsInterfaceManager;
+import com.android.internal.telephony.MccTable;
import com.android.internal.telephony.MmiCode;
import com.android.internal.telephony.OperatorInfo;
import com.android.internal.telephony.Phone;
@@ -67,19 +62,17 @@
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.telephony.UUSInfo;
-import com.android.internal.telephony.CallTracker;
-
-import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
-import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
-import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY;
+import com.android.internal.telephony.cat.CatService;
import java.util.ArrayList;
import java.util.List;
-
-
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
+
/**
* {@hide}
*/
@@ -109,13 +102,13 @@
CatService mCcatService;
// mNvLoadedRegistrants are informed after the EVENT_NV_READY
- private RegistrantList mNvLoadedRegistrants = new RegistrantList();
+ private final RegistrantList mNvLoadedRegistrants = new RegistrantList();
// mEriFileLoadedRegistrants are informed after the ERI text has been loaded
- private RegistrantList mEriFileLoadedRegistrants = new RegistrantList();
+ private final RegistrantList mEriFileLoadedRegistrants = new RegistrantList();
// mEcmTimerResetRegistrants are informed after Ecm timer is canceled or re-started
- private RegistrantList mEcmTimerResetRegistrants = new RegistrantList();
+ private final RegistrantList mEcmTimerResetRegistrants = new RegistrantList();
// mEcmExitRespRegistrant is informed after the phone has been exited
//the emergency callback mode
@@ -131,6 +124,7 @@
// A runnable which is used to automatically exit from Ecm after a period of time.
private Runnable mExitEcmRunnable = new Runnable() {
+ @Override
public void run() {
exitEmergencyCallbackMode();
}
@@ -164,7 +158,7 @@
protected void init(Context context, PhoneNotifier notifier) {
mCM.setPhoneType(Phone.PHONE_TYPE_CDMA);
mCT = new CdmaCallTracker(this);
- mSMS = new CdmaSMSDispatcher(this);
+ mSMS = new CdmaSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor);
mDataConnectionTracker = new CdmaDataConnectionTracker (this);
mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this);
mRuimSmsInterfaceManager = new RuimSmsInterfaceManager(this, mSMS);
@@ -188,7 +182,7 @@
//Change the system setting
SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE,
- new Integer(Phone.PHONE_TYPE_CDMA).toString());
+ Integer.toString(Phone.PHONE_TYPE_CDMA));
// This is needed to handle phone process crashes
String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
@@ -220,6 +214,7 @@
notifier.notifyMessageWaitingChanged(this);
}
+ @Override
public void dispose() {
synchronized(PhoneProxy.lockForRadioTechnologyChange) {
super.dispose();
@@ -253,23 +248,26 @@
}
}
+ @Override
public void removeReferences() {
- log("removeReferences");
- this.mRuimPhoneBookInterfaceManager = null;
- this.mRuimSmsInterfaceManager = null;
- this.mSMS = null;
- this.mSubInfo = null;
- this.mIccRecords = null;
- this.mIccFileHandler = null;
- this.mIccCard = null;
- this.mDataConnectionTracker = null;
- this.mCT = null;
- this.mSST = null;
- this.mEriManager = null;
- this.mCcatService = null;
- this.mExitEcmRunnable = null;
+ log("removeReferences");
+ super.removeReferences();
+ mRuimPhoneBookInterfaceManager = null;
+ mRuimSmsInterfaceManager = null;
+ mSMS = null;
+ mSubInfo = null;
+ mIccRecords = null;
+ mIccFileHandler = null;
+ mIccCard = null;
+ mDataConnectionTracker = null;
+ mCT = null;
+ mSST = null;
+ mEriManager = null;
+ mCcatService = null;
+ mExitEcmRunnable = null;
}
+ @Override
protected void finalize() {
if(DBG) Log.d(LOG_TAG, "CDMAPhone finalized");
if (mWakeLock.isHeld()) {
@@ -813,7 +811,7 @@
return null;
}
- /**
+ /**
* Notify any interested party of a Phone state change {@link Phone.State}
*/
/*package*/ void notifyPhoneStateChanged() {
@@ -858,18 +856,6 @@
if (DBG) Log.d(LOG_TAG, "sendEmergencyCallbackModeChange");
}
- /*package*/ void
- updateMessageWaitingIndicator(boolean mwi) {
- // this also calls notifyMessageWaitingIndicator()
- mIccRecords.setVoiceMessageWaiting(1, mwi ? -1 : 0);
- }
-
- /* This function is overloaded to send number of voicemails instead of sending true/false */
- /*package*/ void
- updateMessageWaitingIndicator(int mwi) {
- mIccRecords.setVoiceMessageWaiting(1, mwi);
- }
-
@Override
public void exitEmergencyCallbackMode() {
if (mWakeLock.isHeld()) {
@@ -1013,6 +999,7 @@
case EVENT_RUIM_RECORDS_LOADED:{
Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received");
+ updateCurrentCarrierInProvider();
}
break;
@@ -1172,7 +1159,7 @@
private static final int IS683_CONST_1900MHZ_F_BLOCK = 7;
private static final int INVALID_SYSTEM_SELECTION_CODE = -1;
- private boolean isIs683OtaSpDialStr(String dialStr) {
+ private static boolean isIs683OtaSpDialStr(String dialStr) {
int sysSelCodeInt;
boolean isOtaspDialString = false;
int dialStrLen = dialStr.length();
@@ -1203,7 +1190,7 @@
/**
* This function extracts the system selection code from the dial string.
*/
- private int extractSelCodeFromOtaSpNum(String dialStr) {
+ private static int extractSelCodeFromOtaSpNum(String dialStr) {
int dialStrLen = dialStr.length();
int sysSelCodeInt = INVALID_SYSTEM_SELECTION_CODE;
@@ -1226,7 +1213,7 @@
* the dial string "sysSelCodeInt' is the system selection code specified
* in the carrier ota sp number schema "sch".
*/
- private boolean
+ private static boolean
checkOtaSpNumBasedOnSysSelCode (int sysSelCodeInt, String sch[]) {
boolean isOtaSpNum = false;
try {
@@ -1414,7 +1401,7 @@
Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
ContentValues map = new ContentValues();
map.put(Telephony.Carriers.NUMERIC, operatorNumeric);
- log("updateCurrentCarrierInProvider insert uri=" + uri);
+ log("updateCurrentCarrierInProvider from system: numeric=" + operatorNumeric);
getContext().getContentResolver().insert(uri, map);
// Updates MCC MNC device configuration information
@@ -1428,6 +1415,16 @@
return false;
}
+ /**
+ * Sets the "current" field in the telephony provider according to the SIM's operator.
+ * Implemented in {@link CDMALTEPhone} for CDMA/LTE devices.
+ *
+ * @return true for success; false otherwise.
+ */
+ boolean updateCurrentCarrierInProvider() {
+ return true;
+ }
+
public void prepareEri() {
mEriManager.loadEriFile();
if(mEriManager.isEriFileLoaded()) {
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index e92a276..57aae56 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -390,6 +390,7 @@
if (operatorNumeric == null) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
+ mGotCountryCode = false;
} else {
String isoCountryCode = "";
try {
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java
index 0617fee..47c638f 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java
@@ -26,6 +26,7 @@
import com.android.internal.telephony.IccUtils;
import com.android.internal.telephony.MccTable;
import com.android.internal.telephony.PhoneBase;
+import com.android.internal.telephony.SmsMessageBase;
import com.android.internal.telephony.cdma.sms.UserData;
import com.android.internal.telephony.gsm.SIMRecords;
import com.android.internal.telephony.ims.IsimRecords;
@@ -438,4 +439,13 @@
}
return true;
}
+
+ /**
+ * Dispatch 3GPP format message. For CDMA/LTE phones,
+ * send the message to the secondary 3GPP format SMS dispatcher.
+ */
+ @Override
+ protected int dispatchGsmMessage(SmsMessageBase message) {
+ return ((CDMALTEPhone) phone).m3gppSMS.dispatchMessage(message);
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
index 07b0f4f..ca8d9ae 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
@@ -25,7 +25,6 @@
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.SQLException;
-import android.os.AsyncResult;
import android.os.Message;
import android.os.SystemProperties;
import android.preference.PreferenceManager;
@@ -40,6 +39,8 @@
import com.android.internal.telephony.SmsHeader;
import com.android.internal.telephony.SmsMessageBase;
import com.android.internal.telephony.SmsMessageBase.TextEncodingDetails;
+import com.android.internal.telephony.SmsStorageMonitor;
+import com.android.internal.telephony.SmsUsageMonitor;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.telephony.WspTypeDecoder;
import com.android.internal.telephony.cdma.sms.SmsEnvelope;
@@ -47,7 +48,6 @@
import com.android.internal.util.HexDump;
import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -60,24 +60,23 @@
private byte[] mLastDispatchedSmsFingerprint;
private byte[] mLastAcknowledgedSmsFingerprint;
- private boolean mCheckForDuplicatePortsInOmadmWapPush = Resources.getSystem().getBoolean(
+ private final boolean mCheckForDuplicatePortsInOmadmWapPush = Resources.getSystem().getBoolean(
com.android.internal.R.bool.config_duplicate_port_omadm_wappush);
- CdmaSMSDispatcher(CDMAPhone phone) {
- super(phone);
+ CdmaSMSDispatcher(CDMAPhone phone, SmsStorageMonitor storageMonitor,
+ SmsUsageMonitor usageMonitor) {
+ super(phone, storageMonitor, usageMonitor);
+ mCm.setOnNewCdmaSms(this, EVENT_NEW_SMS, null);
}
- /**
- * Called when a status report is received. This should correspond to
- * a previously successful SEND.
- * Is a special GSM function, should never be called in CDMA!!
- *
- * @param ar AsyncResult passed into the message handler. ar.result should
- * be a String representing the status report PDU, as ASCII hex.
- */
@Override
- protected void handleStatusReport(AsyncResult ar) {
- Log.d(TAG, "handleStatusReport is a special GSM function, should never be called in CDMA!");
+ public void dispose() {
+ mCm.unSetOnNewCdmaSms(this);
+ }
+
+ @Override
+ protected String getFormat() {
+ return android.telephony.SmsMessage.FORMAT_3GPP2;
}
private void handleCdmaStatusReport(SmsMessage sms) {
@@ -89,6 +88,7 @@
PendingIntent intent = tracker.mDeliveryIntent;
Intent fillIn = new Intent();
fillIn.putExtra("pdu", sms.getPdu());
+ fillIn.putExtra("format", android.telephony.SmsMessage.FORMAT_3GPP2);
try {
intent.send(mContext, Activity.RESULT_OK, fillIn);
} catch (CanceledException ex) {}
@@ -138,11 +138,11 @@
Log.d(TAG, "Voicemail count=" + voicemailCount);
// Store the voicemail count in preferences.
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(
- mPhone.getContext());
+ mContext);
SharedPreferences.Editor editor = sp.edit();
editor.putInt(CDMAPhone.VM_COUNT_CDMA, voicemailCount);
editor.apply();
- ((CDMAPhone) mPhone).updateMessageWaitingIndicator(voicemailCount);
+ mPhone.setVoiceMessageWaiting(1, voicemailCount);
handled = true;
} else if (((SmsEnvelope.TELESERVICE_WMT == teleService) ||
(SmsEnvelope.TELESERVICE_WEMT == teleService)) &&
@@ -160,7 +160,8 @@
return Intents.RESULT_SMS_HANDLED;
}
- if (!mStorageAvailable && (sms.getMessageClass() != MessageClass.CLASS_0)) {
+ if (!mStorageMonitor.isStorageAvailable() &&
+ sms.getMessageClass() != MessageClass.CLASS_0) {
// It's a storable message and there's no storage available. Bail.
// (See C.S0015-B v2.0 for a description of "Immediate Display"
// messages, which we represent as CLASS_0.)
@@ -181,48 +182,7 @@
return Intents.RESULT_SMS_UNSUPPORTED;
}
- /*
- * TODO(cleanup): Why are we using a getter method for this
- * (and for so many other sms fields)? Trivial getters and
- * setters like this are direct violations of the style guide.
- * If the purpose is to protect against writes (by not
- * providing a setter) then any protection is illusory (and
- * hence bad) for cases where the values are not primitives,
- * such as this call for the header. Since this is an issue
- * with the public API it cannot be changed easily, but maybe
- * something can be done eventually.
- */
- SmsHeader smsHeader = sms.getUserDataHeader();
-
- /*
- * TODO(cleanup): Since both CDMA and GSM use the same header
- * format, this dispatch processing is naturally identical,
- * and code should probably not be replicated explicitly.
- */
-
- // See if message is partial or port addressed.
- if ((smsHeader == null) || (smsHeader.concatRef == null)) {
- // Message is not partial (not part of concatenated sequence).
- byte[][] pdus = new byte[1][];
- pdus[0] = sms.getPdu();
-
- if (smsHeader != null && smsHeader.portAddrs != null) {
- if (smsHeader.portAddrs.destPort == SmsHeader.PORT_WAP_PUSH) {
- // GSM-style WAP indication
- return mWapPush.dispatchWapPdu(sms.getUserData());
- } else {
- // The message was sent to a port, so concoct a URI for it.
- dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
- }
- } else {
- // Normal short and non-port-addressed message, dispatch it.
- dispatchPdus(pdus);
- }
- return Activity.RESULT_OK;
- } else {
- // Process the message part.
- return processMessagePart(sms, smsHeader.concatRef, smsHeader.portAddrs);
- }
+ return dispatchNormalMessage(smsb);
}
/**
@@ -236,23 +196,24 @@
* to applications
*/
protected int processCdmaWapPdu(byte[] pdu, int referenceNumber, String address) {
- int segment;
- int totalSegments;
int index = 0;
- int msgType;
- int sourcePort = 0;
- int destinationPort = 0;
-
- msgType = pdu[index++];
- if (msgType != 0){
+ int msgType = (0xFF & pdu[index++]);
+ if (msgType != 0) {
Log.w(TAG, "Received a WAP SMS which is not WDP. Discard.");
return Intents.RESULT_SMS_HANDLED;
}
- totalSegments = pdu[index++]; // >=1
- segment = pdu[index++]; // >=0
+ int totalSegments = (0xFF & pdu[index++]); // >= 1
+ int segment = (0xFF & pdu[index++]); // >= 0
+
+ if (segment >= totalSegments) {
+ Log.e(TAG, "WDP bad segment #" + segment + " expecting 0-" + (totalSegments - 1));
+ return Intents.RESULT_SMS_HANDLED;
+ }
// Only the first segment contains sourcePort and destination Port
+ int sourcePort = 0;
+ int destinationPort = 0;
if (segment == 0) {
//process WDP segment
sourcePort = (0xFF & pdu[index++]) << 8;
@@ -269,90 +230,16 @@
}
// Lookup all other related parts
- StringBuilder where = new StringBuilder("reference_number =");
- where.append(referenceNumber);
- where.append(" AND address = ?");
- String[] whereArgs = new String[] {address};
-
Log.i(TAG, "Received WAP PDU. Type = " + msgType + ", originator = " + address
+ ", src-port = " + sourcePort + ", dst-port = " + destinationPort
- + ", ID = " + referenceNumber + ", segment# = " + segment + "/" + totalSegments);
+ + ", ID = " + referenceNumber + ", segment# = " + segment + '/' + totalSegments);
- byte[][] pdus = null;
- Cursor cursor = null;
- try {
- cursor = mResolver.query(mRawUri, RAW_PROJECTION, where.toString(), whereArgs, null);
- int cursorCount = cursor.getCount();
- if (cursorCount != totalSegments - 1) {
- // We don't have all the parts yet, store this one away
- ContentValues values = new ContentValues();
- values.put("date", (long) 0);
- values.put("pdu", HexDump.toHexString(pdu, index, pdu.length - index));
- values.put("address", address);
- values.put("reference_number", referenceNumber);
- values.put("count", totalSegments);
- values.put("sequence", segment);
- values.put("destination_port", destinationPort);
+ // pass the user data portion of the PDU to the shared handler in SMSDispatcher
+ byte[] userData = new byte[pdu.length - index];
+ System.arraycopy(pdu, index, userData, 0, pdu.length - index);
- mResolver.insert(mRawUri, values);
-
- return Intents.RESULT_SMS_HANDLED;
- }
-
- // All the parts are in place, deal with them
- int pduColumn = cursor.getColumnIndex("pdu");
- int sequenceColumn = cursor.getColumnIndex("sequence");
-
- pdus = new byte[totalSegments][];
- for (int i = 0; i < cursorCount; i++) {
- cursor.moveToNext();
- int cursorSequence = (int)cursor.getLong(sequenceColumn);
- // Read the destination port from the first segment
- if (cursorSequence == 0) {
- int destinationPortColumn = cursor.getColumnIndex("destination_port");
- destinationPort = (int)cursor.getLong(destinationPortColumn);
- }
- pdus[cursorSequence] = HexDump.hexStringToByteArray(
- cursor.getString(pduColumn));
- }
- // The last part will be added later
-
- // Remove the parts from the database
- mResolver.delete(mRawUri, where.toString(), whereArgs);
- } catch (SQLException e) {
- Log.e(TAG, "Can't access multipart SMS database", e);
- return Intents.RESULT_SMS_GENERIC_ERROR;
- } finally {
- if (cursor != null) cursor.close();
- }
-
- // Build up the data stream
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- for (int i = 0; i < totalSegments; i++) {
- // reassemble the (WSP-)pdu
- if (i == segment) {
- // This one isn't in the DB, so add it
- output.write(pdu, index, pdu.length - index);
- } else {
- output.write(pdus[i], 0, pdus[i].length);
- }
- }
-
- byte[] datagram = output.toByteArray();
- // Dispatch the PDU to applications
- switch (destinationPort) {
- case SmsHeader.PORT_WAP_PUSH:
- // Handle the PUSH
- return mWapPush.dispatchWapPdu(datagram);
-
- default:{
- pdus = new byte[1][];
- pdus[0] = datagram;
- // The messages were sent to any other WAP port
- dispatchPortAddressedPdus(pdus, destinationPort);
- return Activity.RESULT_OK;
- }
- }
+ return processMessagePart(userData, address, referenceNumber, segment, totalSegments,
+ 0L, destinationPort, true);
}
/** {@inheritDoc} */
@@ -375,68 +262,34 @@
/** {@inheritDoc} */
@Override
- protected void sendMultipartText(String destAddr, String scAddr,
- ArrayList<String> parts, ArrayList<PendingIntent> sentIntents,
- ArrayList<PendingIntent> deliveryIntents) {
+ protected TextEncodingDetails calculateLength(CharSequence messageBody,
+ boolean use7bitOnly) {
+ return SmsMessage.calculateLength(messageBody, use7bitOnly);
+ }
- /**
- * TODO(cleanup): There is no real code difference between
- * this and the GSM version, and hence it should be moved to
- * the base class or consolidated somehow, provided calling
- * the proper submit pdu stuff can be arranged.
- */
-
- int refNumber = getNextConcatenatedRef() & 0x00FF;
- int msgCount = parts.size();
- int encoding = android.telephony.SmsMessage.ENCODING_UNKNOWN;
-
- for (int i = 0; i < msgCount; i++) {
- TextEncodingDetails details = SmsMessage.calculateLength(parts.get(i), false);
- if (encoding != details.codeUnitSize
- && (encoding == android.telephony.SmsMessage.ENCODING_UNKNOWN
- || encoding == android.telephony.SmsMessage.ENCODING_7BIT)) {
- encoding = details.codeUnitSize;
- }
+ /** {@inheritDoc} */
+ @Override
+ protected void sendNewSubmitPdu(String destinationAddress, String scAddress,
+ String message, SmsHeader smsHeader, int encoding,
+ PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart) {
+ UserData uData = new UserData();
+ uData.payloadStr = message;
+ uData.userDataHeader = smsHeader;
+ if (encoding == android.telephony.SmsMessage.ENCODING_7BIT) {
+ uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
+ } else { // assume UTF-16
+ uData.msgEncoding = UserData.ENCODING_UNICODE_16;
}
+ uData.msgEncodingSet = true;
- for (int i = 0; i < msgCount; i++) {
- SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
- concatRef.refNumber = refNumber;
- concatRef.seqNumber = i + 1; // 1-based sequence
- concatRef.msgCount = msgCount;
- concatRef.isEightBits = true;
- SmsHeader smsHeader = new SmsHeader();
- smsHeader.concatRef = concatRef;
+ /* By setting the statusReportRequested bit only for the
+ * last message fragment, this will result in only one
+ * callback to the sender when that last fragment delivery
+ * has been acknowledged. */
+ SmsMessage.SubmitPdu submitPdu = SmsMessage.getSubmitPdu(destinationAddress,
+ uData, (deliveryIntent != null) && lastPart);
- PendingIntent sentIntent = null;
- if (sentIntents != null && sentIntents.size() > i) {
- sentIntent = sentIntents.get(i);
- }
-
- PendingIntent deliveryIntent = null;
- if (deliveryIntents != null && deliveryIntents.size() > i) {
- deliveryIntent = deliveryIntents.get(i);
- }
-
- UserData uData = new UserData();
- uData.payloadStr = parts.get(i);
- uData.userDataHeader = smsHeader;
- if (encoding == android.telephony.SmsMessage.ENCODING_7BIT) {
- uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
- } else { // assume UTF-16
- uData.msgEncoding = UserData.ENCODING_UNICODE_16;
- }
- uData.msgEncodingSet = true;
-
- /* By setting the statusReportRequested bit only for the
- * last message fragment, this will result in only one
- * callback to the sender when that last fragment delivery
- * has been acknowledged. */
- SmsMessage.SubmitPdu submitPdu = SmsMessage.getSubmitPdu(destAddr,
- uData, (deliveryIntent != null) && (i == (msgCount - 1)));
-
- sendSubmitPdu(submitPdu, sentIntent, deliveryIntent);
- }
+ sendSubmitPdu(submitPdu, sentIntent, deliveryIntent);
}
protected void sendSubmitPdu(SmsMessage.SubmitPdu pdu,
@@ -464,43 +317,27 @@
byte pdu[] = (byte[]) map.get("pdu");
Message reply = obtainMessage(EVENT_SEND_SMS_COMPLETE, tracker);
-
mCm.sendCdmaSms(pdu, reply);
}
- /** {@inheritDoc} */
- @Override
- protected void sendMultipartSms (SmsTracker tracker) {
- Log.d(TAG, "TODO: CdmaSMSDispatcher.sendMultipartSms not implemented");
- }
-
/** {@inheritDoc} */
@Override
- protected void acknowledgeLastIncomingSms(boolean success, int result, Message response){
- // FIXME unit test leaves cm == null. this should change
-
+ protected void acknowledgeLastIncomingSms(boolean success, int result, Message response) {
String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
if (inEcm.equals("true")) {
return;
}
- if (mCm != null) {
- int causeCode = resultToCause(result);
- mCm.acknowledgeLastIncomingCdmaSms(success, causeCode, response);
+ int causeCode = resultToCause(result);
+ mCm.acknowledgeLastIncomingCdmaSms(success, causeCode, response);
- if (causeCode == 0) {
- mLastAcknowledgedSmsFingerprint = mLastDispatchedSmsFingerprint;
- }
- mLastDispatchedSmsFingerprint = null;
+ if (causeCode == 0) {
+ mLastAcknowledgedSmsFingerprint = mLastDispatchedSmsFingerprint;
}
+ mLastDispatchedSmsFingerprint = null;
}
- protected void handleBroadcastSms(AsyncResult ar) {
- // Not supported
- Log.e(TAG, "Error! Not implemented for CDMA.");
- }
-
- private int resultToCause(int rc) {
+ private static int resultToCause(int rc) {
switch (rc) {
case Activity.RESULT_OK:
case Intents.RESULT_SMS_HANDLED:
@@ -527,7 +364,7 @@
* @return True if OrigPdu is OmaDM Push Message which has duplicate ports.
* False if OrigPdu is NOT OmaDM Push Message which has duplicate ports.
*/
- private boolean checkDuplicatePortOmadmWappush(byte[] origPdu, int index) {
+ private static boolean checkDuplicatePortOmadmWappush(byte[] origPdu, int index) {
index += 4;
byte[] omaPdu = new byte[origPdu.length - index];
System.arraycopy(origPdu, index, omaPdu, 0, omaPdu.length);
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 0aed77e..3d6cd68 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -726,7 +726,7 @@
isPrlLoaded = false;
}
if (!isPrlLoaded) {
- newSS.setCdmaRoamingIndicator(EriInfo.ROAMING_INDICATOR_FLASH);
+ newSS.setCdmaRoamingIndicator(EriInfo.ROAMING_INDICATOR_OFF);
} else if (!isSidsAllZeros()) {
if (!namMatch && !mIsInPrl) {
// Use default
@@ -964,6 +964,7 @@
if (operatorNumeric == null) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
+ mGotCountryCode = false;
} else {
String isoCountryCode = "";
try{
diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
index be5c616..1409cab 100644
--- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -114,30 +114,6 @@
}
/**
- * Note: This function is a GSM specific functionality which is not supported in CDMA mode.
- */
- public static SmsMessage newFromCMT(String[] lines) {
- Log.w(LOG_TAG, "newFromCMT: is not supported in CDMA mode.");
- return null;
- }
-
- /**
- * Note: This function is a GSM specific functionality which is not supported in CDMA mode.
- */
- public static SmsMessage newFromCMTI(String line) {
- Log.w(LOG_TAG, "newFromCMTI: is not supported in CDMA mode.");
- return null;
- }
-
- /**
- * Note: This function is a GSM specific functionality which is not supported in CDMA mode.
- */
- public static SmsMessage newFromCDS(String line) {
- Log.w(LOG_TAG, "newFromCDS: is not supported in CDMA mode.");
- return null;
- }
-
- /**
* Create a "raw" CDMA SmsMessage from a Parcel that was forged in ril.cpp.
* Note: Only primitive fields are set.
*/
diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
index d325aaa..e1f4c4b 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -56,9 +56,6 @@
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.Connection;
-import com.android.internal.telephony.DataConnection;
-import com.android.internal.telephony.DataConnectionTracker;
-import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.IccFileHandler;
import com.android.internal.telephony.IccPhoneBookInterfaceManager;
import com.android.internal.telephony.IccSmsInterfaceManager;
@@ -140,7 +137,7 @@
mCM.setPhoneType(Phone.PHONE_TYPE_GSM);
mCT = new GsmCallTracker(this);
mSST = new GsmServiceStateTracker (this);
- mSMS = new GsmSMSDispatcher(this);
+ mSMS = new GsmSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor);
mIccFileHandler = new SIMFileHandler(this);
mIccRecords = new SIMRecords(this);
mDataConnectionTracker = new GsmDataConnectionTracker (this);
@@ -199,6 +196,7 @@
new Integer(Phone.PHONE_TYPE_GSM).toString());
}
+ @Override
public void dispose() {
synchronized(PhoneProxy.lockForRadioTechnologyChange) {
super.dispose();
@@ -228,19 +226,22 @@
}
}
+ @Override
public void removeReferences() {
- this.mSimulatedRadioControl = null;
- this.mStkService = null;
- this.mSimPhoneBookIntManager = null;
- this.mSimSmsIntManager = null;
- this.mSMS = null;
- this.mSubInfo = null;
- this.mIccRecords = null;
- this.mIccFileHandler = null;
- this.mIccCard = null;
- this.mDataConnectionTracker = null;
- this.mCT = null;
- this.mSST = null;
+ Log.d(LOG_TAG, "removeReferences");
+ super.removeReferences();
+ mSimulatedRadioControl = null;
+ mStkService = null;
+ mSimPhoneBookIntManager = null;
+ mSimSmsIntManager = null;
+ mSMS = null;
+ mSubInfo = null;
+ mIccRecords = null;
+ mIccFileHandler = null;
+ mIccCard = null;
+ mDataConnectionTracker = null;
+ mCT = null;
+ mSST = null;
}
protected void finalize() {
@@ -406,17 +407,6 @@
}
public void
- notifyDataConnectionFailed(String reason, String apnType) {
- mNotifier.notifyDataConnectionFailed(this, reason, apnType);
- }
-
- /*package*/ void
- updateMessageWaitingIndicator(boolean mwi) {
- // this also calls notifyMessageWaitingIndicator()
- mIccRecords.setVoiceMessageWaiting(1, mwi ? -1 : 0);
- }
-
- public void
notifyCallForwardingIndicator() {
mNotifier.notifyCallForwardingChanged(this);
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
index 52ca453..c1553d8 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
@@ -30,13 +30,15 @@
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
-import com.android.internal.telephony.BaseCommands;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.IccUtils;
+import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.SMSDispatcher;
import com.android.internal.telephony.SmsHeader;
import com.android.internal.telephony.SmsMessageBase;
import com.android.internal.telephony.SmsMessageBase.TextEncodingDetails;
+import com.android.internal.telephony.SmsStorageMonitor;
+import com.android.internal.telephony.SmsUsageMonitor;
import com.android.internal.telephony.TelephonyProperties;
import java.util.ArrayList;
@@ -45,16 +47,55 @@
import static android.telephony.SmsMessage.MessageClass;
-final class GsmSMSDispatcher extends SMSDispatcher {
+public final class GsmSMSDispatcher extends SMSDispatcher {
private static final String TAG = "GSM";
- private GSMPhone mGsmPhone;
+ /** Status report received */
+ private static final int EVENT_NEW_SMS_STATUS_REPORT = 100;
- GsmSMSDispatcher(GSMPhone phone) {
- super(phone);
- mGsmPhone = phone;
+ /** New broadcast SMS */
+ private static final int EVENT_NEW_BROADCAST_SMS = 101;
- ((BaseCommands)mCm).setOnNewGsmBroadcastSms(this, EVENT_NEW_BROADCAST_SMS, null);
+ public GsmSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor,
+ SmsUsageMonitor usageMonitor) {
+ super(phone, storageMonitor, usageMonitor);
+ mCm.setOnNewGsmSms(this, EVENT_NEW_SMS, null);
+ mCm.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null);
+ mCm.setOnNewGsmBroadcastSms(this, EVENT_NEW_BROADCAST_SMS, null);
+ }
+
+ @Override
+ public void dispose() {
+ mCm.unSetOnNewGsmSms(this);
+ mCm.unSetOnSmsStatus(this);
+ mCm.unSetOnNewGsmBroadcastSms(this);
+ }
+
+ @Override
+ protected String getFormat() {
+ return android.telephony.SmsMessage.FORMAT_3GPP;
+ }
+
+ /**
+ * Handles 3GPP format-specific events coming from the phone stack.
+ * Other events are handled by {@link SMSDispatcher#handleMessage}.
+ *
+ * @param msg the message to handle
+ */
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case EVENT_NEW_SMS_STATUS_REPORT:
+ handleStatusReport((AsyncResult) msg.obj);
+ break;
+
+ case EVENT_NEW_BROADCAST_SMS:
+ handleBroadcastSms((AsyncResult)msg.obj);
+ break;
+
+ default:
+ super.handleMessage(msg);
+ }
}
/**
@@ -64,8 +105,7 @@
* @param ar AsyncResult passed into the message handler. ar.result should
* be a String representing the status report PDU, as ASCII hex.
*/
- @Override
- protected void handleStatusReport(AsyncResult ar) {
+ private void handleStatusReport(AsyncResult ar) {
String pduString = (String) ar.result;
SmsMessage sms = SmsMessage.newFromCDS(pduString);
@@ -82,6 +122,7 @@
PendingIntent intent = tracker.mDeliveryIntent;
Intent fillIn = new Intent();
fillIn.putExtra("pdu", IccUtils.hexStringToBytes(pduString));
+ fillIn.putExtra("format", android.telephony.SmsMessage.FORMAT_3GPP);
try {
intent.send(mContext, Activity.RESULT_OK, fillIn);
} catch (CanceledException ex) {}
@@ -94,17 +135,17 @@
acknowledgeLastIncomingSms(true, Intents.RESULT_SMS_HANDLED, null);
}
-
/** {@inheritDoc} */
@Override
public int dispatchMessage(SmsMessageBase smsb) {
// If sms is null, means there was a parsing error.
if (smsb == null) {
+ Log.e(TAG, "dispatchMessage: message is null");
return Intents.RESULT_SMS_GENERIC_ERROR;
}
+
SmsMessage sms = (SmsMessage) smsb;
- boolean handled = false;
if (sms.isTypeZero()) {
// As per 3GPP TS 23.040 9.2.3.9, Type Zero messages should not be
@@ -121,14 +162,15 @@
}
// Special case the message waiting indicator messages
+ boolean handled = false;
if (sms.isMWISetMessage()) {
- mGsmPhone.updateMessageWaitingIndicator(true);
+ mPhone.setVoiceMessageWaiting(1, -1); // line 1: unknown number of msgs waiting
handled = sms.isMwiDontStore();
if (false) {
Log.d(TAG, "Received voice mail indicator set SMS shouldStore=" + !handled);
}
} else if (sms.isMWIClearMessage()) {
- mGsmPhone.updateMessageWaitingIndicator(false);
+ mPhone.setVoiceMessageWaiting(1, 0); // line 1: no msgs waiting
handled = sms.isMwiDontStore();
if (false) {
Log.d(TAG, "Received voice mail indicator clear SMS shouldStore=" + !handled);
@@ -139,35 +181,14 @@
return Intents.RESULT_SMS_HANDLED;
}
- if (!mStorageAvailable && (sms.getMessageClass() != MessageClass.CLASS_0)) {
+ if (!mStorageMonitor.isStorageAvailable() &&
+ sms.getMessageClass() != MessageClass.CLASS_0) {
// It's a storable message and there's no storage available. Bail.
// (See TS 23.038 for a description of class 0 messages.)
return Intents.RESULT_SMS_OUT_OF_MEMORY;
}
- SmsHeader smsHeader = sms.getUserDataHeader();
- // See if message is partial or port addressed.
- if ((smsHeader == null) || (smsHeader.concatRef == null)) {
- // Message is not partial (not part of concatenated sequence).
- byte[][] pdus = new byte[1][];
- pdus[0] = sms.getPdu();
-
- if (smsHeader != null && smsHeader.portAddrs != null) {
- if (smsHeader.portAddrs.destPort == SmsHeader.PORT_WAP_PUSH) {
- return mWapPush.dispatchWapPdu(sms.getUserData());
- } else {
- // The message was sent to a port, so concoct a URI for it.
- dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
- }
- } else {
- // Normal short and non-port-addressed message, dispatch it.
- dispatchPdus(pdus);
- }
- return Activity.RESULT_OK;
- } else {
- // Process the message part.
- return processMessagePart(sms, smsHeader.concatRef, smsHeader.portAddrs);
- }
+ return dispatchNormalMessage(smsb);
}
/** {@inheritDoc} */
@@ -190,158 +211,20 @@
/** {@inheritDoc} */
@Override
- protected void sendMultipartText(String destinationAddress, String scAddress,
- ArrayList<String> parts, ArrayList<PendingIntent> sentIntents,
- ArrayList<PendingIntent> deliveryIntents) {
-
- int refNumber = getNextConcatenatedRef() & 0x00FF;
- int msgCount = parts.size();
- int encoding = android.telephony.SmsMessage.ENCODING_UNKNOWN;
-
- mRemainingMessages = msgCount;
-
- TextEncodingDetails[] encodingForParts = new TextEncodingDetails[msgCount];
- for (int i = 0; i < msgCount; i++) {
- TextEncodingDetails details = SmsMessage.calculateLength(parts.get(i), false);
- if (encoding != details.codeUnitSize
- && (encoding == android.telephony.SmsMessage.ENCODING_UNKNOWN
- || encoding == android.telephony.SmsMessage.ENCODING_7BIT)) {
- encoding = details.codeUnitSize;
- }
- encodingForParts[i] = details;
- }
-
- for (int i = 0; i < msgCount; i++) {
- SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
- concatRef.refNumber = refNumber;
- concatRef.seqNumber = i + 1; // 1-based sequence
- concatRef.msgCount = msgCount;
- // TODO: We currently set this to true since our messaging app will never
- // send more than 255 parts (it converts the message to MMS well before that).
- // However, we should support 3rd party messaging apps that might need 16-bit
- // references
- // Note: It's not sufficient to just flip this bit to true; it will have
- // ripple effects (several calculations assume 8-bit ref).
- concatRef.isEightBits = true;
- SmsHeader smsHeader = new SmsHeader();
- smsHeader.concatRef = concatRef;
- if (encoding == android.telephony.SmsMessage.ENCODING_7BIT) {
- smsHeader.languageTable = encodingForParts[i].languageTable;
- smsHeader.languageShiftTable = encodingForParts[i].languageShiftTable;
- }
-
- PendingIntent sentIntent = null;
- if (sentIntents != null && sentIntents.size() > i) {
- sentIntent = sentIntents.get(i);
- }
-
- PendingIntent deliveryIntent = null;
- if (deliveryIntents != null && deliveryIntents.size() > i) {
- deliveryIntent = deliveryIntents.get(i);
- }
-
- SmsMessage.SubmitPdu pdus = SmsMessage.getSubmitPdu(scAddress, destinationAddress,
- parts.get(i), deliveryIntent != null, SmsHeader.toByteArray(smsHeader),
- encoding, smsHeader.languageTable, smsHeader.languageShiftTable);
-
- sendRawPdu(pdus.encodedScAddress, pdus.encodedMessage, sentIntent, deliveryIntent);
- }
+ protected TextEncodingDetails calculateLength(CharSequence messageBody,
+ boolean use7bitOnly) {
+ return SmsMessage.calculateLength(messageBody, use7bitOnly);
}
- /**
- * Send a multi-part text based SMS which already passed SMS control check.
- *
- * It is the working function for sendMultipartText().
- *
- * @param destinationAddress the address to send the message to
- * @param scAddress is the service center address or null to use
- * the current default SMSC
- * @param parts an <code>ArrayList</code> of strings that, in order,
- * comprise the original message
- * @param sentIntents if not null, an <code>ArrayList</code> of
- * <code>PendingIntent</code>s (one for each message part) that is
- * broadcast when the corresponding message part has been sent.
- * The result code will be <code>Activity.RESULT_OK<code> for success,
- * or one of these errors:
- * <code>RESULT_ERROR_GENERIC_FAILURE</code>
- * <code>RESULT_ERROR_RADIO_OFF</code>
- * <code>RESULT_ERROR_NULL_PDU</code>.
- * @param deliveryIntents if not null, an <code>ArrayList</code> of
- * <code>PendingIntent</code>s (one for each message part) that is
- * broadcast when the corresponding message part has been delivered
- * to the recipient. The raw pdu of the status report is in the
- * extended data ("pdu").
- */
- private void sendMultipartTextWithPermit(String destinationAddress,
- String scAddress, ArrayList<String> parts,
- ArrayList<PendingIntent> sentIntents,
- ArrayList<PendingIntent> deliveryIntents) {
-
- // check if in service
- int ss = mPhone.getServiceState().getState();
- if (ss != ServiceState.STATE_IN_SERVICE) {
- for (int i = 0, count = parts.size(); i < count; i++) {
- PendingIntent sentIntent = null;
- if (sentIntents != null && sentIntents.size() > i) {
- sentIntent = sentIntents.get(i);
- }
- SmsTracker tracker = SmsTrackerFactory(null, sentIntent, null);
- handleNotInService(ss, tracker);
- }
- return;
- }
-
- int refNumber = getNextConcatenatedRef() & 0x00FF;
- int msgCount = parts.size();
- int encoding = android.telephony.SmsMessage.ENCODING_UNKNOWN;
-
- mRemainingMessages = msgCount;
-
- TextEncodingDetails[] encodingForParts = new TextEncodingDetails[msgCount];
- for (int i = 0; i < msgCount; i++) {
- TextEncodingDetails details = SmsMessage.calculateLength(parts.get(i), false);
- if (encoding != details.codeUnitSize
- && (encoding == android.telephony.SmsMessage.ENCODING_UNKNOWN
- || encoding == android.telephony.SmsMessage.ENCODING_7BIT)) {
- encoding = details.codeUnitSize;
- }
- encodingForParts[i] = details;
- }
-
- for (int i = 0; i < msgCount; i++) {
- SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
- concatRef.refNumber = refNumber;
- concatRef.seqNumber = i + 1; // 1-based sequence
- concatRef.msgCount = msgCount;
- concatRef.isEightBits = false;
- SmsHeader smsHeader = new SmsHeader();
- smsHeader.concatRef = concatRef;
- if (encoding == android.telephony.SmsMessage.ENCODING_7BIT) {
- smsHeader.languageTable = encodingForParts[i].languageTable;
- smsHeader.languageShiftTable = encodingForParts[i].languageShiftTable;
- }
-
- PendingIntent sentIntent = null;
- if (sentIntents != null && sentIntents.size() > i) {
- sentIntent = sentIntents.get(i);
- }
-
- PendingIntent deliveryIntent = null;
- if (deliveryIntents != null && deliveryIntents.size() > i) {
- deliveryIntent = deliveryIntents.get(i);
- }
-
- SmsMessage.SubmitPdu pdus = SmsMessage.getSubmitPdu(scAddress, destinationAddress,
- parts.get(i), deliveryIntent != null, SmsHeader.toByteArray(smsHeader),
- encoding, smsHeader.languageTable, smsHeader.languageShiftTable);
-
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("smsc", pdus.encodedScAddress);
- map.put("pdu", pdus.encodedMessage);
-
- SmsTracker tracker = SmsTrackerFactory(map, sentIntent, deliveryIntent);
- sendSms(tracker);
- }
+ /** {@inheritDoc} */
+ @Override
+ protected void sendNewSubmitPdu(String destinationAddress, String scAddress,
+ String message, SmsHeader smsHeader, int encoding,
+ PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart) {
+ SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(scAddress, destinationAddress,
+ message, deliveryIntent != null, SmsHeader.toByteArray(smsHeader),
+ encoding, smsHeader.languageTable, smsHeader.languageShiftTable);
+ sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent);
}
/** {@inheritDoc} */
@@ -353,45 +236,16 @@
byte pdu[] = (byte[]) map.get("pdu");
Message reply = obtainMessage(EVENT_SEND_SMS_COMPLETE, tracker);
- mCm.sendSMS(IccUtils.bytesToHexString(smsc),
- IccUtils.bytesToHexString(pdu), reply);
- }
-
- /**
- * Send the multi-part SMS based on multipart Sms tracker
- *
- * @param tracker holds the multipart Sms tracker ready to be sent
- */
- @Override
- protected void sendMultipartSms (SmsTracker tracker) {
- ArrayList<String> parts;
- ArrayList<PendingIntent> sentIntents;
- ArrayList<PendingIntent> deliveryIntents;
-
- HashMap<String, Object> map = tracker.mData;
-
- String destinationAddress = (String) map.get("destination");
- String scAddress = (String) map.get("scaddress");
-
- parts = (ArrayList<String>) map.get("parts");
- sentIntents = (ArrayList<PendingIntent>) map.get("sentIntents");
- deliveryIntents = (ArrayList<PendingIntent>) map.get("deliveryIntents");
-
- sendMultipartTextWithPermit(destinationAddress,
- scAddress, parts, sentIntents, deliveryIntents);
-
+ mCm.sendSMS(IccUtils.bytesToHexString(smsc), IccUtils.bytesToHexString(pdu), reply);
}
/** {@inheritDoc} */
@Override
- protected void acknowledgeLastIncomingSms(boolean success, int result, Message response){
- // FIXME unit test leaves cm == null. this should change
- if (mCm != null) {
- mCm.acknowledgeLastIncomingGsmSms(success, resultToCause(result), response);
- }
+ protected void acknowledgeLastIncomingSms(boolean success, int result, Message response) {
+ mCm.acknowledgeLastIncomingGsmSms(success, resultToCause(result), response);
}
- private int resultToCause(int rc) {
+ private static int resultToCause(int rc) {
switch (rc) {
case Activity.RESULT_OK:
case Intents.RESULT_SMS_HANDLED:
@@ -485,10 +339,12 @@
private final HashMap<SmsCbConcatInfo, byte[][]> mSmsCbPageMap =
new HashMap<SmsCbConcatInfo, byte[][]>();
- @Override
- protected void handleBroadcastSms(AsyncResult ar) {
+ /**
+ * Handle 3GPP format SMS-CB message.
+ * @param ar the AsyncResult containing the received PDUs
+ */
+ private void handleBroadcastSms(AsyncResult ar) {
try {
- byte[][] pdus = null;
byte[] receivedPdu = (byte[])ar.result;
if (false) {
@@ -507,10 +363,11 @@
SmsCbHeader header = new SmsCbHeader(receivedPdu);
String plmn = SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC);
- GsmCellLocation cellLocation = (GsmCellLocation)mGsmPhone.getCellLocation();
+ GsmCellLocation cellLocation = (GsmCellLocation) mPhone.getCellLocation();
int lac = cellLocation.getLac();
int cid = cellLocation.getCid();
+ byte[][] pdus;
if (header.nrOfPages > 1) {
// Multi-page message
SmsCbConcatInfo concatInfo = new SmsCbConcatInfo(header, plmn, lac, cid);
@@ -563,5 +420,4 @@
Log.e(TAG, "Error in decoding SMS CB pdu", e);
}
}
-
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index d3645fa..eea2780 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -846,6 +846,7 @@
if (operatorNumeric == null) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
+ mGotCountryCode = false;
} else {
String iso = "";
try{
diff --git a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
index 73c319c..5d6f181 100755
--- a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
+++ b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
@@ -38,6 +38,7 @@
import com.android.internal.telephony.MccTable;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneBase;
+import com.android.internal.telephony.SmsMessageBase;
import java.util.ArrayList;
@@ -1160,6 +1161,15 @@
}
}
+ /**
+ * Dispatch 3GPP format message. Overridden for CDMA/LTE phones by
+ * {@link com.android.internal.telephony.cdma.CdmaLteUiccRecords}
+ * to send messages to the secondary 3GPP format SMS dispatcher.
+ */
+ protected int dispatchGsmMessage(SmsMessageBase message) {
+ return phone.mSMS.dispatchMessage(message);
+ }
+
private void handleSms(byte[] ba) {
if (ba[0] != 0)
Log.d("ENF", "status : " + ba[0]);
@@ -1175,7 +1185,7 @@
System.arraycopy(ba, 1, pdu, 0, n - 1);
SmsMessage message = SmsMessage.createFromPdu(pdu);
- phone.mSMS.dispatchMessage(message);
+ dispatchGsmMessage(message);
}
}
@@ -1201,7 +1211,7 @@
System.arraycopy(ba, 1, pdu, 0, n - 1);
SmsMessage message = SmsMessage.createFromPdu(pdu);
- phone.mSMS.dispatchMessage(message);
+ dispatchGsmMessage(message);
// 3GPP TS 51.011 v5.0.0 (20011-12) 10.5.3
// 1 == "received by MS from network; message read"
diff --git a/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java b/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java
index 3784e7c..2da9642 100644
--- a/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java
@@ -137,14 +137,6 @@
}
/** @hide */
- public static SmsMessage newFromCMTI(String line) {
- // the thinking here is not to read the message immediately
- // FTA test case
- Log.e(LOG_TAG, "newFromCMTI: not yet supported");
- return null;
- }
-
- /** @hide */
public static SmsMessage newFromCDS(String line) {
try {
SmsMessage msg = new SmsMessage();
@@ -157,15 +149,6 @@
}
/**
- * Note: This functionality is currently not supported in GSM mode.
- * @hide
- */
- public static SmsMessageBase newFromParcel(Parcel p){
- Log.w(LOG_TAG, "newFromParcel: is not supported in GSM mode.");
- return null;
- }
-
- /**
* Create an SmsMessage from an SMS EF record.
*
* @param index Index of SMS record. This should be index in ArrayList
@@ -317,8 +300,8 @@
return null;
}
// TP-Data-Coding-Scheme
- // Class 3, UCS-2 encoding, uncompressed
- bo.write(0x0b);
+ // UCS-2 encoding, uncompressed
+ bo.write(0x08);
}
// (no TP-Validity-Period)
diff --git a/test-runner/src/android/test/mock/MockContentProvider.java b/test-runner/src/android/test/mock/MockContentProvider.java
index b63ff3d..e0ce322 100644
--- a/test-runner/src/android/test/mock/MockContentProvider.java
+++ b/test-runner/src/android/test/mock/MockContentProvider.java
@@ -21,16 +21,12 @@
import android.content.ContentProviderResult;
import android.content.ContentValues;
import android.content.Context;
-import android.content.EntityIterator;
import android.content.IContentProvider;
import android.content.OperationApplicationException;
import android.content.pm.PathPermission;
import android.content.pm.ProviderInfo;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
-import android.database.CursorWindow;
-import android.database.IBulkCursor;
-import android.database.IContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
@@ -55,84 +51,75 @@
* IContentProvider that directs all calls to this MockContentProvider.
*/
private class InversionIContentProvider implements IContentProvider {
- @SuppressWarnings("unused")
+ @Override
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
throws RemoteException, OperationApplicationException {
return MockContentProvider.this.applyBatch(operations);
}
- @SuppressWarnings("unused")
+ @Override
public int bulkInsert(Uri url, ContentValues[] initialValues) throws RemoteException {
return MockContentProvider.this.bulkInsert(url, initialValues);
}
- @SuppressWarnings("unused")
- public IBulkCursor bulkQuery(Uri url, String[] projection, String selection,
- String[] selectionArgs, String sortOrder, IContentObserver observer,
- CursorWindow window) throws RemoteException {
- throw new UnsupportedOperationException("Must not come here");
- }
-
- @SuppressWarnings("unused")
+ @Override
public int delete(Uri url, String selection, String[] selectionArgs)
throws RemoteException {
return MockContentProvider.this.delete(url, selection, selectionArgs);
}
- @SuppressWarnings("unused")
+ @Override
public String getType(Uri url) throws RemoteException {
return MockContentProvider.this.getType(url);
}
- @SuppressWarnings("unused")
+ @Override
public Uri insert(Uri url, ContentValues initialValues) throws RemoteException {
return MockContentProvider.this.insert(url, initialValues);
}
- @SuppressWarnings("unused")
+ @Override
public AssetFileDescriptor openAssetFile(Uri url, String mode) throws RemoteException,
FileNotFoundException {
return MockContentProvider.this.openAssetFile(url, mode);
}
- @SuppressWarnings("unused")
+ @Override
public ParcelFileDescriptor openFile(Uri url, String mode) throws RemoteException,
FileNotFoundException {
return MockContentProvider.this.openFile(url, mode);
}
- @SuppressWarnings("unused")
+ @Override
public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
String sortOrder) throws RemoteException {
return MockContentProvider.this.query(url, projection, selection,
selectionArgs, sortOrder);
}
- @SuppressWarnings("unused")
+ @Override
public int update(Uri url, ContentValues values, String selection, String[] selectionArgs)
throws RemoteException {
return MockContentProvider.this.update(url, values, selection, selectionArgs);
}
- /**
- * @hide
- */
- @SuppressWarnings("unused")
+ @Override
public Bundle call(String method, String request, Bundle args)
throws RemoteException {
return MockContentProvider.this.call(method, request, args);
}
+ @Override
public IBinder asBinder() {
throw new UnsupportedOperationException();
}
- @SuppressWarnings("unused")
+ @Override
public String[] getStreamTypes(Uri url, String mimeTypeFilter) throws RemoteException {
return MockContentProvider.this.getStreamTypes(url, mimeTypeFilter);
}
- @SuppressWarnings("unused")
+ @Override
public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, Bundle opts)
throws RemoteException, FileNotFoundException {
return MockContentProvider.this.openTypedAssetFile(url, mimeType, opts);
diff --git a/test-runner/src/android/test/mock/MockIContentProvider.java b/test-runner/src/android/test/mock/MockIContentProvider.java
index 183be41..b7733a4 100644
--- a/test-runner/src/android/test/mock/MockIContentProvider.java
+++ b/test-runner/src/android/test/mock/MockIContentProvider.java
@@ -23,9 +23,6 @@
import android.content.IContentProvider;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
-import android.database.CursorWindow;
-import android.database.IBulkCursor;
-import android.database.IContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
@@ -47,12 +44,6 @@
throw new UnsupportedOperationException("unimplemented mock method");
}
- public IBulkCursor bulkQuery(Uri url, String[] projection, String selection,
- String[] selectionArgs, String sortOrder, IContentObserver observer,
- CursorWindow window) {
- throw new UnsupportedOperationException("unimplemented mock method");
- }
-
@SuppressWarnings("unused")
public int delete(Uri url, String selection, String[] selectionArgs)
throws RemoteException {
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index 945b8f2..c0ba8cf 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -286,23 +286,11 @@
mWebView.stopLoading();
}
-
- //TODO: remove. this is temporary for bug investigation
- @Override
- public void finish() {
- Exception e = new Exception("finish() call stack");
- Log.d(LOGTAG, "finish stack trace", e);
- super.finish();
- }
-
@Override
protected void onDestroy() {
- //TODO: remove exception log. this is temporary for bug investigation
- Exception e = new Exception("onDestroy stack trace");
- Log.d(LOGTAG, "onDestroy stack trace", e);
+ super.onDestroy();
mWebView.destroy();
mWebView = null;
- super.onDestroy();
}
@Override
diff --git a/tests/GridLayoutTest/AndroidManifest.xml b/tests/GridLayoutTest/AndroidManifest.xml
index 1b72357..141e8fa 100644
--- a/tests/GridLayoutTest/AndroidManifest.xml
+++ b/tests/GridLayoutTest/AndroidManifest.xml
@@ -35,20 +35,6 @@
</intent-filter>
</activity>
- <activity android:name="Activity2" android:label="Activity2">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
-
- <activity android:name="Activity3" android:label="Activity3">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
-
<activity android:name="Activity4" android:label="Activity4">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
diff --git a/tests/GridLayoutTest/res/layout/grid3.xml b/tests/GridLayoutTest/res/layout/grid3.xml
deleted file mode 100644
index 0e53613..0000000
--- a/tests/GridLayoutTest/res/layout/grid3.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
-
- android:layout_width="match_parent"
- android:layout_height="match_parent"
-
- android:useDefaultMargins="true"
- android:alignmentMode="alignBounds"
- android:rowOrderPreserved="false"
-
- android:columnCount="4"
- >
-
- <TextView
- android:text="Email setup"
- android:textSize="32dip"
-
- android:layout_columnSpan="4"
- android:layout_gravity="center_horizontal"
- />
-
- <TextView
- android:text="You can configure email in just a few steps:"
- android:textSize="16dip"
-
- android:layout_columnSpan="4"
- android:layout_gravity="left"
- />
-
- <TextView
- android:text="Email address:"
-
- android:layout_gravity="right"
- />
-
- <EditText
- android:ems="10"
- />
-
- <TextView
- android:text="Password:"
-
- android:layout_column="0"
- android:layout_gravity="right"
- />
-
- <EditText
- android:ems="8"
- />
-
- <Space
- android:layout_row="2"
- android:layout_rowSpan="3"
- android:layout_column="2"
- android:layout_gravity="fill"
- />
-
- <Button
- android:text="Manual setup"
-
- android:layout_row="5"
- android:layout_column="3"
- />
-
- <Button
- android:text="Next"
-
- android:layout_column="3"
- android:layout_gravity="fill_horizontal"
- />
-</GridLayout>
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
deleted file mode 100644
index 8974f37..0000000
--- a/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
+++ /dev/null
@@ -1,116 +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.test.layout;
-
-import android.app.Activity;
-import android.content.Context;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.GridLayout;
-import android.widget.Space;
-import android.widget.TextView;
-
-import static android.text.InputType.TYPE_CLASS_TEXT;
-import static android.view.inputmethod.EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
-import static android.view.inputmethod.EditorInfo.TYPE_TEXT_VARIATION_PASSWORD;
-import static android.widget.GridLayout.*;
-
-public class Activity2 extends Activity {
-
- public static View create(Context context) {
- GridLayout p = new GridLayout(context);
- p.setUseDefaultMargins(true);
- p.setAlignmentMode(ALIGN_BOUNDS);
- p.setRowOrderPreserved(false);
-
- Spec row1 = spec(0);
- Spec row2 = spec(1);
- Spec row3 = spec(2, BASELINE);
- Spec row4 = spec(3, BASELINE);
- Spec row5 = spec(2, 3, FILL); // allow the last two rows to overlap the middle two
- Spec row6 = spec(5);
- Spec row7 = spec(6);
-
- Spec col1a = spec(0, 4, CENTER);
- Spec col1b = spec(0, 4, LEFT);
- Spec col1c = spec(0, RIGHT);
- Spec col2 = spec(1, LEFT);
- Spec col3 = spec(2, FILL);
- Spec col4a = spec(3);
- Spec col4b = spec(3, FILL);
-
- {
- TextView c = new TextView(context);
- c.setTextSize(32);
- c.setText("Email setup");
- p.addView(c, new LayoutParams(row1, col1a));
- }
- {
- TextView c = new TextView(context);
- c.setTextSize(16);
- c.setText("You can configure email in just a few steps:");
- p.addView(c, new LayoutParams(row2, col1b));
- }
- {
- TextView c = new TextView(context);
- c.setText("Email address:");
- p.addView(c, new LayoutParams(row3, col1c));
- }
- {
- EditText c = new EditText(context);
- c.setEms(10);
- c.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
- p.addView(c, new LayoutParams(row3, col2));
- }
- {
- TextView c = new TextView(context);
- c.setText("Password:");
- p.addView(c, new LayoutParams(row4, col1c));
- }
- {
- TextView c = new EditText(context);
- c.setEms(8);
- c.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
- p.addView(c, new LayoutParams(row4, col2));
- }
- {
- Space c = new Space(context);
- LayoutParams lp = new LayoutParams(row5, col3);
- p.addView(c, lp);
- }
- {
- Button c = new Button(context);
- c.setText("Manual setup");
- p.addView(c, new LayoutParams(row6, col4a));
- }
- {
- Button c = new Button(context);
- c.setText("Next");
- p.addView(c, new LayoutParams(row7, col4b));
- }
-
- return p;
- }
-
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(create(getBaseContext()));
- }
-
-}
\ No newline at end of file
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity3.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity3.java
deleted file mode 100644
index fc0b382..0000000
--- a/tests/GridLayoutTest/src/com/android/test/layout/Activity3.java
+++ /dev/null
@@ -1,27 +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.test.layout;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class Activity3 extends Activity {
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.grid3);
- }
-}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java
index 3232eedc..414ae0d 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java
@@ -22,9 +22,11 @@
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
import android.opengl.GLUtils;
import android.os.Bundle;
+import android.os.Environment;
import android.util.Log;
import android.view.Gravity;
import android.view.TextureView;
@@ -39,6 +41,7 @@
import javax.microedition.khronos.egl.EGLSurface;
import javax.microedition.khronos.opengles.GL;
import java.io.BufferedOutputStream;
+import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -65,7 +68,8 @@
Bitmap b = mTextureView.getBitmap(800, 800);
BufferedOutputStream out = null;
try {
- out = new BufferedOutputStream(new FileOutputStream("/sdcard/out.png"));
+ File dump = new File(Environment.getExternalStorageDirectory(), "out.png");
+ out = new BufferedOutputStream(new FileOutputStream(dump));
b.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (FileNotFoundException e) {
e.printStackTrace();
@@ -168,10 +172,10 @@
private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
private final float[] mTriangleVerticesData = {
// X, Y, Z, U, V
- -1.0f, -1.0f, 0, 0.f, 0.f,
- 1.0f, -1.0f, 0, 1.f, 0.f,
- -1.0f, 1.0f, 0, 0.f, 1.f,
- 1.0f, 1.0f, 0, 1.f, 1.f,
+ -1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
+ 1.0f, -1.0f, 0.0f, 1.0f, 0.0f,
+ -1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
+ 1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
};
@Override
@@ -212,8 +216,6 @@
while (!mFinished) {
checkCurrent();
- Log.d(LOG_TAG, "Rendering frame");
-
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
checkGlError();
@@ -237,7 +239,7 @@
checkEglError();
try {
- Thread.sleep(20);
+ Thread.sleep(2000);
} catch (InterruptedException e) {
// Ignore
}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java
index fcb57d9..0f4c668 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java
@@ -17,16 +17,23 @@
package com.android.test.hwui;
import android.app.Activity;
+import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.os.Bundle;
+import android.os.Environment;
import android.view.Gravity;
+import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
@SuppressWarnings({"UnusedDeclaration"})
@@ -44,6 +51,26 @@
mTextureView = new TextureView(this);
mTextureView.setSurfaceTextureListener(this);
+ mTextureView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Bitmap b = mTextureView.getBitmap(800, 800);
+ BufferedOutputStream out = null;
+ try {
+ File dump = new File(Environment.getExternalStorageDirectory(), "out.png");
+ out = new BufferedOutputStream(new FileOutputStream(dump));
+ b.compress(Bitmap.CompressFormat.PNG, 100, out);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ if (out != null) try {
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ });
Button button = new Button(this);
button.setText("Remove/Add");
@@ -73,6 +100,8 @@
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mCamera = Camera.open();
+ mCamera.setDisplayOrientation(getCameraOrientation());
+
Camera.Size previewSize = mCamera.getParameters().getPreviewSize();
mTextureView.setLayoutParams(new FrameLayout.LayoutParams(
previewSize.width, previewSize.height, Gravity.CENTER));
@@ -86,6 +115,34 @@
mCamera.startPreview();
}
+ private int getCameraOrientation() {
+ Camera.CameraInfo info = new Camera.CameraInfo();
+ for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
+ Camera.getCameraInfo(i, info);
+ if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) break;
+ }
+
+ int rotation = getWindowManager().getDefaultDisplay().getRotation();
+ int degrees = 0;
+
+ switch (rotation) {
+ case Surface.ROTATION_0:
+ degrees = 0;
+ break;
+ case Surface.ROTATION_90:
+ degrees = 90;
+ break;
+ case Surface.ROTATION_180:
+ degrees = 180;
+ break;
+ case Surface.ROTATION_270:
+ degrees = 270;
+ break;
+ }
+
+ return (info.orientation - degrees + 360) % 360;
+ }
+
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// Ignored, the Camera does all the work for us
diff --git a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs
index b77ccb4..42b1cf1 100644
--- a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs
+++ b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs
@@ -105,8 +105,8 @@
rsgMeshComputeBoundingBox(info->mMesh,
&minX, &minY, &minZ,
&maxX, &maxY, &maxZ);
- info->bBoxMin = (minX, minY, minZ);
- info->bBoxMax = (maxX, maxY, maxZ);
+ info->bBoxMin = (float3){minX, minY, minZ};
+ info->bBoxMax = (float3){maxX, maxY, maxZ};
gLookAt += (info->bBoxMin + info->bBoxMax)*0.5f;
}
gLookAt = gLookAt / (float)size;
diff --git a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs
index d44fd2b..05ef3ac 100644
--- a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs
+++ b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs
@@ -104,8 +104,8 @@
rsgMeshComputeBoundingBox(info->mMesh,
&minX, &minY, &minZ,
&maxX, &maxY, &maxZ);
- info->bBoxMin = (minX, minY, minZ);
- info->bBoxMax = (maxX, maxY, maxZ);
+ info->bBoxMin = (float3){minX, minY, minZ};
+ info->bBoxMax = (float3){maxX, maxY, maxZ};
gLookAt += (info->bBoxMin + info->bBoxMax)*0.5f;
}
gLookAt = gLookAt / (float)size;
diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
index 5df018e..c3ac22c 100644
--- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
@@ -423,7 +423,7 @@
}
try {
- mWm.freezeRotation();
+ mWm.freezeRotation(-1);
mWm.getSwitchState(0);
fail("IWindowManager.freezeRotation did not throw SecurityException as"
+ " expected");
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 178e7fd..413a2dc 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -368,6 +368,7 @@
REQUIRES_SMALLEST_WIDTH_DP_ATTR = 0x01010364,
COMPATIBLE_WIDTH_LIMIT_DP_ATTR = 0x01010365,
LARGEST_WIDTH_LIMIT_DP_ATTR = 0x01010366,
+ PUBLIC_KEY_ATTR = 0x010103a6,
};
const char *getComponentName(String8 &pkgName, String8 &componentName) {
@@ -1021,6 +1022,15 @@
} else if (tag == "compatible-screens") {
printCompatibleScreens(tree);
depth--;
+ } else if (tag == "package-verifier") {
+ String8 name = getAttribute(tree, NAME_ATTR, &error);
+ if (name != "" && error == "") {
+ String8 publicKey = getAttribute(tree, PUBLIC_KEY_ATTR, &error);
+ if (publicKey != "" && error == "") {
+ printf("package-verifier: name='%s' publicKey='%s'\n",
+ name.string(), publicKey.string());
+ }
+ }
}
} else if (depth == 3 && withinApplication) {
withinActivity = false;
diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
index 413894b..c9d615c 100644
--- a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
@@ -25,7 +25,7 @@
import android.util.TypedValue;
/**
- * Delegate used to provide new implementation of a select few methods of {@link Theme}
+ * Delegate used to provide new implementation of a select few methods of {@link Resources$Theme}
*
* Through the layoutlib_create tool, the original methods of Theme have been replaced
* by calls to methods of the same name in this delegate class.
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index e60a61c..1523823 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -1166,7 +1166,7 @@
if (mTextScaleX != 1.0 || mTextSkewX != 0) {
// TODO: support skew
info.mFont = info.mFont.deriveFont(new AffineTransform(
- mTextScaleX, mTextSkewX, 0, 0, 1, 0));
+ mTextScaleX, mTextSkewX, 0, 1, 0, 0));
}
info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont);
diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java
index 2745770..adad2ac 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java
@@ -16,6 +16,9 @@
package android.graphics;
+/**
+ * Class allowing access to package-protected methods/fields.
+ */
public class Typeface_Accessor {
public static void resetDefaults() {
diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
index 0f084f7..2414d70 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
@@ -25,8 +25,8 @@
import android.content.res.AssetManager;
import java.awt.Font;
+import java.io.File;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
/**
@@ -44,13 +44,14 @@
*/
public final class Typeface_Delegate {
+ private static final String SYSTEM_FONTS = "/system/fonts/";
+
// ---- delegate manager ----
private static final DelegateManager<Typeface_Delegate> sManager =
new DelegateManager<Typeface_Delegate>(Typeface_Delegate.class);
// ---- delegate helper data ----
private static final String DEFAULT_FAMILY = "sans-serif";
- private static final int[] STYLE_BUFFER = new int[1];
private static FontLoader sFontLoader;
private static final List<Typeface_Delegate> sPostInitDelegate =
@@ -145,9 +146,31 @@
@LayoutlibDelegate
/*package*/ static synchronized int nativeCreateFromFile(String path) {
- Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
- "Typeface.createFromFile() is not supported.", null /*throwable*/, null /*data*/);
- return 0;
+ if (path.startsWith(SYSTEM_FONTS) ) {
+ String relativePath = path.substring(SYSTEM_FONTS.length());
+ File f = new File(sFontLoader.getOsFontsLocation(), relativePath);
+
+ try {
+ Font font = Font.createFont(Font.TRUETYPE_FONT, f);
+ if (font != null) {
+ Typeface_Delegate newDelegate = new Typeface_Delegate(font);
+ return sManager.addNewDelegate(newDelegate);
+ }
+ } catch (Exception e) {
+ Bridge.getLog().fidelityWarning(LayoutLog.TAG_BROKEN,
+ String.format("Unable to load font %1$s", relativePath),
+ null /*throwable*/, null /*data*/);
+ }
+ } else {
+ Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
+ "Typeface.createFromFile() can only work with platform fonts located in " +
+ SYSTEM_FONTS,
+ null /*throwable*/, null /*data*/);
+ }
+
+
+ // return a copy of the base font
+ return nativeCreate(null, 0);
}
@LayoutlibDelegate
@@ -177,15 +200,17 @@
mStyle = style;
}
+ private Typeface_Delegate(Font font) {
+ mFamily = font.getFamily();
+ mStyle = Typeface.NORMAL;
+
+ mFonts = sFontLoader.getFallbackFonts(mStyle);
+
+ // insert the font glyph first.
+ mFonts.add(0, font);
+ }
+
private void init() {
- STYLE_BUFFER[0] = mStyle;
- Font font = sFontLoader.getFont(mFamily, STYLE_BUFFER);
- if (font != null) {
- List<Font> list = new ArrayList<Font>();
- list.add(font);
- list.addAll(sFontLoader.getFallBackFonts());
- mFonts = Collections.unmodifiableList(list);
- mStyle = STYLE_BUFFER[0];
- }
+ mFonts = sFontLoader.getFont(mFamily, mStyle);
}
}
diff --git a/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java b/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java
index ad95fcc..2961f97 100644
--- a/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java
+++ b/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java
@@ -15,6 +15,9 @@
*/
package android.os;
+/**
+ * Class allowing access to package-protected methods/fields.
+ */
public class Looper_Accessor {
public static void cleanupThread() {
diff --git a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java
index e3778b1..96de51c 100644
--- a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java
+++ b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java
@@ -22,6 +22,9 @@
import android.os.Handler;
import android.view.View.AttachInfo;
+/**
+ * Class allowing access to package-protected methods/fields.
+ */
public class AttachInfo_Accessor {
public static void setAttachInfo(View view) {
diff --git a/tools/layoutlib/bridge/src/android/view/Display_Delegate.java b/tools/layoutlib/bridge/src/android/view/Display_Delegate.java
index 9732530..8868c65 100644
--- a/tools/layoutlib/bridge/src/android/view/Display_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/Display_Delegate.java
@@ -47,14 +47,14 @@
@LayoutlibDelegate
/** @hide special for when we are faking the screen size. */
- /*package*/ static int getRawWidth(Display theDisplay) {
+ /*package*/ static int getRawWidthNative(Display theDisplay) {
// same as real since we're not faking compatibility mode.
return RenderAction.getCurrentContext().getIWindowManager().getMetrics().widthPixels;
}
@LayoutlibDelegate
/** @hide special for when we are faking the screen size. */
- /*package*/ static int getRawHeight(Display theDisplay) {
+ /*package*/ static int getRawHeightNative(Display theDisplay) {
// same as real since we're not faking compatibility mode.
return RenderAction.getCurrentContext().getIWindowManager().getMetrics().heightPixels;
}
diff --git a/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java b/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java
index 01db34e..c3533e0 100644
--- a/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java
+++ b/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java
@@ -16,6 +16,9 @@
package android.view;
+/**
+ * Class allowing access to package-protected methods/fields.
+ */
public class ViewConfiguration_Accessor {
public static void clearConfigurations() {
diff --git a/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java
index 875336a..7a6e52e 100644
--- a/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java
+++ b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java
@@ -16,6 +16,9 @@
package android.view.inputmethod;
+/**
+ * Class allowing access to package-protected methods/fields.
+ */
public class InputMethodManager_Accessor {
public static void resetInstance() {
diff --git a/tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java b/tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java
new file mode 100644
index 0000000..9efdcaf
--- /dev/null
+++ b/tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java
@@ -0,0 +1,101 @@
+/*
+ * 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.textservice;
+
+import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
+
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.view.textservice.SpellCheckerInfo;
+import android.view.textservice.SpellCheckerSubtype;
+
+
+/**
+ * Delegate used to provide new implementation of a select few methods of
+ * {@link ITextServicesManager$Stub}
+ *
+ * Through the layoutlib_create tool, the original methods of Stub have been replaced
+ * by calls to methods of the same name in this delegate class.
+ *
+ */
+public class ITextServicesManager_Stub_Delegate {
+
+ @LayoutlibDelegate
+ public static ITextServicesManager asInterface(IBinder obj) {
+ // ignore the obj and return a fake interface implementation
+ return new FakeTextServicesManager();
+ }
+
+ private static class FakeTextServicesManager implements ITextServicesManager {
+
+ public void finishSpellCheckerService(ISpellCheckerSessionListener arg0)
+ throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public SpellCheckerInfo getCurrentSpellChecker(String arg0) throws RemoteException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public SpellCheckerSubtype getCurrentSpellCheckerSubtype(String arg0, boolean arg1)
+ throws RemoteException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public SpellCheckerInfo[] getEnabledSpellCheckers() throws RemoteException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void getSpellCheckerService(String arg0, String arg1,
+ ITextServicesSessionListener arg2, ISpellCheckerSessionListener arg3, Bundle arg4)
+ throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public boolean isSpellCheckerEnabled() throws RemoteException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void setCurrentSpellChecker(String arg0, String arg1) throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setCurrentSpellCheckerSubtype(String arg0, int arg1) throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setSpellCheckerEnabled(boolean arg0) throws RemoteException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public IBinder asBinder() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ }
+ }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
index 3835378..c91a3bf 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
@@ -23,9 +23,6 @@
import android.content.OperationApplicationException;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
-import android.database.CursorWindow;
-import android.database.IBulkCursor;
-import android.database.IContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
@@ -41,78 +38,84 @@
* TODO: never return null when the method is not supposed to. Return fake data instead.
*/
public final class BridgeContentProvider implements IContentProvider {
-
+ @Override
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> arg0)
throws RemoteException, OperationApplicationException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public int bulkInsert(Uri arg0, ContentValues[] arg1) throws RemoteException {
// TODO Auto-generated method stub
return 0;
}
- public IBulkCursor bulkQuery(Uri arg0, String[] arg1, String arg2, String[] arg3,
- String arg4, IContentObserver arg5, CursorWindow arg6) throws RemoteException {
- // TODO Auto-generated method stub
- return null;
- }
-
+ @Override
public Bundle call(String arg0, String arg1, Bundle arg2) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public int delete(Uri arg0, String arg1, String[] arg2) throws RemoteException {
// TODO Auto-generated method stub
return 0;
}
+ @Override
public String getType(Uri arg0) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public Uri insert(Uri arg0, ContentValues arg1) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public AssetFileDescriptor openAssetFile(Uri arg0, String arg1) throws RemoteException,
FileNotFoundException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public ParcelFileDescriptor openFile(Uri arg0, String arg1) throws RemoteException,
FileNotFoundException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4)
throws RemoteException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3)
throws RemoteException {
// TODO Auto-generated method stub
return 0;
}
+ @Override
public IBinder asBinder() {
// TODO Auto-generated method stub
return null;
}
+ @Override
public String[] getStreamTypes(Uri arg0, String arg1) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
+ @Override
public AssetFileDescriptor openTypedAssetFile(Uri arg0, String arg1, Bundle arg2)
throws RemoteException, FileNotFoundException {
// TODO Auto-generated method stub
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 0453a5e..fbbcbc1 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -67,6 +67,7 @@
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
+import android.view.textservice.TextServicesManager;
import java.io.File;
import java.io.FileInputStream;
@@ -414,6 +415,11 @@
return mBridgeInflater;
}
+ if (TEXT_SERVICES_MANAGER_SERVICE.equals(service)) {
+ // we need to return a valid service to avoid NPE
+ return TextServicesManager.getInstance();
+ }
+
// AutoCompleteTextView and MultiAutoCompleteTextView want a window
// service. We don't have any but it's not worth an exception.
if (WINDOW_SERVICE.equals(service)) {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java
index 8e673ad..e13380e 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java
@@ -85,7 +85,8 @@
// pass for now.
}
- public void dispatchSystemUiVisibilityChanged(int visibility) {
+ public void dispatchSystemUiVisibilityChanged(int seq, int globalUi,
+ int localValue, int localChanges) {
// pass for now.
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
index 5b57266..44bdff3 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
@@ -124,7 +124,7 @@
}
- public void freezeRotation() throws RemoteException {
+ public void freezeRotation(int arg0) throws RemoteException {
// TODO Auto-generated method stub
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
index ab8c4ec..1d97e15 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
@@ -37,14 +37,14 @@
*/
public final class BridgeWindowSession implements IWindowSession {
- public int add(IWindow arg0, LayoutParams arg1, int arg2, Rect arg3,
+ public int add(IWindow arg0, int seq, LayoutParams arg1, int arg2, Rect arg3,
InputChannel outInputchannel)
throws RemoteException {
// pass for now.
return 0;
}
- public int addWithoutInputChannel(IWindow arg0, LayoutParams arg1, int arg2, Rect arg3)
+ public int addWithoutInputChannel(IWindow arg0, int seq, LayoutParams arg1, int arg2, Rect arg3)
throws RemoteException {
// pass for now.
return 0;
@@ -78,7 +78,7 @@
return null;
}
- public int relayout(IWindow arg0, LayoutParams arg1, int arg2, int arg3, int arg4,
+ public int relayout(IWindow arg0, int seq, LayoutParams arg1, int arg2, int arg3, int arg4,
boolean arg4_5, Rect arg5, Rect arg6, Rect arg7, Configuration arg7b, Surface arg8)
throws RemoteException {
// pass for now.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java
index f62fad2..081ce67 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java
@@ -23,17 +23,13 @@
import android.graphics.Typeface;
import java.awt.Font;
-import java.awt.FontFormatException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
@@ -47,49 +43,55 @@
* fonts.xml file located alongside the ttf files.
*/
public final class FontLoader {
- private static final String FONTS_DEFINITIONS = "fonts.xml";
+ private static final String FONTS_SYSTEM = "system_fonts.xml";
+ private static final String FONTS_VENDOR = "vendor_fonts.xml";
+ private static final String FONTS_FALLBACK = "fallback_fonts.xml";
- private static final String NODE_FONTS = "fonts";
- private static final String NODE_FONT = "font";
+ private static final String NODE_FAMILYSET = "familyset";
+ private static final String NODE_FAMILY = "family";
private static final String NODE_NAME = "name";
- private static final String NODE_FALLBACK = "fallback";
+ private static final String NODE_FILE = "file";
- private static final String ATTR_TTF = "ttf";
+ private static final String FONT_SUFFIX_NONE = ".ttf";
+ private static final String FONT_SUFFIX_REGULAR = "-Regular.ttf";
+ private static final String FONT_SUFFIX_BOLD = "-Bold.ttf";
+ private static final String FONT_SUFFIX_ITALIC = "-Italic.ttf";
+ private static final String FONT_SUFFIX_BOLDITALIC = "-BoldItalic.ttf";
- private static final String FONT_EXT = ".ttf";
-
- private static final String[] FONT_STYLE_DEFAULT = { "", "-Regular" };
- private static final String[] FONT_STYLE_BOLD = { "-Bold" };
- private static final String[] FONT_STYLE_ITALIC = { "-Italic" };
- private static final String[] FONT_STYLE_BOLDITALIC = { "-BoldItalic" };
-
- // list of font style, in the order matching the Typeface Font style
- private static final String[][] FONT_STYLES = {
- FONT_STYLE_DEFAULT,
- FONT_STYLE_BOLD,
- FONT_STYLE_ITALIC,
- FONT_STYLE_BOLDITALIC
+ // This must match the values of Typeface styles so that we can use them for indices in this
+ // array.
+ private static final int[] AWT_STYLES = new int[] {
+ Font.PLAIN,
+ Font.BOLD,
+ Font.ITALIC,
+ Font.BOLD | Font.ITALIC
};
+ private static int[] DERIVE_BOLD_ITALIC = new int[] {
+ Typeface.ITALIC, Typeface.BOLD, Typeface.NORMAL
+ };
+ private static int[] DERIVE_ITALIC = new int[] { Typeface.NORMAL };
+ private static int[] DERIVE_BOLD = new int[] { Typeface.NORMAL };
- private final Map<String, String> mFamilyToTtf = new HashMap<String, String>();
- private final Map<String, Map<Integer, Font>> mTtfToFontMap =
- new HashMap<String, Map<Integer, Font>>();
+ private static final List<FontInfo> mMainFonts = new ArrayList<FontInfo>();
+ private static final List<FontInfo> mFallbackFonts = new ArrayList<FontInfo>();
- private List<Font> mFallBackFonts = null;
+ private final String mOsFontsLocation;
public static FontLoader create(String fontOsLocation) {
try {
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
- SAXParser parser = parserFactory.newSAXParser();
- File f = new File(fontOsLocation + File.separator + FONTS_DEFINITIONS);
+ // parse the system fonts
+ FontHandler handler = parseFontFile(parserFactory, fontOsLocation, FONTS_SYSTEM);
+ List<FontInfo> systemFonts = handler.getFontList();
- FontDefinitionParser definitionParser = new FontDefinitionParser(
- fontOsLocation + File.separator);
- parser.parse(new FileInputStream(f), definitionParser);
- return definitionParser.getFontLoader();
+ // parse the fallback fonts
+ handler = parseFontFile(parserFactory, fontOsLocation, FONTS_FALLBACK);
+ List<FontInfo> fallbackFonts = handler.getFontList();
+
+ return new FontLoader(fontOsLocation, systemFonts, fallbackFonts);
} catch (ParserConfigurationException e) {
// return null below
} catch (SAXException e) {
@@ -103,35 +105,29 @@
return null;
}
- private FontLoader(List<FontInfo> fontList, List<String> fallBackList) {
- for (FontInfo info : fontList) {
- for (String family : info.families) {
- mFamilyToTtf.put(family, info.ttf);
- }
- }
+ private static FontHandler parseFontFile(SAXParserFactory parserFactory,
+ String fontOsLocation, String fontFileName)
+ throws ParserConfigurationException, SAXException, IOException, FileNotFoundException {
- ArrayList<Font> list = new ArrayList<Font>();
- for (String path : fallBackList) {
- File f = new File(path + FONT_EXT);
- if (f.isFile()) {
- try {
- Font font = Font.createFont(Font.TRUETYPE_FONT, f);
- if (font != null) {
- list.add(font);
- }
- } catch (FontFormatException e) {
- // skip this font name
- } catch (IOException e) {
- // skip this font name
- }
- }
- }
+ SAXParser parser = parserFactory.newSAXParser();
+ File f = new File(fontOsLocation, fontFileName);
- mFallBackFonts = Collections.unmodifiableList(list);
+ FontHandler definitionParser = new FontHandler(
+ fontOsLocation + File.separator);
+ parser.parse(new FileInputStream(f), definitionParser);
+ return definitionParser;
}
- public List<Font> getFallBackFonts() {
- return mFallBackFonts;
+ private FontLoader(String fontOsLocation,
+ List<FontInfo> fontList, List<FontInfo> fallBackList) {
+ mOsFontsLocation = fontOsLocation;
+ mMainFonts.addAll(fontList);
+ mFallbackFonts.addAll(fallBackList);
+ }
+
+
+ public String getOsFontsLocation() {
+ return mOsFontsLocation;
}
/**
@@ -143,96 +139,43 @@
* the method returns.
* @return the font object or null if no match could be found.
*/
- public synchronized Font getFont(String family, int[] style) {
+ public synchronized List<Font> getFont(String family, int style) {
+ List<Font> result = new ArrayList<Font>();
+
if (family == null) {
- return null;
+ return result;
}
- // get the ttf name from the family
- String ttf = mFamilyToTtf.get(family);
- if (ttf == null) {
- return null;
- }
-
- // get the font from the ttf
- Map<Integer, Font> styleMap = mTtfToFontMap.get(ttf);
-
- if (styleMap == null) {
- styleMap = new HashMap<Integer, Font>();
- mTtfToFontMap.put(ttf, styleMap);
- }
-
- Font f = styleMap.get(style[0]);
-
- if (f != null) {
- return f;
- }
-
- // if it doesn't exist, we create it, and we can't, we try with a simpler style
- switch (style[0]) {
- case Typeface.NORMAL:
- f = getFont(ttf, FONT_STYLES[Typeface.NORMAL]);
+ // get the font objects from the main list based on family.
+ for (FontInfo info : mMainFonts) {
+ if (info.families.contains(family)) {
+ result.add(info.font[style]);
break;
- case Typeface.BOLD:
- case Typeface.ITALIC:
- f = getFont(ttf, FONT_STYLES[style[0]]);
- if (f == null) {
- f = getFont(ttf, FONT_STYLES[Typeface.NORMAL]);
- style[0] = Typeface.NORMAL;
- }
- break;
- case Typeface.BOLD_ITALIC:
- f = getFont(ttf, FONT_STYLES[style[0]]);
- if (f == null) {
- f = getFont(ttf, FONT_STYLES[Typeface.BOLD]);
- if (f != null) {
- style[0] = Typeface.BOLD;
- } else {
- f = getFont(ttf, FONT_STYLES[Typeface.ITALIC]);
- if (f != null) {
- style[0] = Typeface.ITALIC;
- } else {
- f = getFont(ttf, FONT_STYLES[Typeface.NORMAL]);
- style[0] = Typeface.NORMAL;
- }
- }
- }
- break;
- }
-
- if (f != null) {
- styleMap.put(style[0], f);
- return f;
- }
-
- return null;
- }
-
- private Font getFont(String ttf, String[] fontFileSuffix) {
- for (String suffix : fontFileSuffix) {
- String name = ttf + suffix + FONT_EXT;
-
- File f = new File(name);
- if (f.isFile()) {
- try {
- Font font = Font.createFont(Font.TRUETYPE_FONT, f);
- if (font != null) {
- return font;
- }
- } catch (FontFormatException e) {
- // skip this font name
- } catch (IOException e) {
- // skip this font name
- }
}
}
- return null;
+ // add all the fallback fonts for the given style
+ for (FontInfo info : mFallbackFonts) {
+ result.add(info.font[style]);
+ }
+
+ return result;
}
+
+ public synchronized List<Font> getFallbackFonts(int style) {
+ List<Font> result = new ArrayList<Font>();
+ // add all the fallback fonts
+ for (FontInfo info : mFallbackFonts) {
+ result.add(info.font[style]);
+ }
+ return result;
+ }
+
+
private final static class FontInfo {
- String ttf;
+ final Font[] font = new Font[4]; // Matches the 4 type-face styles.
final Set<String> families;
FontInfo() {
@@ -240,21 +183,20 @@
}
}
- private final static class FontDefinitionParser extends DefaultHandler {
+ private final static class FontHandler extends DefaultHandler {
private final String mOsFontsLocation;
private FontInfo mFontInfo = null;
private final StringBuilder mBuilder = new StringBuilder();
- private List<FontInfo> mFontList;
- private List<String> mFallBackList;
+ private List<FontInfo> mFontList = new ArrayList<FontInfo>();
- private FontDefinitionParser(String osFontsLocation) {
+ private FontHandler(String osFontsLocation) {
super();
mOsFontsLocation = osFontsLocation;
}
- FontLoader getFontLoader() {
- return new FontLoader(mFontList, mFallBackList);
+ public List<FontInfo> getFontList() {
+ return mFontList;
}
/* (non-Javadoc)
@@ -263,26 +205,11 @@
@Override
public void startElement(String uri, String localName, String name, Attributes attributes)
throws SAXException {
- if (NODE_FONTS.equals(localName)) {
+ if (NODE_FAMILYSET.equals(localName)) {
mFontList = new ArrayList<FontInfo>();
- mFallBackList = new ArrayList<String>();
- } else if (NODE_FONT.equals(localName)) {
+ } else if (NODE_FAMILY.equals(localName)) {
if (mFontList != null) {
- String ttf = attributes.getValue(ATTR_TTF);
- if (ttf != null) {
- mFontInfo = new FontInfo();
- mFontInfo.ttf = mOsFontsLocation + ttf;
- mFontList.add(mFontInfo);
- }
- }
- } else if (NODE_NAME.equals(localName)) {
- // do nothing, we'll handle the name in the endElement
- } else if (NODE_FALLBACK.equals(localName)) {
- if (mFallBackList != null) {
- String ttf = attributes.getValue(ATTR_TTF);
- if (ttf != null) {
- mFallBackList.add(mOsFontsLocation + ttf);
- }
+ mFontInfo = new FontInfo();
}
}
@@ -304,21 +231,80 @@
*/
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
- if (NODE_FONTS.equals(localName)) {
- // top level, do nothing
- } else if (NODE_FONT.equals(localName)) {
- mFontInfo = null;
+ if (NODE_FAMILY.equals(localName)) {
+ if (mFontInfo != null) {
+ // if has a normal font file, add to the list
+ if (mFontInfo.font[Typeface.NORMAL] != null) {
+ mFontList.add(mFontInfo);
+
+ // create missing font styles, order is important.
+ if (mFontInfo.font[Typeface.BOLD_ITALIC] == null) {
+ computeDerivedFont(Typeface.BOLD_ITALIC, DERIVE_BOLD_ITALIC);
+ }
+ if (mFontInfo.font[Typeface.ITALIC] == null) {
+ computeDerivedFont(Typeface.ITALIC, DERIVE_ITALIC);
+ }
+ if (mFontInfo.font[Typeface.BOLD] == null) {
+ computeDerivedFont(Typeface.BOLD, DERIVE_BOLD);
+ }
+ }
+
+ mFontInfo = null;
+ }
} else if (NODE_NAME.equals(localName)) {
// handle a new name for an existing Font Info
if (mFontInfo != null) {
String family = trimXmlWhitespaces(mBuilder.toString());
mFontInfo.families.add(family);
}
- } else if (NODE_FALLBACK.equals(localName)) {
- // nothing to do here.
+ } else if (NODE_FILE.equals(localName)) {
+ // handle a new file for an existing Font Info
+ if (mFontInfo != null) {
+ String fileName = trimXmlWhitespaces(mBuilder.toString());
+ Font font = getFont(fileName);
+ if (font != null) {
+ if (fileName.endsWith(FONT_SUFFIX_REGULAR)) {
+ mFontInfo.font[Typeface.NORMAL] = font;
+ } else if (fileName.endsWith(FONT_SUFFIX_BOLD)) {
+ mFontInfo.font[Typeface.BOLD] = font;
+ } else if (fileName.endsWith(FONT_SUFFIX_ITALIC)) {
+ mFontInfo.font[Typeface.ITALIC] = font;
+ } else if (fileName.endsWith(FONT_SUFFIX_BOLDITALIC)) {
+ mFontInfo.font[Typeface.BOLD_ITALIC] = font;
+ } else if (fileName.endsWith(FONT_SUFFIX_NONE)) {
+ mFontInfo.font[Typeface.NORMAL] = font;
+ }
+ }
+ }
}
}
+ private Font getFont(String fileName) {
+ try {
+ File file = new File(mOsFontsLocation, fileName);
+ if (file.exists()) {
+ return Font.createFont(Font.TRUETYPE_FONT, file);
+ }
+ } catch (Exception e) {
+
+ }
+
+ return null;
+ }
+
+ private void computeDerivedFont( int toCompute, int[] basedOnList) {
+ for (int basedOn : basedOnList) {
+ if (mFontInfo.font[basedOn] != null) {
+ mFontInfo.font[toCompute] =
+ mFontInfo.font[basedOn].deriveFont(AWT_STYLES[toCompute]);
+ return;
+ }
+ }
+
+ // we really shouldn't stop there. This means we don't have a NORMAL font...
+ assert false;
+ }
+
private String trimXmlWhitespaces(String value) {
if (value == null) {
return null;
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
index 0a15627..70c8a00 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
@@ -111,7 +111,7 @@
"android.view.inputmethod.InputMethodManager#getInstance",
"android.util.Log#println_native",
"com.android.internal.util.XmlUtils#convertValueToInt",
- // TODO: comment out once DelegateClass is working
+ "com.android.internal.textservice.ITextServicesManager$Stub#asInterface",
};
/**
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java
index ac4ae6d..89b53ab 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java
@@ -188,20 +188,24 @@
boolean pushedArg0 = false;
int maxStack = 0;
+ // Check if the last segment of the class name has inner an class.
+ // Right now we only support one level of inner classes.
+ Type outerType = null;
+ int slash = mClassName.lastIndexOf('/');
+ int dol = mClassName.lastIndexOf('$');
+ if (dol != -1 && dol > slash && dol == mClassName.indexOf('$')) {
+ String outerClass = mClassName.substring(0, dol);
+ outerType = Type.getObjectType(outerClass);
+
+ // Change a delegate class name to "com/foo/Outer_Inner_Delegate"
+ delegateClassName = delegateClassName.replace('$', '_');
+ }
+
// For an instance method (e.g. non-static), push the 'this' preceded
// by the 'this' of any outer class, if any.
if (!mIsStatic) {
- // Check if the last segment of the class name has inner an class.
- // Right now we only support one level of inner classes.
- int slash = mClassName.lastIndexOf('/');
- int dol = mClassName.lastIndexOf('$');
- if (dol != -1 && dol > slash && dol == mClassName.indexOf('$')) {
- String outerClass = mClassName.substring(0, dol);
- Type outerType = Type.getObjectType(outerClass);
- // Change a delegate class name to "com/foo/Outer_Inner_Delegate"
- delegateClassName = delegateClassName.replace('$', '_');
-
+ if (outerType != null) {
// The first-level inner class has a package-protected member called 'this$0'
// that points to the outer class.
@@ -213,6 +217,7 @@
outerType.getDescriptor()); // type of the field
maxStack++;
paramTypes.add(outerType);
+
}
// Push "this" for the instance method, which is always ALOAD 0
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java
index f417ddd..119ed54 100644
--- a/voip/java/com/android/server/sip/SipService.java
+++ b/voip/java/com/android/server/sip/SipService.java
@@ -81,10 +81,8 @@
private String mNetworkType;
private boolean mConnected;
private SipWakeupTimer mTimer;
- private WifiScanProcess mWifiScanProcess;
private WifiManager.WifiLock mWifiLock;
- private boolean mWifiOnly;
- private BroadcastReceiver mWifiStateReceiver = null;
+ private boolean mSipOnWifiOnly;
private IntervalMeasurementProcess mIntervalMeasurementProcess;
@@ -99,7 +97,6 @@
new HashMap<String, ISipSession>();
private ConnectivityReceiver mConnectivityReceiver;
- private boolean mWifiEnabled;
private SipWakeLock mMyWakeLock;
private int mKeepAliveInterval;
private int mLastGoodKeepAliveInterval = DEFAULT_KEEPALIVE_INTERVAL;
@@ -120,55 +117,17 @@
if (DEBUG) Log.d(TAG, " service started!");
mContext = context;
mConnectivityReceiver = new ConnectivityReceiver();
+
+ mWifiLock = ((WifiManager)
+ context.getSystemService(Context.WIFI_SERVICE))
+ .createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
+ mWifiLock.setReferenceCounted(false);
+ mSipOnWifiOnly = SipManager.isSipWifiOnly(context);
+
mMyWakeLock = new SipWakeLock((PowerManager)
context.getSystemService(Context.POWER_SERVICE));
mTimer = new SipWakeupTimer(context, mExecutor);
- mWifiOnly = SipManager.isSipWifiOnly(context);
- }
-
- private BroadcastReceiver createWifiBroadcastReceiver() {
- return new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
- int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
- WifiManager.WIFI_STATE_UNKNOWN);
- synchronized (SipService.this) {
- switch (state) {
- case WifiManager.WIFI_STATE_ENABLED:
- mWifiEnabled = true;
- if (anyOpenedToReceiveCalls()) grabWifiLock();
- break;
- case WifiManager.WIFI_STATE_DISABLED:
- mWifiEnabled = false;
- releaseWifiLock();
- break;
- }
- }
- }
- }
- };
- };
-
- private void registerReceivers() {
- mContext.registerReceiver(mConnectivityReceiver,
- new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
- if (SipManager.isSipWifiOnly(mContext)) {
- mWifiStateReceiver = createWifiBroadcastReceiver();
- mContext.registerReceiver(mWifiStateReceiver,
- new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
- }
- if (DEBUG) Log.d(TAG, " +++ register receivers");
- }
-
- private void unregisterReceivers() {
- mContext.unregisterReceiver(mConnectivityReceiver);
- if (SipManager.isSipWifiOnly(mContext)) {
- mContext.unregisterReceiver(mWifiStateReceiver);
- }
- if (DEBUG) Log.d(TAG, " --- unregister receivers");
}
public synchronized SipProfile[] getListOfProfiles() {
@@ -218,7 +177,6 @@
if (addingFirstProfile && !mSipGroups.isEmpty()) registerReceivers();
if (localProfile.getAutoRegistration()) {
group.openToReceiveCalls();
- if (mWifiEnabled) grabWifiLock();
}
} catch (SipException e) {
Log.e(TAG, "openToReceiveCalls()", e);
@@ -254,10 +212,9 @@
group.close();
if (!anyOpenedToReceiveCalls()) {
- releaseWifiLock();
+ unregisterReceivers();
mMyWakeLock.reset(); // in case there's leak
}
- if (mSipGroups.isEmpty()) unregisterReceivers();
}
public synchronized boolean isOpened(String localProfileUri) {
@@ -388,83 +345,6 @@
return false;
}
- private void grabWifiLock() {
- if (mWifiLock == null) {
- if (DEBUG) Log.d(TAG, "acquire wifi lock");
- mWifiLock = ((WifiManager)
- mContext.getSystemService(Context.WIFI_SERVICE))
- .createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
- mWifiLock.acquire();
- if (!mConnected) startWifiScanner();
- }
- }
-
- private void releaseWifiLock() {
- if (mWifiLock != null) {
- if (DEBUG) Log.d(TAG, "release wifi lock");
- mWifiLock.release();
- mWifiLock = null;
- stopWifiScanner();
- }
- }
-
- private synchronized void startWifiScanner() {
- if (mWifiScanProcess == null) {
- mWifiScanProcess = new WifiScanProcess();
- }
- mWifiScanProcess.start();
- }
-
- private synchronized void stopWifiScanner() {
- if (mWifiScanProcess != null) {
- mWifiScanProcess.stop();
- }
- }
-
- private synchronized void onConnectivityChanged(
- String type, boolean connected) {
- if (DEBUG) Log.d(TAG, "onConnectivityChanged(): "
- + mNetworkType + (mConnected? " CONNECTED" : " DISCONNECTED")
- + " --> " + type + (connected? " CONNECTED" : " DISCONNECTED"));
-
- boolean sameType = type.equals(mNetworkType);
- if (!sameType && !connected) return;
-
- boolean wasWifi = "WIFI".equalsIgnoreCase(mNetworkType);
- boolean isWifi = "WIFI".equalsIgnoreCase(type);
- boolean wifiOff = (isWifi && !connected) || (wasWifi && !sameType);
- boolean wifiOn = isWifi && connected;
-
- try {
- boolean wasConnected = mConnected;
- mNetworkType = type;
- mConnected = connected;
-
- if (wasConnected) {
- mLocalIp = null;
- stopPortMappingMeasurement();
- for (SipSessionGroupExt group : mSipGroups.values()) {
- group.onConnectivityChanged(false);
- }
- }
-
- if (connected) {
- mLocalIp = determineLocalIp();
- mKeepAliveInterval = -1;
- mLastGoodKeepAliveInterval = DEFAULT_KEEPALIVE_INTERVAL;
- for (SipSessionGroupExt group : mSipGroups.values()) {
- group.onConnectivityChanged(true);
- }
- if (isWifi && (mWifiLock != null)) stopWifiScanner();
- } else {
- mMyWakeLock.reset(); // in case there's a leak
- if (isWifi && (mWifiLock != null)) startWifiScanner();
- }
- } catch (SipException e) {
- Log.e(TAG, "onConnectivityChanged()", e);
- }
- }
-
private void stopPortMappingMeasurement() {
if (mIntervalMeasurementProcess != null) {
mIntervalMeasurementProcess.stop();
@@ -747,36 +627,6 @@
}
}
- private class WifiScanProcess implements Runnable {
- private static final String TAG = "\\WIFI_SCAN/";
- private static final int INTERVAL = 60;
- private boolean mRunning = false;
-
- private WifiManager mWifiManager;
-
- public void start() {
- if (mRunning) return;
- mRunning = true;
- mTimer.set(INTERVAL * 1000, this);
- }
-
- WifiScanProcess() {
- mWifiManager = (WifiManager)
- mContext.getSystemService(Context.WIFI_SERVICE);
- }
-
- public void run() {
- // scan and associate now
- if (DEBUGV) Log.v(TAG, "just wake up here for wifi scanning...");
- mWifiManager.startScanActive();
- }
-
- public void stop() {
- mRunning = false;
- mTimer.cancel(this);
- }
- }
-
private class IntervalMeasurementProcess implements Runnable,
SipSessionGroup.KeepAliveProcessCallback {
private static final String TAG = "SipKeepAliveInterval";
@@ -1254,138 +1104,103 @@
}
private class ConnectivityReceiver extends BroadcastReceiver {
- private Timer mTimer = new Timer();
- private MyTimerTask mTask;
-
@Override
- public void onReceive(final Context context, final Intent intent) {
- // Run the handler in MyExecutor to be protected by wake lock
- mExecutor.execute(new Runnable() {
- public void run() {
- onReceiveInternal(context, intent);
- }
- });
- }
+ public void onReceive(Context context, Intent intent) {
+ Bundle bundle = intent.getExtras();
+ if (bundle != null) {
+ final NetworkInfo info = (NetworkInfo)
+ bundle.get(ConnectivityManager.EXTRA_NETWORK_INFO);
- private void onReceiveInternal(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- Bundle b = intent.getExtras();
- if (b != null) {
- NetworkInfo netInfo = (NetworkInfo)
- b.get(ConnectivityManager.EXTRA_NETWORK_INFO);
- String type = netInfo.getTypeName();
- NetworkInfo.State state = netInfo.getState();
-
- if (mWifiOnly && (netInfo.getType() !=
- ConnectivityManager.TYPE_WIFI)) {
- if (DEBUG) {
- Log.d(TAG, "Wifi only, other connectivity ignored: "
- + type);
- }
- return;
- }
-
- NetworkInfo activeNetInfo = getActiveNetworkInfo();
- if (DEBUG) {
- if (activeNetInfo != null) {
- Log.d(TAG, "active network: "
- + activeNetInfo.getTypeName()
- + ((activeNetInfo.getState() == NetworkInfo.State.CONNECTED)
- ? " CONNECTED" : " DISCONNECTED"));
- } else {
- Log.d(TAG, "active network: null");
- }
- }
- if ((state == NetworkInfo.State.CONNECTED)
- && (activeNetInfo != null)
- && (activeNetInfo.getType() != netInfo.getType())) {
- if (DEBUG) Log.d(TAG, "ignore connect event: " + type
- + ", active: " + activeNetInfo.getTypeName());
- return;
- }
-
- if (state == NetworkInfo.State.CONNECTED) {
- if (DEBUG) Log.d(TAG, "Connectivity alert: CONNECTED " + type);
- onChanged(type, true);
- } else if (state == NetworkInfo.State.DISCONNECTED) {
- if (DEBUG) Log.d(TAG, "Connectivity alert: DISCONNECTED " + type);
- onChanged(type, false);
- } else {
- if (DEBUG) Log.d(TAG, "Connectivity alert not processed: "
- + state + " " + type);
- }
- }
- }
- }
-
- private NetworkInfo getActiveNetworkInfo() {
- ConnectivityManager cm = (ConnectivityManager)
- mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
- return cm.getActiveNetworkInfo();
- }
-
- private void onChanged(String type, boolean connected) {
- synchronized (SipService.this) {
- // When turning on WIFI, it needs some time for network
- // connectivity to get stabile so we defer good news (because
- // we want to skip the interim ones) but deliver bad news
- // immediately
- if (connected) {
- if (mTask != null) {
- mTask.cancel();
- mMyWakeLock.release(mTask);
- }
- mTask = new MyTimerTask(type, connected);
- mTimer.schedule(mTask, 2 * 1000L);
- // hold wakup lock so that we can finish changes before the
- // device goes to sleep
- mMyWakeLock.acquire(mTask);
- } else {
- if ((mTask != null) && mTask.mNetworkType.equals(type)) {
- mTask.cancel();
- mMyWakeLock.release(mTask);
- }
- onConnectivityChanged(type, false);
- }
- }
- }
-
- private class MyTimerTask extends TimerTask {
- private boolean mConnected;
- private String mNetworkType;
-
- public MyTimerTask(String type, boolean connected) {
- mNetworkType = type;
- mConnected = connected;
- }
-
- // timeout handler
- @Override
- public void run() {
- // delegate to mExecutor
+ // Run the handler in MyExecutor to be protected by wake lock
mExecutor.execute(new Runnable() {
public void run() {
- realRun();
+ onConnectivityChanged(info);
}
});
}
+ }
+ }
- private void realRun() {
- synchronized (SipService.this) {
- if (mTask != this) {
- Log.w(TAG, " unexpected task: " + mNetworkType
- + (mConnected ? " CONNECTED" : "DISCONNECTED"));
- mMyWakeLock.release(this);
- return;
- }
- mTask = null;
- if (DEBUG) Log.d(TAG, " deliver change for " + mNetworkType
- + (mConnected ? " CONNECTED" : "DISCONNECTED"));
- onConnectivityChanged(mNetworkType, mConnected);
- mMyWakeLock.release(this);
+ private void registerReceivers() {
+ mContext.registerReceiver(mConnectivityReceiver,
+ new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+ if (DEBUG) Log.d(TAG, " +++ register receivers");
+ }
+
+ private void unregisterReceivers() {
+ mContext.unregisterReceiver(mConnectivityReceiver);
+ if (DEBUG) Log.d(TAG, " --- unregister receivers");
+
+ // Reset variables maintained by ConnectivityReceiver.
+ mWifiLock.release();
+ mConnected = false;
+ }
+
+ private synchronized void onConnectivityChanged(NetworkInfo info) {
+ // We only care about the default network, and getActiveNetworkInfo()
+ // is the only way to distinguish them. However, as broadcasts are
+ // delivered asynchronously, we might miss DISCONNECTED events from
+ // getActiveNetworkInfo(), which is critical to our SIP stack. To
+ // solve this, if it is a DISCONNECTED event to our current network,
+ // respect it. Otherwise get a new one from getActiveNetworkInfo().
+ if (info == null || info.isConnected() ||
+ !info.getTypeName().equals(mNetworkType)) {
+ ConnectivityManager cm = (ConnectivityManager)
+ mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ info = cm.getActiveNetworkInfo();
+ }
+
+ // Some devices limit SIP on Wi-Fi. In this case, if we are not on
+ // Wi-Fi, treat it as a DISCONNECTED event.
+ boolean connected = (info != null && info.isConnected() &&
+ (!mSipOnWifiOnly || info.getType() == ConnectivityManager.TYPE_WIFI));
+ String networkType = connected ? info.getTypeName() : "null";
+
+ // Ignore the event if the current active network is not changed.
+ if (connected == mConnected && networkType.equals(mNetworkType)) {
+ return;
+ }
+ if (DEBUG) {
+ Log.d(TAG, "onConnectivityChanged(): " + mNetworkType +
+ " -> " + networkType);
+ }
+
+ try {
+ if (mConnected) {
+ mLocalIp = null;
+ stopPortMappingMeasurement();
+ for (SipSessionGroupExt group : mSipGroups.values()) {
+ group.onConnectivityChanged(false);
}
}
+
+ mConnected = connected;
+ mNetworkType = networkType;
+
+ if (connected) {
+ mLocalIp = determineLocalIp();
+ mKeepAliveInterval = -1;
+ mLastGoodKeepAliveInterval = DEFAULT_KEEPALIVE_INTERVAL;
+ for (SipSessionGroupExt group : mSipGroups.values()) {
+ group.onConnectivityChanged(true);
+ }
+
+ // If we are on Wi-Fi, grab the WifiLock. Otherwise release it.
+ if (info.getType() == ConnectivityManager.TYPE_WIFI) {
+ mWifiLock.acquire();
+ } else {
+ mWifiLock.release();
+ }
+ } else {
+ // Always grab the WifiLock when we are disconnected, so the
+ // system will keep trying to reconnect. We will release it
+ // if we eventually connect via something else.
+ mWifiLock.acquire();
+
+ mMyWakeLock.reset(); // in case there's a leak
+ }
+ } catch (SipException e) {
+ Log.e(TAG, "onConnectivityChanged()", e);
}
}
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
index 18d6eaa..568a485 100644
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ b/wifi/java/android/net/wifi/WifiConfigStore.java
@@ -100,6 +100,7 @@
private static Context sContext;
private static final String TAG = "WifiConfigStore";
+ private static final boolean DBG = false;
/* configured networks with network id as the key */
private static HashMap<Integer, WifiConfiguration> sConfiguredNetworks =
@@ -140,7 +141,7 @@
* and enable all stored networks in supplicant.
*/
static void initialize(Context context) {
- Log.d(TAG, "Loading config and enabling all networks");
+ if (DBG) log("Loading config and enabling all networks");
sContext = context;
loadConfiguredNetworks();
enableAllNetworks();
@@ -173,7 +174,7 @@
networkEnabledStateChanged = true;
config.status = Status.ENABLED;
} else {
- Log.e(TAG, "Enable network failed on " + config.networkId);
+ loge("Enable network failed on " + config.networkId);
}
}
}
@@ -204,7 +205,7 @@
if (netId != INVALID_NETWORK_ID) {
selectNetwork(netId);
} else {
- Log.e(TAG, "Failed to update network " + config);
+ loge("Failed to update network " + config);
}
return netId;
}
@@ -290,7 +291,7 @@
writeIpAndProxyConfigurations();
sendConfiguredNetworksChangedBroadcast();
} else {
- Log.e(TAG, "Failed to remove network " + netId);
+ loge("Failed to remove network " + netId);
}
}
@@ -404,7 +405,7 @@
markAllNetworksDisabled();
result.status = WpsResult.Status.SUCCESS;
} else {
- Log.e(TAG, "Failed to start WPS pin method configuration");
+ loge("Failed to start WPS pin method configuration");
result.status = WpsResult.Status.FAILURE;
}
return result;
@@ -423,7 +424,7 @@
markAllNetworksDisabled();
result.status = WpsResult.Status.SUCCESS;
} else {
- Log.e(TAG, "Failed to start WPS pin method configuration");
+ loge("Failed to start WPS pin method configuration");
result.status = WpsResult.Status.FAILURE;
}
return result;
@@ -439,7 +440,7 @@
markAllNetworksDisabled();
result.status = WpsResult.Status.SUCCESS;
} else {
- Log.e(TAG, "Failed to start WPS push button configuration");
+ loge("Failed to start WPS push button configuration");
result.status = WpsResult.Status.FAILURE;
}
return result;
@@ -680,7 +681,7 @@
/* Ignore */
break;
default:
- Log.e(TAG, "Ignore invalid ip assignment while writing");
+ loge("Ignore invalid ip assignment while writing");
break;
}
@@ -707,7 +708,7 @@
/* Ignore */
break;
default:
- Log.e(TAG, "Ignore invalid proxy settings while writing");
+ loge("Ignore invalid proxy settings while writing");
break;
}
if (writeToFile) {
@@ -715,14 +716,14 @@
out.writeInt(configKey(config));
}
} catch (NullPointerException e) {
- Log.e(TAG, "Failure in writing " + config.linkProperties + e);
+ loge("Failure in writing " + config.linkProperties + e);
}
out.writeUTF(EOS);
}
}
} catch (IOException e) {
- Log.e(TAG, "Error writing data file");
+ loge("Error writing data file");
} finally {
if (out != null) {
try {
@@ -741,7 +742,7 @@
int version = in.readInt();
if (version != 2 && version != 1) {
- Log.e(TAG, "Bad version on IP configuration file, ignore read");
+ loge("Bad version on IP configuration file, ignore read");
return;
}
@@ -797,10 +798,10 @@
} else if (key.equals(EOS)) {
break;
} else {
- Log.e(TAG, "Ignore unknown key " + key + "while reading");
+ loge("Ignore unknown key " + key + "while reading");
}
} catch (IllegalArgumentException e) {
- Log.e(TAG, "Ignore invalid address while reading" + e);
+ loge("Ignore invalid address while reading" + e);
}
} while (true);
@@ -810,7 +811,7 @@
sNetworkIds.get(id));
if (config == null) {
- Log.e(TAG, "configuration found for missing network, ignored");
+ loge("configuration found for missing network, ignored");
} else {
config.linkProperties = linkProperties;
switch (ipAssignment) {
@@ -822,7 +823,7 @@
//Ignore
break;
default:
- Log.e(TAG, "Ignore invalid ip assignment while reading");
+ loge("Ignore invalid ip assignment while reading");
break;
}
@@ -840,18 +841,18 @@
//Ignore
break;
default:
- Log.e(TAG, "Ignore invalid proxy settings while reading");
+ loge("Ignore invalid proxy settings while reading");
break;
}
}
}
} else {
- Log.e(TAG, "Missing id while parsing configuration");
+ loge("Missing id while parsing configuration");
}
}
} catch (EOFException ignore) {
} catch (IOException e) {
- Log.e(TAG, "Error parsing configuration" + e);
+ loge("Error parsing configuration" + e);
} finally {
if (in != null) {
try {
@@ -878,7 +879,7 @@
newNetwork = true;
netId = WifiNative.addNetworkCommand();
if (netId < 0) {
- Log.e(TAG, "Failed to add a network!");
+ loge("Failed to add a network!");
return new NetworkUpdateResult(INVALID_NETWORK_ID);
}
}
@@ -893,7 +894,7 @@
netId,
WifiConfiguration.ssidVarName,
config.SSID)) {
- Log.d(TAG, "failed to set SSID: "+config.SSID);
+ loge("failed to set SSID: "+config.SSID);
break setVariables;
}
@@ -902,7 +903,7 @@
netId,
WifiConfiguration.bssidVarName,
config.BSSID)) {
- Log.d(TAG, "failed to set BSSID: "+config.BSSID);
+ loge("failed to set BSSID: "+config.BSSID);
break setVariables;
}
@@ -913,7 +914,7 @@
netId,
WifiConfiguration.KeyMgmt.varName,
allowedKeyManagementString)) {
- Log.d(TAG, "failed to set key_mgmt: "+
+ loge("failed to set key_mgmt: "+
allowedKeyManagementString);
break setVariables;
}
@@ -925,7 +926,7 @@
netId,
WifiConfiguration.Protocol.varName,
allowedProtocolsString)) {
- Log.d(TAG, "failed to set proto: "+
+ loge("failed to set proto: "+
allowedProtocolsString);
break setVariables;
}
@@ -937,7 +938,7 @@
netId,
WifiConfiguration.AuthAlgorithm.varName,
allowedAuthAlgorithmsString)) {
- Log.d(TAG, "failed to set auth_alg: "+
+ loge("failed to set auth_alg: "+
allowedAuthAlgorithmsString);
break setVariables;
}
@@ -950,7 +951,7 @@
netId,
WifiConfiguration.PairwiseCipher.varName,
allowedPairwiseCiphersString)) {
- Log.d(TAG, "failed to set pairwise: "+
+ loge("failed to set pairwise: "+
allowedPairwiseCiphersString);
break setVariables;
}
@@ -962,7 +963,7 @@
netId,
WifiConfiguration.GroupCipher.varName,
allowedGroupCiphersString)) {
- Log.d(TAG, "failed to set group: "+
+ loge("failed to set group: "+
allowedGroupCiphersString);
break setVariables;
}
@@ -974,7 +975,7 @@
netId,
WifiConfiguration.pskVarName,
config.preSharedKey)) {
- Log.d(TAG, "failed to set psk");
+ loge("failed to set psk");
break setVariables;
}
@@ -988,9 +989,7 @@
netId,
WifiConfiguration.wepKeyVarNames[i],
config.wepKeys[i])) {
- Log.d(TAG,
- "failed to set wep_key"+i+": " +
- config.wepKeys[i]);
+ loge("failed to set wep_key" + i + ": " + config.wepKeys[i]);
break setVariables;
}
hasSetKey = true;
@@ -1003,9 +1002,7 @@
netId,
WifiConfiguration.wepTxKeyIdxVarName,
Integer.toString(config.wepTxKeyIndex))) {
- Log.d(TAG,
- "failed to set wep_tx_keyidx: "+
- config.wepTxKeyIndex);
+ loge("failed to set wep_tx_keyidx: " + config.wepTxKeyIndex);
break setVariables;
}
}
@@ -1014,7 +1011,7 @@
netId,
WifiConfiguration.priorityVarName,
Integer.toString(config.priority))) {
- Log.d(TAG, config.SSID + ": failed to set priority: "
+ loge(config.SSID + ": failed to set priority: "
+config.priority);
break setVariables;
}
@@ -1023,7 +1020,7 @@
netId,
WifiConfiguration.hiddenSSIDVarName,
Integer.toString(config.hiddenSSID ? 1 : 0))) {
- Log.d(TAG, config.SSID + ": failed to set hiddenSSID: "+
+ loge(config.SSID + ": failed to set hiddenSSID: "+
config.hiddenSSID);
break setVariables;
}
@@ -1040,7 +1037,7 @@
netId,
varName,
value)) {
- Log.d(TAG, config.SSID + ": failed to set " + varName +
+ loge(config.SSID + ": failed to set " + varName +
": " + value);
break setVariables;
}
@@ -1052,9 +1049,7 @@
if (updateFailed) {
if (newNetwork) {
WifiNative.removeNetworkCommand(netId);
- Log.d(TAG,
- "Failed to set a network variable, removed network: "
- + netId);
+ loge("Failed to set a network variable, removed network: " + netId);
}
return new NetworkUpdateResult(INVALID_NETWORK_ID);
}
@@ -1130,7 +1125,7 @@
/* Ignore */
break;
default:
- Log.e(TAG, "Ignore invalid ip assignment during write");
+ loge("Ignore invalid ip assignment during write");
break;
}
@@ -1154,7 +1149,7 @@
/* Ignore */
break;
default:
- Log.e(TAG, "Ignore invalid proxy configuration during write");
+ loge("Ignore invalid proxy configuration during write");
break;
}
@@ -1163,7 +1158,7 @@
} else {
currentConfig.ipAssignment = newConfig.ipAssignment;
addIpSettingsFromConfig(linkProperties, newConfig);
- Log.d(TAG, "IP config changed SSID = " + currentConfig.SSID + " linkProperties: " +
+ log("IP config changed SSID = " + currentConfig.SSID + " linkProperties: " +
linkProperties.toString());
}
@@ -1173,9 +1168,9 @@
} else {
currentConfig.proxySettings = newConfig.proxySettings;
linkProperties.setHttpProxy(newConfig.linkProperties.getHttpProxy());
- Log.d(TAG, "proxy changed SSID = " + currentConfig.SSID);
+ log("proxy changed SSID = " + currentConfig.SSID);
if (linkProperties.getHttpProxy() != null) {
- Log.d(TAG, " proxyProperties: " + linkProperties.getHttpProxy().toString());
+ log(" proxyProperties: " + linkProperties.getHttpProxy().toString());
}
}
@@ -1394,7 +1389,7 @@
// if we ever get here, we should probably add the
// value to WifiConfiguration to reflect that it's
// supported by the WPA supplicant
- Log.w(TAG, "Failed to look-up a string: " + string);
+ loge("Failed to look-up a string: " + string);
return -1;
}
@@ -1431,4 +1426,12 @@
public static String getConfigFile() {
return ipConfigFile;
}
+
+ private static void loge(String s) {
+ Log.e(TAG, s);
+ }
+
+ private static void log(String s) {
+ Log.d(TAG, s);
+ }
}
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 41fc55d..55e9587 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -75,7 +75,6 @@
import android.util.EventLog;
import android.util.Log;
import android.util.LruCache;
-import android.util.Slog;
import com.android.internal.app.IBatteryStats;
import com.android.internal.util.AsyncChannel;
@@ -382,6 +381,14 @@
*/
private final int mDefaultSupplicantScanIntervalMs;
+ /**
+ * Minimum time interval between enabling all networks.
+ * A device can end up repeatedly connecting to a bad network on screen on/off toggle
+ * due to enabling every time. We add a threshold to avoid this.
+ */
+ private static final int MIN_INTERVAL_ENABLE_ALL_NETWORKS_MS = 10 * 60 * 1000; /* 10 minutes */
+ private long mLastEnableAllNetworksTime;
+
private static final int MIN_RSSI = -200;
private static final int MAX_RSSI = 256;
@@ -1104,12 +1111,12 @@
mNwService.setInterfaceConfig(intf, ifcg);
}
} catch (Exception e) {
- Log.e(TAG, "Error configuring interface " + intf + ", :" + e);
+ loge("Error configuring interface " + intf + ", :" + e);
return false;
}
if(mCm.tether(intf) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
- Log.e(TAG, "Error tethering on " + intf);
+ loge("Error tethering on " + intf);
return false;
}
return true;
@@ -1135,11 +1142,11 @@
mNwService.setInterfaceConfig(mInterfaceName, ifcg);
}
} catch (Exception e) {
- Log.e(TAG, "Error resetting interface " + mInterfaceName + ", :" + e);
+ loge("Error resetting interface " + mInterfaceName + ", :" + e);
}
if (mCm.untether(mInterfaceName) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
- Log.e(TAG, "Untether initiate failed!");
+ loge("Untether initiate failed!");
}
}
@@ -1175,12 +1182,12 @@
mBatteryStats.noteWifiOff();
}
} catch (RemoteException e) {
- Log.e(TAG, "Failed to note battery stats in wifi");
+ loge("Failed to note battery stats in wifi");
}
mWifiState.set(wifiState);
- if (DBG) Log.d(TAG, "setWifiState: " + syncGetWifiStateByName());
+ if (DBG) log("setWifiState: " + syncGetWifiStateByName());
final Intent intent = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
@@ -1199,13 +1206,13 @@
mBatteryStats.noteWifiOff();
}
} catch (RemoteException e) {
- Log.d(TAG, "Failed to note battery stats in wifi");
+ loge("Failed to note battery stats in wifi");
}
// Update state
mWifiApState.set(wifiApState);
- if (DBG) Log.d(TAG, "setWifiApState: " + syncGetWifiApStateByName());
+ if (DBG) log("setWifiApState: " + syncGetWifiApStateByName());
final Intent intent = new Intent(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
@@ -1291,7 +1298,7 @@
}
}
} else {
- Log.w(TAG, "Misformatted scan result text with " +
+ loge("Misformatted scan result text with " +
result.length + " fields: " + line);
}
}
@@ -1419,15 +1426,15 @@
private void setHighPerfModeEnabledNative(boolean enable) {
if(!WifiNative.setSuspendOptimizationsCommand(!enable)) {
- Log.e(TAG, "set suspend optimizations failed!");
+ loge("set suspend optimizations failed!");
}
if (enable) {
if (!WifiNative.setPowerModeCommand(POWER_MODE_ACTIVE)) {
- Log.e(TAG, "set power mode active failed!");
+ loge("set power mode active failed!");
}
} else {
if (!WifiNative.setPowerModeCommand(POWER_MODE_AUTO)) {
- Log.e(TAG, "set power mode auto failed!");
+ loge("set power mode auto failed!");
}
}
}
@@ -1442,7 +1449,10 @@
mLinkProperties.setHttpProxy(WifiConfigStore.getProxyProperties(mLastNetworkId));
}
mLinkProperties.setInterfaceName(mInterfaceName);
- Log.d(TAG, "netId=" + mLastNetworkId + " Link configured: " + mLinkProperties.toString());
+ if (DBG) {
+ log("netId=" + mLastNetworkId + " Link configured: " +
+ mLinkProperties.toString());
+ }
}
private int getMaxDhcpRetries() {
@@ -1503,8 +1513,11 @@
* @param state the new @{code DetailedState}
*/
private void setNetworkDetailedState(NetworkInfo.DetailedState state) {
- Log.d(TAG, "setDetailed state, old ="
- + mNetworkInfo.getDetailedState() + " and new state=" + state);
+ if (DBG) {
+ log("setDetailed state, old ="
+ + mNetworkInfo.getDetailedState() + " and new state=" + state);
+ }
+
if (state != mNetworkInfo.getDetailedState()) {
mNetworkInfo.setDetailedState(state, null, null);
}
@@ -1547,7 +1560,7 @@
* using the interface, stopping DHCP & disabling interface
*/
private void handleNetworkDisconnect() {
- Log.d(TAG, "Stopping DHCP and clearing IP");
+ if (DBG) log("Stopping DHCP and clearing IP");
/*
* stop DHCP
@@ -1560,8 +1573,9 @@
try {
mNwService.clearInterfaceAddresses(mInterfaceName);
+ mNwService.disableIpv6(mInterfaceName);
} catch (Exception e) {
- Log.e(TAG, "Failed to clear IP addresses on disconnect" + e);
+ loge("Failed to clear addresses or disable ipv6" + e);
}
/* Reset data structures */
@@ -1646,8 +1660,10 @@
linkProperties.setHttpProxy(WifiConfigStore.getProxyProperties(mLastNetworkId));
linkProperties.setInterfaceName(mInterfaceName);
if (!linkProperties.equals(mLinkProperties)) {
- Log.d(TAG, "Link configuration changed for netId: " + mLastNetworkId
- + " old: " + mLinkProperties + "new: " + linkProperties);
+ if (DBG) {
+ log("Link configuration changed for netId: " + mLastNetworkId
+ + " old: " + mLinkProperties + "new: " + linkProperties);
+ }
mLinkProperties = linkProperties;
sendLinkConfigurationChangedBroadcast();
}
@@ -1659,7 +1675,7 @@
}
private void handleFailedIpConfiguration() {
- Log.e(TAG, "IP configuration failed");
+ loge("IP configuration failed");
mWifiInfo.setInetAddress(null);
/**
@@ -1667,7 +1683,7 @@
* to a given network, disable the network
*/
if (++mReconnectCount > getMaxDhcpRetries()) {
- Log.e(TAG, "Failed " +
+ loge("Failed " +
mReconnectCount + " times, Disabling " + mLastNetworkId);
WifiConfigStore.disableNetwork(mLastNetworkId,
WifiConfiguration.DISABLED_DHCP_FAILURE);
@@ -1696,12 +1712,12 @@
try {
mNwService.startAccessPoint(config, mInterfaceName, SOFTAP_IFACE);
} catch (Exception e) {
- Log.e(TAG, "Exception in softap start " + e);
+ loge("Exception in softap start " + e);
try {
mNwService.stopAccessPoint(mInterfaceName);
mNwService.startAccessPoint(config, mInterfaceName, SOFTAP_IFACE);
} catch (Exception e1) {
- Log.e(TAG, "Exception in softap re-start " + e1);
+ loge("Exception in softap re-start " + e1);
return false;
}
}
@@ -1715,17 +1731,17 @@
class DefaultState extends State {
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
if (message.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
mWifiP2pChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
} else {
- Log.e(TAG, "WifiP2pService connection failure, error=" + message.arg1);
+ loge("WifiP2pService connection failure, error=" + message.arg1);
}
break;
case AsyncChannel.CMD_CHANNEL_DISCONNECTED:
- Log.e(TAG, "WifiP2pService channel lost, message.arg1 =" + message.arg1);
+ loge("WifiP2pService channel lost, message.arg1 =" + message.arg1);
//TODO: Re-establish connection to state machine after a delay
//mWifiP2pChannel.connect(mContext, getHandler(), mWifiP2pManager.getMessenger());
break;
@@ -1811,7 +1827,7 @@
deferMessage(message);
break;
default:
- Log.e(TAG, "Error! unhandled message" + message);
+ loge("Error! unhandled message" + message);
break;
}
return HANDLED;
@@ -1822,7 +1838,7 @@
@Override
//TODO: could move logging into a common class
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
// [31-8] Reserved for future use
// [7 - 0] HSM state change
// 50021 wifi_state_changed (custom|1|5)
@@ -1841,13 +1857,28 @@
mWifiP2pManager = (WifiP2pManager) mContext.getSystemService(Context.WIFI_P2P_SERVICE);
mWifiP2pChannel.connect(mContext, getHandler(), mWifiP2pManager.getMessenger());
+ /* IPv6 is disabled at boot time and is controlled by framework
+ * to be enabled only as long as we are connected to an access point
+ *
+ * This fixes issues, a few being:
+ * - IPv6 addresses and routes stick around after disconnection
+ * - When connected, the kernel is unaware and can fail to start IPv6 negotiation
+ * - The kernel sometimes starts autoconfiguration when 802.1x is not complete
+ */
+ try {
+ mNwService.disableIpv6(mInterfaceName);
+ } catch (RemoteException re) {
+ loge("Failed to disable IPv6: " + re);
+ } catch (IllegalStateException e) {
+ loge("Failed to disable IPv6: " + e);
+ }
}
}
class DriverLoadingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
final Message message = new Message();
@@ -1869,10 +1900,10 @@
}
if(WifiNative.loadDriver()) {
- Log.d(TAG, "Driver load successful");
+ if (DBG) log("Driver load successful");
sendMessage(CMD_LOAD_DRIVER_SUCCESS);
} else {
- Log.e(TAG, "Failed to load driver!");
+ loge("Failed to load driver!");
switch(message.arg1) {
case WIFI_STATE_ENABLING:
setWifiState(WIFI_STATE_UNKNOWN);
@@ -1890,7 +1921,7 @@
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
case CMD_LOAD_DRIVER_SUCCESS:
transitionTo(mDriverLoadedState);
@@ -1926,12 +1957,12 @@
class DriverLoadedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case CMD_UNLOAD_DRIVER:
transitionTo(mDriverUnloadingState);
@@ -1940,7 +1971,7 @@
try {
mNwService.wifiFirmwareReload(mInterfaceName, "STA");
} catch (Exception e) {
- Log.e(TAG, "Failed to reload STA firmware " + e);
+ loge("Failed to reload STA firmware " + e);
// continue
}
try {
@@ -1951,17 +1982,17 @@
//Set privacy extensions
mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true);
} catch (RemoteException re) {
- if (DBG) Log.w(TAG, "Unable to change interface settings: " + re);
+ loge("Unable to change interface settings: " + re);
} catch (IllegalStateException ie) {
- if (DBG) Log.w(TAG, "Unable to change interface settings: " + ie);
+ loge("Unable to change interface settings: " + ie);
}
if(WifiNative.startSupplicant()) {
- Log.d(TAG, "Supplicant start successful");
+ if (DBG) log("Supplicant start successful");
mWifiMonitor.startMonitoring();
transitionTo(mSupplicantStartingState);
} else {
- Log.e(TAG, "Failed to start supplicant!");
+ loge("Failed to start supplicant!");
sendMessage(obtainMessage(CMD_UNLOAD_DRIVER, WIFI_STATE_UNKNOWN, 0));
}
break;
@@ -1979,17 +2010,17 @@
class DriverUnloadingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
final Message message = new Message();
message.copyFrom(getCurrentMessage());
new Thread(new Runnable() {
public void run() {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
mWakeLock.acquire();
if(WifiNative.unloadDriver()) {
- Log.d(TAG, "Driver unload successful");
+ if (DBG) log("Driver unload successful");
sendMessage(CMD_UNLOAD_DRIVER_SUCCESS);
switch(message.arg1) {
@@ -2003,7 +2034,7 @@
break;
}
} else {
- Log.e(TAG, "Failed to unload driver!");
+ loge("Failed to unload driver!");
sendMessage(CMD_UNLOAD_DRIVER_FAILURE);
switch(message.arg1) {
@@ -2024,7 +2055,7 @@
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
case CMD_UNLOAD_DRIVER_SUCCESS:
transitionTo(mDriverUnloadedState);
@@ -2060,12 +2091,12 @@
class DriverUnloadedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
case CMD_LOAD_DRIVER:
mWifiP2pChannel.sendMessage(WIFI_ENABLE_PENDING);
@@ -2085,12 +2116,12 @@
class DriverFailedState extends State {
@Override
public void enter() {
- Log.e(TAG, getName() + "\n");
+ loge(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
return NOT_HANDLED;
}
}
@@ -2099,15 +2130,15 @@
class SupplicantStartingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case WifiMonitor.SUP_CONNECTION_EVENT:
- Log.d(TAG, "Supplicant connection established");
+ if (DBG) log("Supplicant connection established");
setWifiState(WIFI_STATE_ENABLED);
mSupplicantRestartCount = 0;
/* Reset the supplicant state to indicate the supplicant
@@ -2128,12 +2159,12 @@
break;
case WifiMonitor.SUP_DISCONNECTION_EVENT:
if (++mSupplicantRestartCount <= SUPPLICANT_RESTART_TRIES) {
- Log.e(TAG, "Failed to setup control channel, restart supplicant");
+ loge("Failed to setup control channel, restart supplicant");
WifiNative.killSupplicant();
transitionTo(mDriverLoadedState);
sendMessageDelayed(CMD_START_SUPPLICANT, SUPPLICANT_RESTART_INTERVAL_MSECS);
} else {
- Log.e(TAG, "Failed " + mSupplicantRestartCount +
+ loge("Failed " + mSupplicantRestartCount +
" times to start supplicant, unload driver");
mSupplicantRestartCount = 0;
transitionTo(mDriverLoadedState);
@@ -2168,7 +2199,7 @@
class SupplicantStartedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
/* Initialize for connect mode operation at start */
mIsScanMode = false;
@@ -2182,7 +2213,7 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
WifiConfiguration config;
boolean eventLoggingEnabled = true;
switch(message.what) {
@@ -2190,7 +2221,7 @@
transitionTo(mSupplicantStoppingState);
break;
case WifiMonitor.SUP_DISCONNECTION_EVENT: /* Supplicant connection lost */
- Log.e(TAG, "Connection lost, restart supplicant");
+ loge("Connection lost, restart supplicant");
WifiNative.killSupplicant();
WifiNative.closeSupplicantConnection();
mNetworkInfo.setIsAvailable(false);
@@ -2225,7 +2256,11 @@
mReplyChannel.replyToMessage(message, message.what, ok ? SUCCESS : FAILURE);
break;
case CMD_ENABLE_ALL_NETWORKS:
- WifiConfigStore.enableAllNetworks();
+ long time = android.os.SystemClock.elapsedRealtime();
+ if (time - mLastEnableAllNetworksTime > MIN_INTERVAL_ENABLE_ALL_NETWORKS_MS) {
+ WifiConfigStore.enableAllNetworks();
+ mLastEnableAllNetworksTime = time;
+ }
break;
case CMD_DISABLE_NETWORK:
ok = WifiConfigStore.disableNetwork(message.arg1, message.arg2);
@@ -2254,7 +2289,7 @@
break;
/* Cannot start soft AP while in client mode */
case CMD_START_AP:
- Log.d(TAG, "Failed to start soft AP with a running supplicant");
+ loge("Failed to start soft AP with a running supplicant");
setWifiApState(WIFI_AP_STATE_FAILED);
break;
case CMD_SET_SCAN_MODE:
@@ -2285,11 +2320,11 @@
class SupplicantStoppingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
- Log.d(TAG, "stopping supplicant");
+ if (DBG) log("stopping supplicant");
if (!WifiNative.stopSupplicant()) {
- Log.e(TAG, "Failed to stop supplicant");
+ loge("Failed to stop supplicant");
}
/* Send ourselves a delayed message to indicate failure after a wait time */
@@ -2305,13 +2340,13 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case WifiMonitor.SUP_CONNECTION_EVENT:
- Log.e(TAG, "Supplicant connection received while stopping");
+ loge("Supplicant connection received while stopping");
break;
case WifiMonitor.SUP_DISCONNECTION_EVENT:
- Log.d(TAG, "Supplicant connection lost");
+ if (DBG) log("Supplicant connection lost");
/* Socket connection can be lost when we do a graceful shutdown
* or when the driver is hung. Ensure supplicant is stopped here.
*/
@@ -2321,7 +2356,7 @@
break;
case CMD_STOP_SUPPLICANT_FAILED:
if (message.arg1 == mSupplicantStopFailureToken) {
- Log.e(TAG, "Timed out on a supplicant stop, kill and proceed");
+ loge("Timed out on a supplicant stop, kill and proceed");
WifiNative.killSupplicant();
WifiNative.closeSupplicantConnection();
transitionTo(mDriverLoadedState);
@@ -2355,12 +2390,12 @@
class DriverStartingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
SupplicantState state = handleSupplicantStateChange(message);
@@ -2402,7 +2437,7 @@
class DriverStartedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
mIsRunning = true;
@@ -2443,7 +2478,7 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
boolean eventLoggingEnabled = true;
switch(message.what) {
case CMD_SET_SCAN_TYPE:
@@ -2463,20 +2498,20 @@
break;
case CMD_SET_COUNTRY_CODE:
String country = (String) message.obj;
- Log.d(TAG, "set country code " + country);
+ if (DBG) log("set country code " + country);
if (!WifiNative.setCountryCodeCommand(country.toUpperCase())) {
- Log.e(TAG, "Failed to set country code " + country);
+ loge("Failed to set country code " + country);
}
break;
case CMD_SET_FREQUENCY_BAND:
int band = message.arg1;
- Log.d(TAG, "set frequency band " + band);
+ if (DBG) log("set frequency band " + band);
if (WifiNative.setBandCommand(band)) {
mFrequencyBand.set(band);
//Fetch the latest scan results when frequency band is set
startScan(true);
} else {
- Log.e(TAG, "Failed to set frequency band " + band);
+ loge("Failed to set frequency band " + band);
}
break;
case CMD_BLUETOOTH_ADAPTER_STATE_CHANGE:
@@ -2496,7 +2531,7 @@
} else if (message.arg1 == MULTICAST_V4) {
WifiNative.startFilteringMulticastV4Packets();
} else {
- Log.e(TAG, "Illegal arugments to CMD_START_PACKET_FILTERING");
+ loge("Illegal arugments to CMD_START_PACKET_FILTERING");
}
break;
case CMD_STOP_PACKET_FILTERING:
@@ -2505,7 +2540,7 @@
} else if (message.arg1 == MULTICAST_V4) {
WifiNative.stopFilteringMulticastV4Packets();
} else {
- Log.e(TAG, "Illegal arugments to CMD_STOP_PACKET_FILTERING");
+ loge("Illegal arugments to CMD_STOP_PACKET_FILTERING");
}
break;
default:
@@ -2518,7 +2553,7 @@
}
@Override
public void exit() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
mIsRunning = false;
updateBatteryWorkSource(null);
mScanResults = null;
@@ -2528,12 +2563,12 @@
class DriverStoppingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
SupplicantState state = handleSupplicantStateChange(message);
@@ -2567,13 +2602,22 @@
class DriverStoppedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
+ case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
+ StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
+ SupplicantState state = stateChangeResult.state;
+ // A WEXT bug means that we can be back to driver started state
+ // unexpectedly
+ if (SupplicantState.isDriverActive(state)) {
+ transitionTo(mDriverStartedState);
+ }
+ break;
case CMD_START_DRIVER:
mWakeLock.acquire();
WifiNative.startDriverCommand();
@@ -2591,12 +2635,12 @@
class ScanModeState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case CMD_SET_SCAN_MODE:
if (message.arg1 == SCAN_ONLY_MODE) {
@@ -2628,12 +2672,12 @@
class ConnectModeState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
StateChangeResult stateChangeResult;
switch(message.what) {
case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
@@ -2644,8 +2688,18 @@
sendErrorBroadcast(WifiManager.WPS_OVERLAP_ERROR);
break;
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
- handleSupplicantStateChange(message);
- break;
+ SupplicantState state = handleSupplicantStateChange(message);
+ // Due to a WEXT bug, during the time of driver start/stop
+ // we can go into a driver stopped state in an unexpected way.
+ // The sequence eventually puts interface
+ // up and we should be back to a connected state
+ if (!SupplicantState.isDriverActive(state)) {
+ if (mNetworkInfo.getState() != NetworkInfo.State.DISCONNECTED) {
+ handleNetworkDisconnect();
+ }
+ transitionTo(mDriverStoppedState);
+ }
+ break;
/* Do a redundant disconnect without transition */
case CMD_DISCONNECT:
WifiNative.disconnectCommand();
@@ -2680,7 +2734,7 @@
mLastExplicitNetworkId = netId;
mLastNetworkChoiceTime = SystemClock.elapsedRealtime();
mNextWifiActionExplicit = true;
- Slog.d(TAG, "Setting wifi connect explicit for netid " + netId);
+ if (DBG) log("Setting wifi connect explicit for netid " + netId);
/* Expect a disconnection from the old connection */
transitionTo(mDisconnectingState);
break;
@@ -2694,7 +2748,7 @@
/* Handle scan results */
return NOT_HANDLED;
case WifiMonitor.NETWORK_CONNECTION_EVENT:
- Log.d(TAG,"Network connection established");
+ if (DBG) log("Network connection established");
mLastNetworkId = message.arg1;
mLastBssid = (String) message.obj;
@@ -2715,7 +2769,7 @@
transitionTo(mConnectingState);
break;
case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
- Log.d(TAG,"Network connection lost");
+ if (DBG) log("Network connection lost");
handleNetworkDisconnect();
transitionTo(mDisconnectedState);
break;
@@ -2731,10 +2785,18 @@
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
- if (!WifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
+ try {
+ mNwService.enableIpv6(mInterfaceName);
+ } catch (RemoteException re) {
+ loge("Failed to enable IPv6: " + re);
+ } catch (IllegalStateException e) {
+ loge("Failed to enable IPv6: " + e);
+ }
+
+ if (!WifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
//start DHCP
mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(
mContext, WifiStateMachine.this, mInterfaceName);
@@ -2748,20 +2810,20 @@
ifcg.interfaceFlags = "[up]";
try {
mNwService.setInterfaceConfig(mInterfaceName, ifcg);
- Log.v(TAG, "Static IP configuration succeeded");
+ if (DBG) log("Static IP configuration succeeded");
sendMessage(CMD_STATIC_IP_SUCCESS, dhcpInfoInternal);
} catch (RemoteException re) {
- Log.v(TAG, "Static IP configuration failed: " + re);
+ loge("Static IP configuration failed: " + re);
sendMessage(CMD_STATIC_IP_FAILURE);
} catch (IllegalStateException e) {
- Log.v(TAG, "Static IP configuration failed: " + e);
+ loge("Static IP configuration failed: " + e);
sendMessage(CMD_STATIC_IP_FAILURE);
}
}
- }
+ }
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case DhcpStateMachine.CMD_PRE_DHCP_ACTION:
@@ -2832,7 +2894,7 @@
class ConnectedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
mRssiPollToken++;
if (mEnableRssiPolling) {
@@ -2841,7 +2903,7 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
boolean eventLoggingEnabled = true;
switch (message.what) {
case DhcpStateMachine.CMD_PRE_DHCP_ACTION:
@@ -2897,11 +2959,11 @@
NetworkUpdateResult result = WifiConfigStore.saveNetwork(config);
if (mWifiInfo.getNetworkId() == result.getNetworkId()) {
if (result.hasIpChanged()) {
- Log.d(TAG,"Reconfiguring IP on connection");
+ log("Reconfiguring IP on connection");
transitionTo(mConnectingState);
}
if (result.hasProxyChanged()) {
- Log.d(TAG,"Reconfiguring proxy on connection");
+ log("Reconfiguring proxy on connection");
configureLinkProperties();
sendLinkConfigurationChangedBroadcast();
}
@@ -2953,12 +3015,12 @@
class DisconnectingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
case CMD_STOP_DRIVER: /* Stop driver only after disconnect handled */
deferMessage(message);
@@ -3005,7 +3067,7 @@
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
mFrameworkScanIntervalMs = Settings.Secure.getLong(mContext.getContentResolver(),
@@ -3032,7 +3094,7 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
case CMD_SET_SCAN_MODE:
if (message.arg1 == SCAN_ONLY_MODE) {
@@ -3095,12 +3157,12 @@
class WaitForWpsCompletionState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch (message.what) {
/* Defer all commands that can cause connections to a different network
* or put the state machine out of connect mode
@@ -3115,7 +3177,7 @@
deferMessage(message);
break;
case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
- Log.d(TAG,"Network connection lost");
+ if (DBG) log("Network connection lost");
handleNetworkDisconnect();
break;
case WPS_COMPLETED_EVENT:
@@ -3134,7 +3196,7 @@
class SoftApStartingState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
final Message message = Message.obtain(getCurrentMessage());
@@ -3144,10 +3206,10 @@
new Thread(new Runnable() {
public void run() {
if (startSoftApWithConfig(config)) {
- Log.d(TAG, "Soft AP start successful");
+ if (DBG) log("Soft AP start successful");
sendMessage(CMD_START_AP_SUCCESS);
} else {
- Log.d(TAG, "Soft AP start failed");
+ loge("Soft AP start failed");
sendMessage(CMD_START_AP_FAILURE);
}
}
@@ -3155,7 +3217,7 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case CMD_LOAD_DRIVER:
case CMD_UNLOAD_DRIVER:
@@ -3195,21 +3257,21 @@
class SoftApStartedState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case CMD_STOP_AP:
- Log.d(TAG,"Stopping Soft AP");
+ if (DBG) log("Stopping Soft AP");
setWifiApState(WIFI_AP_STATE_DISABLING);
stopTethering();
try {
mNwService.stopAccessPoint(mInterfaceName);
} catch(Exception e) {
- Log.e(TAG, "Exception in stopAccessPoint()");
+ loge("Exception in stopAccessPoint()");
}
transitionTo(mDriverLoadedState);
break;
@@ -3218,7 +3280,7 @@
break;
/* Fail client mode operation when soft AP is enabled */
case CMD_START_SUPPLICANT:
- Log.e(TAG,"Cannot start supplicant with a running soft AP");
+ loge("Cannot start supplicant with a running soft AP");
setWifiState(WIFI_STATE_UNKNOWN);
break;
case CMD_TETHER_INTERFACE:
@@ -3244,7 +3306,7 @@
private int mSavedArg;
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
//Preserve the argument arg1 that has information used in DriverLoadingState
@@ -3252,7 +3314,7 @@
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case WifiP2pService.WIFI_ENABLE_PROCEED:
//restore argument from original message (CMD_LOAD_DRIVER)
@@ -3287,12 +3349,12 @@
class TetheredState extends State {
@Override
public void enter() {
- if (DBG) Log.d(TAG, getName() + "\n");
+ if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
}
@Override
public boolean processMessage(Message message) {
- if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
+ if (DBG) log(getName() + message.toString() + "\n");
switch(message.what) {
case CMD_TETHER_INTERFACE:
// Ignore any duplicate interface available notifications
@@ -3303,4 +3365,12 @@
}
}
}
+
+ private void log(String s) {
+ Log.d(TAG, s);
+ }
+
+ private void loge(String s) {
+ Log.e(TAG, s);
+ }
}
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
index af8c486..5d5b9ef 100644
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
@@ -35,7 +35,6 @@
import android.os.SystemProperties;
import android.provider.Settings;
import android.provider.Settings.Secure;
-import android.util.Slog;
import android.util.Log;
import com.android.internal.util.Protocol;
@@ -67,10 +66,8 @@
*/
public class WifiWatchdogStateMachine extends StateMachine {
-
- private static final boolean VDBG = false;
- private static final boolean DBG = true;
- private static final String WWSM_TAG = "WifiWatchdogStateMachine";
+ private static final boolean DBG = false;
+ private static final String TAG = "WifiWatchdogStateMachine";
private static final String WATCHDOG_NOTIFICATION_ID = "Android.System.WifiWatchdog";
private static final int WIFI_SIGNAL_LEVELS = 4;
@@ -192,7 +189,7 @@
* (all other states)
*/
private WifiWatchdogStateMachine(Context context) {
- super(WWSM_TAG);
+ super(TAG);
mContext = context;
mContentResolver = context.getContentResolver();
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
@@ -351,7 +348,7 @@
return urlConnection.getResponseCode() != 204;
} catch (IOException e) {
if (DBG) {
- Slog.d(WWSM_TAG, "Walled garden check - probably not a portal: exception ", e);
+ log("Walled garden check - probably not a portal: exception " + e);
}
return false;
} finally {
@@ -443,7 +440,7 @@
if (results == null) {
if (DBG) {
- Slog.d(WWSM_TAG, "updateBssids: Got null scan results!");
+ log("updateBssids: Got null scan results!");
}
return;
}
@@ -451,7 +448,7 @@
for (ScanResult result : results) {
if (result == null || result.SSID == null) {
if (DBG) {
- Slog.d(WWSM_TAG, "Received invalid scan result: " + result);
+ log("Received invalid scan result: " + result);
}
continue;
}
@@ -461,8 +458,8 @@
}
private void resetWatchdogState() {
- if (VDBG) {
- Slog.v(WWSM_TAG, "Resetting watchdog state...");
+ if (DBG) {
+ log("Resetting watchdog state...");
}
mConnectionInfo = null;
mDisableAPNextFailure = false;
@@ -522,13 +519,13 @@
switch (msg.what) {
case EVENT_WATCHDOG_SETTINGS_CHANGE:
updateSettings();
- if (VDBG) {
- Slog.d(WWSM_TAG, "Updating wifi-watchdog secure settings");
+ if (DBG) {
+ log("Updating wifi-watchdog secure settings");
}
return HANDLED;
}
- if (VDBG) {
- Slog.v(WWSM_TAG, "Caught message " + msg.what + " in state " +
+ if (DBG) {
+ log("Caught message " + msg.what + " in state " +
getCurrentState().getName());
}
return HANDLED;
@@ -553,7 +550,7 @@
public void enter() {
resetWatchdogState();
mContext.registerReceiver(mBroadcastReceiver, mIntentFilter);
- Slog.i(WWSM_TAG, "WifiWatchdogService enabled");
+ if (DBG) log("WifiWatchdogService enabled");
}
@Override
@@ -574,12 +571,12 @@
WifiInfo wifiInfo = (WifiInfo)
stateChangeIntent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
if (wifiInfo == null) {
- Slog.e(WWSM_TAG, "Connected --> WifiInfo object null!");
+ loge("Connected --> WifiInfo object null!");
return HANDLED;
}
if (wifiInfo.getSSID() == null || wifiInfo.getBSSID() == null) {
- Slog.e(WWSM_TAG, "Received wifiInfo object with null elts: "
+ loge("Received wifiInfo object with null elts: "
+ wifiInfoToStr(wifiInfo));
return HANDLED;
}
@@ -598,7 +595,7 @@
return HANDLED;
case EVENT_WIFI_RADIO_STATE_CHANGE:
if ((Integer) msg.obj == WifiManager.WIFI_STATE_DISABLING) {
- Slog.i(WWSM_TAG, "WifiStateDisabling -- Resetting WatchdogState");
+ if (DBG) log("WifiStateDisabling -- Resetting WatchdogState");
resetWatchdogState();
mNetEventCounter++;
transitionTo(mNotConnectedState);
@@ -613,8 +610,8 @@
* @param wifiInfo Info object with non-null ssid and bssid
*/
private void initConnection(WifiInfo wifiInfo) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "Connected:: old " + wifiInfoToStr(mConnectionInfo) +
+ if (DBG) {
+ log("Connected:: old " + wifiInfoToStr(mConnectionInfo) +
" ==> new " + wifiInfoToStr(wifiInfo));
}
@@ -628,7 +625,7 @@
@Override
public void exit() {
mContext.unregisterReceiver(mBroadcastReceiver);
- Slog.i(WWSM_TAG, "WifiWatchdogService disabled");
+ if (DBG) log("WifiWatchdogService disabled");
}
}
@@ -671,7 +668,7 @@
if (DBG) {
dnsCheckLogStr = String.format("Pinging %s on ssid [%s]: ",
mDnsList, mConnectionInfo.getSSID());
- Slog.d(WWSM_TAG, dnsCheckLogStr);
+ log(dnsCheckLogStr);
}
idDnsMap.clear();
@@ -694,7 +691,7 @@
Integer dnsServerId = idDnsMap.get(pingID);
if (dnsServerId == null) {
- Slog.w(WWSM_TAG, "Received a Dns response with unknown ID!");
+ loge("Received a Dns response with unknown ID!");
return HANDLED;
}
@@ -722,7 +719,7 @@
if (dnsCheckSuccesses[dnsServerId] >= mMinDnsResponses) {
// DNS CHECKS OK, NOW WALLED GARDEN
if (DBG) {
- Slog.d(WWSM_TAG, makeLogString() + " SUCCESS");
+ log(makeLogString() + " SUCCESS");
}
if (!shouldCheckWalledGarden()) {
@@ -732,13 +729,10 @@
mLastWalledGardenCheckTime = SystemClock.elapsedRealtime();
if (isWalledGardenConnection()) {
- if (DBG)
- Slog.d(WWSM_TAG,
- "Walled garden test complete - walled garden detected");
+ if (DBG) log("Walled garden test complete - walled garden detected");
transitionTo(mWalledGardenState);
} else {
- if (DBG)
- Slog.d(WWSM_TAG, "Walled garden test complete - online");
+ if (DBG) log("Walled garden test complete - online");
transitionTo(mOnlineWatchState);
}
return HANDLED;
@@ -746,7 +740,7 @@
if (idDnsMap.isEmpty()) {
if (DBG) {
- Slog.d(WWSM_TAG, makeLogString() + " FAILURE");
+ log(makeLogString() + " FAILURE");
}
transitionTo(mDnsCheckFailureState);
return HANDLED;
@@ -769,15 +763,15 @@
private boolean shouldCheckWalledGarden() {
if (!mWalledGardenTestEnabled) {
- if (VDBG)
- Slog.v(WWSM_TAG, "Skipping walled garden check - disabled");
+ if (DBG)
+ log("Skipping walled garden check - disabled");
return false;
}
long waitTime = waitTime(mWalledGardenIntervalMs,
mLastWalledGardenCheckTime);
if (waitTime > 0) {
if (DBG) {
- Slog.d(WWSM_TAG, "Skipping walled garden check - wait " +
+ log("Skipping walled garden check - wait " +
waitTime + " ms.");
}
return false;
@@ -825,28 +819,28 @@
case EVENT_RSSI_CHANGE:
if (msg.arg1 != mNetEventCounter) {
if (DBG) {
- Slog.d(WWSM_TAG, "Rssi change message out of sync, ignoring");
+ log("Rssi change message out of sync, ignoring");
}
return HANDLED;
}
int newRssi = msg.arg2;
signalUnstable = !rssiStrengthAboveCutoff(newRssi);
- if (VDBG) {
- Slog.v(WWSM_TAG, "OnlineWatchState:: new rssi " + newRssi + " --> level " +
+ if (DBG) {
+ log("OnlineWatchState:: new rssi " + newRssi + " --> level " +
WifiManager.calculateSignalLevel(newRssi, WIFI_SIGNAL_LEVELS));
}
if (signalUnstable && !unstableSignalChecks) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "Sending triggered check msg");
+ if (DBG) {
+ log("Sending triggered check msg");
}
triggerSingleDnsCheck();
}
return HANDLED;
case MESSAGE_SINGLE_DNS_CHECK:
if (msg.arg1 != checkGuard) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "Single check msg out of sync, ignoring.");
+ if (DBG) {
+ log("Single check msg out of sync, ignoring.");
}
return HANDLED;
}
@@ -865,8 +859,8 @@
pingInfoMap.remove(msg.arg1);
int responseTime = msg.arg2;
if (responseTime >= 0) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "Single DNS ping OK. Response time: "
+ if (DBG) {
+ log("Single DNS ping OK. Response time: "
+ responseTime + " from DNS " + curDnsServer);
}
pingInfoMap.clear();
@@ -877,7 +871,7 @@
} else {
if (pingInfoMap.isEmpty()) {
if (DBG) {
- Slog.d(WWSM_TAG, "Single dns ping failure. All dns servers failed, "
+ log("Single dns ping failure. All dns servers failed, "
+ "starting full checks.");
}
transitionTo(mDnsCheckingState);
@@ -924,8 +918,8 @@
}
if (msg.arg1 != mNetEventCounter) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "Msg out of sync, ignoring...");
+ if (DBG) {
+ log("Msg out of sync, ignoring...");
}
return HANDLED;
}
@@ -933,7 +927,7 @@
if (mDisableAPNextFailure || mNumCheckFailures >= mBssids.size()
|| mNumCheckFailures >= mMaxSsidBlacklists) {
if (sWifiOnly) {
- Slog.w(WWSM_TAG, "Would disable bad network, but device has no mobile data!" +
+ log("Would disable bad network, but device has no mobile data!" +
" Going idle...");
// This state should be called idle -- will be changing flow.
transitionTo(mNotConnectedState);
@@ -941,7 +935,7 @@
}
// TODO : Unban networks if they had low signal ?
- Slog.i(WWSM_TAG, "Disabling current SSID " + wifiInfoToStr(mConnectionInfo)
+ log("Disabling current SSID " + wifiInfoToStr(mConnectionInfo)
+ ". " + "numCheckFailures " + mNumCheckFailures
+ ", numAPs " + mBssids.size());
int networkId = mConnectionInfo.getNetworkId();
@@ -955,7 +949,7 @@
}
transitionTo(mNotConnectedState);
} else {
- Slog.i(WWSM_TAG, "Blacklisting current BSSID. " + wifiInfoToStr(mConnectionInfo)
+ log("Blacklisting current BSSID. " + wifiInfoToStr(mConnectionInfo)
+ "numCheckFailures " + mNumCheckFailures + ", numAPs " + mBssids.size());
mWifiManager.addToBlacklist(mConnectionInfo.getBSSID());
@@ -979,8 +973,8 @@
}
if (msg.arg1 != mNetEventCounter) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "WalledGardenState::Msg out of sync, ignoring...");
+ if (DBG) {
+ log("WalledGardenState::Msg out of sync, ignoring...");
}
return HANDLED;
}
@@ -1005,8 +999,8 @@
}
if (msg.arg1 != mNetEventCounter) {
- if (VDBG) {
- Slog.v(WWSM_TAG, "BlacklistedApState::Msg out of sync, ignoring...");
+ if (DBG) {
+ log("BlacklistedApState::Msg out of sync, ignoring...");
}
return HANDLED;
}
@@ -1067,5 +1061,11 @@
return Settings.Secure.putInt(cr, name, value ? 1 : 0);
}
+ private void log(String s) {
+ Log.d(TAG, s);
+ }
+ private void loge(String s) {
+ Log.e(TAG, s);
+ }
}